Eu tenho um servidor com 3 discos rígidos sata. Cada um tem 2 partições: uma pequena faz parte de /dev/md0, um array raid1 (/boot), o restante faz parte de um array raid5 (/dev/md1), que é um volume físico lvm. Dentro dele estão 3 volumes lógicos (IIRC). Um deles é um reiserfs 3.6 fs contendo cerca de 100 gigas de dados.
Ontem este servidor travou. Ao ligar, a SMART me disse que uma das unidades estava morta. Ele estava realmente fazendo barulhos muito ruins. Então removi a unidade com falha e tentei reiniciar o sistema nos 2 discos restantes. O que falhou.
Com um live cd, iniciei e tentei reiniciar o array. Infelizmente, o mdadm recusou-se a fazê-lo, porque considerou que um dos 2 discos restantes também falhou.
Então, seguindo os conselhos encontrados emComo recuperar um array Linux md RAID5 com falha?que parecia que poderia se aplicar à minha situação, fiz algo que provavelmente foi simplesmente estúpido: corri
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sd[ab]2 missing
Agora, posso realmente iniciar esse array, mas as ferramentas lvm (vgscan, vgdisplay, pvck) não conseguem encontrar nada relacionado ao lvm no array e não consigo acessar meus dados. Acabei de limpar todos os metadados do lvm?
Minha sensação é que os dados reais ainda estão lá, sem danos (além dos metadados lvm). Existe uma chance de recuperar os dados? Como?
ATUALIZAR:
Seguindo o conselho de psusi (abaixo), tentei cada uma das seguintes maneiras de recriar o array:
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sda2 /dev/sdb2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sdb2 /dev/sda2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sda2 missing /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sdb2 missing /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 missing /dev/sda2 /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 missing /dev/sdb2 /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sda2 /dev/sdb2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sdb2 /dev/sda2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sda2 missing /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sdb2 missing /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 missing /dev/sda2 /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 missing /dev/sdb2 /dev/sda2
Que são basicamente todos os pedidos possíveis, tanto com -c64 quanto -c512. Após cada teste, executei um vgscan. Nenhum encontrou nada. Talvez eu não deva usar o vgscan, mas alguma outra ferramenta?
ATUALIZAÇÃO 2:
Tentei reconectar o disco rígido com falha. E, milagre, parece funcionar de alguma forma. Pelo menos, o suficiente para examiná-lo:
root@debian:~# mdadm --examine /dev/sda2
/dev/sda2:
Magic : a92b4efc
Version : 0.90.00
UUID : 1f5462ab:6945560d:019b01a5:914dd464
Creation Time : Fri Oct 17 12:40:40 2008
Raid Level : raid5
Used Dev Size : 160015360 (152.60 GiB 163.86 GB)
Array Size : 320030720 (305.21 GiB 327.71 GB)
Raid Devices : 3
Total Devices : 3
Preferred Minor : 1
Update Time : Tue Apr 12 08:15:03 2011
State : active
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Checksum : 64d514fb - correct
Events : 137
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
this 0 8 2 0 active sync /dev/sda2
0 0 8 2 0 active sync /dev/sda2
1 1 8 18 1 active sync /dev/sdb2
2 2 8 34 2 active sync /dev/sdc2
Então, existe uma maneira de copiar esse superbloco para os outros 2 dispositivos, para que eu possa iniciar o array "corretamente"?
Responder1
Eu tenho uma configuração semelhante e recomendo ter um Linux completo na pequena partição de cada unidade enãoespelhe essas pequenas partições, mas faça com que elas sejam totalmente inicializáveis separadamente.
Você pode fazer sync
a configuração excluindo alguns arquivos cruciais ( /etc/fstab
, configuração do grub). Isso ocupa mais espaço do que apenas, /boot
mas economiza muito tempo quando surgem problemas.
Responder2
Você provavelmente não montou as unidades na mesma ordem ou usando o mesmo tamanho de bloco de antes. Você precisa descobrir qual era a ordem anterior e usar a mesma ordem ao recriar o array. Em outras palavras, pode não ter sido o terceiro disco que morreu, mas sim o primeiro ou o segundo, ou você pode ter confundido sda e sdb.
Responder3
Como @psusi sugeriuo formato de metadados é o kye, ao que parece - agora "1.2" é o padrão, não "0.9". É uma pena dizer, mas isso pode levar à perda de dados, já que 1,2 usa deslocamento de 4 KiB:
1, 1.0, 1.1, 1.2 padrão Use o novo superbloco de formato da versão 1. Isso tem menos restrições. Ele pode ser facilmente movido entre hosts com endian diferentes e uma operação de recuperação pode ser verificada e reiniciada. As diferentes subversões armazenam o superbloco em diferentes locais do dispositivo, seja no final (para 1.0), no início (para 1.1) ou 4K desde o início (para 1.2).
Um conselho (infelizmente, tardio): nunca se apresse em recriar um array sem tentar com -B
- build:
-B, --build Build a legacy array without superblocks
Atualização.: acabou -B
se recusando a construir o RAID-5… :-/