mdadm + lvm2: destruiu todos os superblocos acidentalmente

2

Eu acidentalmente substituí todos os superblocos RAID1 por lixo. Eu acho que isso aconteceu porque eu ALT-CTRL-DEL inicializado quando o Ubuntu me colocou em algum tipo de modo de recuperação de disco rígido. Meu monitor não estava funcionando e eu fiz isso "cego".

Olhando para as minhas partições RAID, vejo isto:

# mdadm --examine /dev/sdc2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 00000000:00000000:00000000:00000000
  Creation Time : Fri Nov  1 18:59:05 2013
     Raid Level : -unknown-
   Raid Devices : 0
  Total Devices : 1
Preferred Minor : 127

    Update Time : Fri Nov  1 18:59:05 2013
          State : active
 Active Devices : 0
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 1
       Checksum : 6b1f0d22 - correct
         Events : 1


      Number   Major   Minor   RaidDevice State
this     0       8       34        0      spare   /dev/sdc2

   0     0       8       34        0      spare   /dev/sdc2

É evidente que os superblocos foram totalmente sobrescritos pelo lixo. Ambos os discos (sdb2, sdc2) parecem iguais, a informação é lixo, uuid é todo zeros, nível de ataque: desconhecido, dispositivos raid: 0, etc.

A melhor aposta que tenho é esta:

mdadm --create --assume-clean --metadata=0.90 /dev/md0 --level=1 --raid-devices=2 /dev/sdb2 /dev/sdc2

Posso recriar minha matriz RAID usando o mdadm --criar assim?

Na pilha RAID, eu tenho um volume físico LVM2. Posso de alguma forma acessar meus dados LVM2 de discos individuais ou imagens de disco de backup?

O GRUB é capaz de encontrar minha imagem initrd e do kernel a partir dos discos, / boot está no sistema de arquivos da partição raiz ext4 na parte superior do LVM2, não é uma partição separada. Então, acredito que os dados estão praticamente intactos e os superquadros sumiram.

edite: adicione --assume-clean à linha de comando do mdadm

    
por exDM69 02.11.2013 / 15:39

1 resposta

3

Se for o formato 0.90 superblock, você poderá usar apenas um membro diretamente (no modo somente leitura, se desejar). Isso lhe dá acesso aos seus dados e então você pode criar um novo RAID-1 novo com apenas o outro disco, copiar seus dados e depois adicionar o disco original ao RAID.

Se for algo diferente (como 1.2 metadata), primeiro você terá que encontrar o deslocamento da partição real antes de poder montá-la. Por exemplo, se é LVM você obtém o deslocamento assim:

# grep -a -b --only-matching LEVELONE /dev/disk
1049088:LABELONE

Substrato 512, pois o primeiro setor em um PV é gratuito; se realmente fosse 0.90 ou 1.0 metadata, o grep deveria mostrar 512: em vez disso, o que significa um deslocamento real de 0 ; se você conseguir algo maior, seu RAID estava usando outro formato.

Nesse caso, você pode criar um dispositivo de loop com o deslocamento correto:

# losetup -f --show --read-only --offset $((1049088-512)) /dev/disk
/dev/loop0
# file -s /dev/loop0
LVM2 ...

E esse deve ser seu PV e vgscan / vgchange -a y deve cuidar do resto.

Quanto a mdadm --create , isso pode ser feito se você souber o que está fazendo. Você só precisa ser muito, muito cuidadoso com isso. É apenas um último recurso.

Se o deslocamento for 0 , certifique-se de usar 0.90 metadata (se tiver certeza de que é o que estava usando); Se o deslocamento for outra coisa, certifique-se de que mdadm --create use o mesmo deslocamento novamente. Geralmente, isso não ocorre porque os padrões de mdadm mudam com o tempo. Então, especifique-o diretamente na linha de comando usando --data-offset .

Além disso, crie-o apenas com um disco. Deixe o outro disco como missing . Essa é uma maneira melhor de fazer isso do que --assume-clean , já que você pode primeiro verificar se a criação funcionou ou não (os dados do /dev/md? device usable?) E depois ter o outro disco sincronizado corretamente.

    
por 04.11.2013 / 12:27