Deixe-me reconhecer primeiro que cometi erros e que tenho um backup para a maioria mas não todos dos dados deste RAID. Ainda tenho esperança de recuperar o resto dos dados. Eu não tenho o tipo de dinheiro para levar as unidades para uma empresa especializada em recuperação.
Erro # 0, não tendo 100% de backup. Eu sei.
Eu tenho um sistema mdadm
RAID5 de 4x3TB. Drives / dev / sd [b-e], todos com uma partição /dev/sd[b-e]1
. Estou ciente de que o RAID5 em unidades muito grandes é arriscado, mas mesmo assim o fiz.
Eventos recentes
O RAID é degradado após uma falha de duas unidades. Uma unidade [/ dev / sdc] está realmente perdida, a outra [/ dev / sde] retornou após um ciclo de energia, mas não foi automaticamente adicionada novamente ao RAID. Então fiquei com um RAID de 4 dispositivos com apenas 2 drives ativos [/ dev / sdb e / dev / sdd].
Erro # 1, não usando cópias dd das unidades para restaurar o RAID. Eu não tinha os discos nem o tempo.
Erro # 2, não fazendo um backup do superbloco e mdadm -E
das unidades restantes.
Tentativa de recuperação
Eu remontei o RAID no modo degradado com
mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.
Eu poderia acessar meus dados. Eu substituí /dev/sdc
por um sobressalente; esvaziar; unidade idêntica.
Eu removi o antigo /dev/sdc1
do RAID
mdadm --fail /dev/md0 /dev/sdc1
Erro # 3, não fazendo isso antes substituindo a unidade
Eu então particionei o novo /dev/sdc
e o adicionei ao RAID.
mdadm --add /dev/md0 /dev/sdc1
Em seguida, começou a restaurar o RAID. ETA 300 min. Eu segui o processo via /proc/mdstat
para 2% e depois fui fazer outras coisas.
Verificando o resultado
Várias horas (mas menos de 300 minutos) depois, verifiquei o processo. Ele parou devido a um erro de leitura em /dev/sde1
.
Aqui é onde o problema realmente começa
Em seguida, removi /dev/sde1
do RAID e o adicionei novamente. Não me lembro por que fiz isso; já era tarde.
mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1
No entanto, /dev/sde1
foi marcado como sobressalente. Então, decidi recriar toda a matriz usando --assume-clean usando o que achei ser a ordem correta e com /dev/sdc1
ausente.
mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1
Isso funcionou, mas o sistema de arquivos não foi reconhecido durante a tentativa de montagem. (Deveria ter sido EXT4).
Ordem do dispositivo
Em seguida, verifiquei um backup recente de /proc/mdstat
e localizei a ordem dos discos.
md0 : active raid5 sdb1[0] sde1[4] sdd1[2] sdc1[1]
8790402048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
Lembrei-me então que esse RAID sofreu uma perda de unidade há cerca de um ano e se recuperou substituindo o disco defeituoso por um de reposição. Isso pode ter embaralhado um pouco a ordem dos dispositivos ... então não havia drive [3] mas apenas [0], [1], [2] e [4].
Eu tentei encontrar a ordem das unidades com o script Permute_array: link mas isso não aconteceu encontre a ordem certa.
Perguntas
Agora tenho duas perguntas principais:
-
Eu estraguei todos os superblocos nas unidades, mas só dei:
mdadm --create --assume-clean
comandos (então eu não deveria ter sobrescrito os dados em /dev/sd[bde]1
. Eu estou certo que em teoria o RAID pode ser restaurado [assumindo por um momento que /dev/sde1
está ok] se Acabei de encontrar a ordem certa para o dispositivo?
-
É importante que /dev/sde1
receba o número do dispositivo [4] no RAID? Quando eu crio com
mdadm --create /dev/md0 --assume-clean -l5 -n4 \
/dev/sdb1 missing /dev/sdd1 /dev/sde1
é atribuído o número [3]. Gostaria de saber se isso é relevante para o cálculo dos blocos de paridade. Se isso for importante, como posso recriar a matriz com /dev/sdb1[0]
missing [1] /dev/sdd1[2]
/dev/sde1[4]
? Se eu pudesse fazê-lo funcionar, eu poderia iniciá-lo no modo degradado e adicionar a nova unidade /dev/sdc1
e permitir que ela fosse novamente sincronizada.
Tudo bem se você gostaria de me indicar que isso pode não ter sido o melhor curso de ação, mas você perceberá que percebi isso. Seria ótimo se alguém tivesse alguma sugestão.