Recuperando o Linux Soft Raid6 com superblocos incompatíveis?

1

Meu servidor de laboratório doméstico estava na metade de uma operação de transformação RAID5 para RAID6 quando uma das minhas placas SAS decidiu fazer um ajuste no meio da noite e fazer com que 2 das unidades fossem marcadas como indisponíveis.

Ao acordar esta manhã e ver o que aconteceu, reiniciei imediatamente o servidor e as unidades voltaram, mas a matriz não iria mais montar ou iniciar.

Primeiro, verifiquei as contagens de eventos nas seis unidades:

~# mdadm --examine /dev/sd[bcdfgi] | egrep 'Event|/dev/sd'
    /dev/sdb:
        Events : 2691764
    /dev/sdc:
        Events : 2691764
    /dev/sdd:
        Events : 2691764
    /dev/sdf:
        Events : 2691764
    /dev/sdg:
        Events : 2679506
    /dev/sdi:
        Events : 2679506

Depois de ver que 4 das unidades tinham uma contagem de eventos maior correspondente e que nenhuma delas era a unidade que estava no meio de ser adicionada para a transformação RAID5 para RAID6 (/ dev / sdg), imaginei que deveria capaz de fazer uma força montar com os 4 bons drives:

~# mdadm --assemble --force /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf
    mdadm: Failed to restore critical section for reshape, sorry.
        Possibly you needed to specify the --backup-file

Felizmente, no início da reformulação, criei um arquivo de backup para:

~# mdadm --assemble --backup-file=/root/raid5backup --force /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf
    mdadm: restoring critical section
        mdadm: failed to RUN_ARRAY /dev/md127: Input/output error

Uma olhada na saída do dmesg não ajudou muito:

[ 1194.472447] md: bind<sdf>
[ 1194.473147] md: bind<sdc>
[ 1194.473274] md: bind<sdb>
[ 1194.503167] md: bind<sdd>
[ 1194.504763] md/raid:md127: reshape will continue
[ 1194.504780] md/raid:md127: device sdd operational as raid disk 0
[ 1194.504781] md/raid:md127: device sdc operational as raid disk 4
[ 1194.504781] md/raid:md127: device sdf operational as raid disk 2
[ 1194.505026] md/raid:md127: allocated 6490kB
[ 1194.505136] md/raid:md127: not enough operational devices (3/6 failed)
[ 1194.505914] RAID conf printout:
[ 1194.505915]  --- level:6 rd:6 wd:3
[ 1194.505916]  disk 0, o:1, dev:sdd
[ 1194.505917]  disk 2, o:1, dev:sdf
[ 1194.505918]  disk 4, o:1, dev:sdc
[ 1194.505918]  disk 5, o:1, dev:sdb
[ 1194.506113] md/raid:md127: failed to run raid set.
[ 1194.507014] md: pers->run() failed ...
[ 1194.507762] md: md127 stopped.
[ 1194.507766] md: unbind<sdd>
[ 1194.530614] md: export_rdev(sdd)
[ 1194.530653] md: unbind<sdb>
[ 1194.546595] md: export_rdev(sdb)
[ 1194.546637] md: unbind<sdc>
[ 1194.562584] md: export_rdev(sdc)
[ 1194.562625] md: unbind<sdf>
[ 1194.574586] md: export_rdev(sdf)

Achei que talvez funcionasse se eu tentasse montá-lo, incluindo as duas unidades com uma contagem de eventos menor:

~# mdadm --assemble --backup-file=/root/raid5backup --force /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf /dev/sdi /dev/sdg
    mdadm: restoring critical section
        mdadm: failed to RUN_ARRAY /dev/md127: Input/output error

E uma rápida olhada na saída do dmesg mostrou que não gostou disso:

[ 1435.180559] md: bind<sdi>
[ 1435.199716] md: bind<sdf>
[ 1435.200403] md: bind<sdg>
[ 1435.200531] md: bind<sdc>
[ 1435.200660] md: bind<sdb>
[ 1435.200918]  sdi:
[ 1435.229950] md: bind<sdd>
[ 1435.230299] md: kicking non-fresh sdg from array!
[ 1435.230302] md: unbind<sdg>
[ 1435.251031] md: export_rdev(sdg)
[ 1435.251074] md: kicking non-fresh sdi from array!
[ 1435.251079] md: unbind<sdi>
[ 1435.267034] md: export_rdev(sdi)

Antes de prosseguir, fiz uma varredura rápida dos discos em um arquivo para o caso de precisar dos detalhes mais tarde:

~# mdadm --examine /dev/sd[bcdfig] >> /root/raid.status

O que me leva ao ponto de estragar tudo, tentei criar uma nova matriz usando as quatro boas unidades, na esperança de que isso veria os dados novamente:

~# mdadm --create --assume-clean --level=6 --raid-devices=6 --chunk=128K /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf missing missing

No entanto, depois de fazer isso, um pvscan / vgscan etc não produziu nada, e um rápido dd do início da matriz mostrou que estava em branco:

~# dd if=/dev/md127 bs=512 count=255 skip=1 of=/tmp/md2-raw-start

Neste ponto, parei a matriz novamente antes que qualquer dano fosse feito e nenhum dado deveria ter sido gravado na matriz. Infelizmente isso mudou o RAID UUID para essas quatro unidades, então agora é diferente das duas que estavam fora de sincronia.

Eu agora parei de fazer qualquer coisa no servidor e espero que alguma pessoa boa aqui possa me dar alguma orientação sobre como proceder.

Não é feito o backup deste sistema, pois é o meu servidor de laboratório doméstico, no entanto, ainda há muitos dados na matriz que eu preferiria tentar manter em vez de começar tudo de novo.

    
por Seri Al-Najjar 25.11.2016 / 10:44

0 respostas