AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1143555
Accepted
guettli
guettli
Asked: 2023-09-12 23:30:06 +0800 CST2023-09-12 23:30:06 +0800 CST 2023-09-12 23:30:06 +0800 CST

mdadm --zero-superblock para todos os dispositivos de um mdraid?

  • 772

Não encontrei nenhuma maneira de remover um mdraid de um servidor com um comando.

Eu posso pará-lo atravésmdadm --stop /dev/md0

Mas o superbloco ainda está nos aparelhos.

mdadm --zero-superblock DEVICEprecisa de todos os dispositivos (como /dev/sdb1)

Eu sei que posso fazer mdadm --detail /dev/md0e então vejo os dispositivos.

Eu poderia escrever um script frágil para buscar as strings /dev/sd... da saída de mdadm --detail /dev/md0, mas gostaria de evitar isso.

Existe uma linha única para remover o superbloco de todos os dispositivos de um mdraid?

Gostaria de evitar analisar a saída de mdadm --detail, pois parece frágil.

software-raid
  • 3 3 respostas
  • 98 Views

3 respostas

  • Voted
  1. Best Answer
    shodanshok
    2023-09-19T20:38:29+08:002023-09-19T20:38:29+08:00

    Se você conhece os dispositivos componentes da matriz, pode simplesmente emitir algo como

    mdadm --zero-superblock /dev/sd[abcd]

    para remover o superbloco de vários dispositivos com um único comando.

    Observe que mdadmverifica o superbloco antes de zerar qualquer coisa, portanto, especificar sd*no comando acima deve tocar apenas nos discos componentes, sem gravar nada nos demais. No entanto, sugiro fortemente que você não faça isso: quaisquer problemas no roteamento de detecção de superbloco, ou no uso --force, substituirão dados válidos em discos não componentes (causando perda de dados). Na página de manual :

    Se o dispositivo contiver um superbloco md válido, o bloco será substituído por zeros. Com --force o bloco onde o superbloco estaria é sobrescrito mesmo que não pareça válido.

    Pelo motivo acima, se você não conhece os dispositivos componentes do array, sugiro listá-los via

    blkid -t TYPE="linux_raid_member" -o device

    e depois zerar os discos específicos com mdadm --zero-superblock. Isso pode ser programado com um comando bash de linha única:

    for dev in `blkid -t TYPE="linux_raid_member" -o device`; do echo "zeroing $dev"; mdadm --zero-superblock $dev; done
    

    Como sempre, verifique três vezes esses comandos para evitar perda de dados.

    EDIT: para descobrir os dispositivos componentes da matriz sem recorrer à análise da mdadm --detailsaída, você pode usar lsblk. Por exemplo, em uma matriz de teste criada por meio de loopdispositivos:

    # lsblk -l -n -s /dev/md127
    md127   9:127  0  255M  0 raid1
    loop5   7:5    0  256M  0 loop
    loop6   7:6    0  256M  0 loop
    
    • 3
  2. roaima
    2023-09-13T17:21:24+08:002023-09-13T17:21:24+08:00

    Não existe um único comando ( mdadm …) que irá remover o superbloco de todos os dispositivos de um mdraid. No entanto, é bastante simples escrever um script que se torne uma linha única:

    #!/bin/bash
    md=$1
    [ ! -b "$md" ] && { echo "ERROR: Not a block device: $md" >&2; exit 1; }
    
    # Collect the slices
    slices=($(mdadm --detail "$md" 2>/dev/null | awk '/active/{print $NF}'))
    [ ${#slices} -eq 0 ] && { echo "ERROR: No slices found for $md" >&2; exit 1; }
    
    # Sanity check
    if [ -t 2 ]
    then
        echo "Active MD RAID $md has slices: ${slices[*]}" >&2
        if [ -t 0 ]
        then
            read -p 'Stop and erase (Y/n)? ' yn
            [ ! "$yn" = 'Y' ] && exit 1
        fi
    fi
    
    # Stop the array
    echo "Stopping: $md" >&2
    if ! mdadm --stop "$md"
    then
        echo "ERROR: Cannot stop: $md" >&2
        exit 1
    fi
    
    # Erase the slices
    for slice in "${slices[@]}"
    do
        echo "Zero: $slice" >&2
        mdadm --zero-superblock "$slice"
    done
    
    # All done
    exit 0
    

    Exemplo de uso, assumindo que o script é chamado mdzeroe está no PATH, etc. e o dispositivo RAID indesejado é /dev/md1:

    mdzero /dev/md1
    
    Active MD RAID /dev/md1 has slices: /dev/dm-2 /dev/dm-3 /dev/dm-4
    Stop and erase (Y/n)? Y
    Stopping: /dev/md1
    mdadm: stopped /dev/md1
    Zero: /dev/dm-2
    Zero: /dev/dm-3
    Zero: /dev/dm-4
    

    A menos que você insira um "Y" (maiúsculo) em resposta à pergunta "Parar e apagar?" pergunta - ou o comando está sendo executado de forma não interativa - a ferramenta será encerrada nesse ponto. Essencialmente, você tem mais de 20 linhas de verificação de integridade para garantir que o mdadm --zero-superblockcomando ativo só seja executado se e onde for absolutamente pretendido

    • 1
  3. Matthew Ife
    2023-09-19T16:35:20+08:002023-09-19T16:35:20+08:00

    Você pode usar blkidpara fazer isso com um pouco de manipulação.

    Primeiro, obtenha o array de ataque que você deseja.

    mdadm --detail /dev/md0
    ...
    UUID : 8c9c9aa9:0c574535:e9080607:7ac4c6d8
    

    Converta o UUID em um formato UUID adequado e você poderá usá-lo blkidpara extrair todos os membros do disco.

    blkid -t UUID=8c9c9aa9-0c57-4535-e908-06077ac4c6d8 --output device
    /dev/nvme1n1p3
    /dev/nvme0n1p3
    

    Se você deseja apenas destruir todos os arrays de ataque mdadm, não precisa coletar nenhum outro identificador:

    blkid -t TYPE="linux_raid_member" --output device
    /dev/nvme1n1p2
    /dev/nvme1n1p3
    /dev/nvme0n1p2
    /dev/nvme0n1p3
    

    Para explodir tudo usando esse método você pode até usar wipefs. Isso poderia ser algo como ..

    blkid -t TYPE="linux_raid_member" --output device | xargs wipefs -n
    

    Obviamente, isso zerará todos os arrays raid de todos os discos, sem se preocupar com o array raid específico em questão. Eu adicionei um -npara evitar que as pessoas sejam descuidadas ao copiar/colar!

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve