RAID 10 não pode ser iniciado

5

Eu tenho uma matriz RAID 10 gerenciada com mdadm que falhou. O sintoma é que o X travou e não consegui fazer logon no terminal. Eu reiniciei o computador e /dev/md1 não foi iniciado.

Reuni as seguintes informações, algumas incompletas, pois copiei-as manualmente para outro computador:

$ cat /proc/mdstat

....

md1 :   inactive sdb3[1](S) sdd1[3](S) sdc2[2](S) sda1[0](S)
        1250273760 blocks super 1.0

A montagem falhou

$ mount /dev/md1    
EXT4-fs (md1): unable to read superblock

A digitalização encontrou os metadados

$ mdadm --examine --scan
...
ARRAY /dev/md/1 metadata=1.0 UUID=2c... name=linux:1

A execução falhou devido à falta de espelhos operacionais

$ mdadm --run /dev/md1
md/raid0:md1: not enough operational mirrors.
md: pers->run() failed...
mdadm:failed to run array /dev/md1: Input/output error

Após a tentativa de execução, apenas dois discos ainda estavam na matriz

$ cat /proc/mdstat
....
md1  : inactive sdd1[3] sdc2[2]
       62513638 blocks super 1.0

Tentando adicionar novamente um disco falhou

$ mdadm /dev/md1 --add /dev/sda1
mdadm: /dev/sda1 reports being an active member for /dev/md1, but --re-add fails
mdadm: not performing --add as that would convert /dev/sda1 in to a spare
mdadm: To make this a spare, use "mdadm --zero-superblock /dev/sda1" first

Eu gravei alguns metadados para tentar recriar o array

$ mdadm --examine /dev/sdb3 /dev/sdd1 /dev/sdc2 /dev/sda1 | grep -E 'dev|Update|Role|State|Chunk Size'
/dev/sdb3:
  State: active
  Update time:  Mon May 14 21:51:41 2012
  Chunk Size: 256K
  Device Role: Active device 1
  Array State : AAAA
/dev/sdd1:
  State: active
  Update time:  Mon May 14 22:11:11 2012
  Chunk Size: 256K
  Device Role: Active device 3
  Array State : ..AA
/dev/sdc2:
  State: active
  Update time:  Mon May 14 22:11:11 2012
  Chunk Size: 256K
  Device Role: Active device 2
  Array State : ..AA
/dev/sda1:
  State: active
  Update time:  Mon May 14 21:51:41 2012
  Chunk Size: 256K
  Device Role: Active device 0
  Array State : AAAA

Eu tentei recriar manualmente o array com base nas informações gravadas anteriormente

$ mdadm --create --metadata=1.0 --assume-clean --level=10 --raid-devices=4 --chunk=256K /dev/md1 /dev/sda1 /dev/sdb3 /dev/sdc2 /dev/sdd1
mdadm: /dev/sda1 appears to contain an ext2fs file system
mdadm: /dev/sda1 appears to be part of a raid array
mdadm: /dev/sdb3 appears to contain an ext2fs file system
mdadm: /dev/sdb3 appears to be part of a raid array
mdadmin: /dev/sdc2 appears to be part of a raid aray
mdadmin: /dev/sdd1 appears to be part of a raid aray

A montagem falha novamente, o que provavelmente significa que o ataque não foi criado corretamente

$ mount / dev / md1 / mnt

EXT4-fs (md1): ext4_check_descriptors: Checksum forgroup 0 failed (54076!=0)
EXT4-fs (md1): group descriptors corrupted!

A execução de um fsck resultou em muitos erros para levar em consideração seriamente, por isso não o deixei rodar.

Eu tentei recriar a matriz com dispositivos 'ausentes' e apenas dois discos, mas nenhuma combinação foi bem-sucedida. Não tenho certeza se tentei todos eles, mas tentei muitos.

Alguns detalhes:

  • mdadm é a versão 2.3.2, rodando no OpenSUSE 12.1, kernel 3.1.10, x86_64
  • todos os discos rígidos concluíram smartctl -t short sem erros

Como posso reconstruir a matriz RAID sem perder as informações ou , basta extrair as informações e copiá-las em outro lugar? Também estou curioso para saber se há algo que fiz de errado acima ao tentar recriar o array.

    
por Robert Munteanu 15.05.2012 / 13:24

1 resposta

1

Com um pouco de ajuda, consegui reconstruir um array degradado da seguinte maneira:

  1. Use o utilitário testdisk e observe que os /dev/sdc e /dev/sdd discos foram marcados com uma tabela de partições GPT
  2. Corrija a tabela de partições em /dev/sdd para ter o tipo de partição listado como fd em vez de 83
  3. Crie uma matriz RAID com apenas /dev/sda1 e /dev/sdd1
  4. Executar e2fsck -y /dev/md1 (espere muitas correções)

Uma dica útil ao recriar arrays de ataque é dar uma olhada nos primeiros 100 MB do dispositivo bruto para ver se ele se parece com um ext2 válido que deve ser passado para o e2fsck:

dd if=/dev/md1 of=/tmp/md1.img bs=1k count=1024
strings md1.img | lesss
    
por 16.05.2012 / 10:26