Назад | Перейти на главную страницу

Восстановление Linux Soft Raid6 с несоответствующими суперблоками?

Мой домашний лабораторный сервер был на полпути к операции преобразования RAID5 в RAID6, когда одна из моих карт SAS решила устроить припадок посреди ночи и пометить 2 диска как недоступные.

Проснувшись сегодня утром и увидев, что произошло, я немедленно перезагрузил сервер, и диски вернулись, но массив больше не собирался и не запускался.

Первым делом я проверил количество событий на 6 дисках:

~# 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

Увидев, что 4 диска имеют соответствующее более высокое количество событий, и что ни один из них не был диском, который был добавлен для преобразования RAID5 в RAID6 (/ dev / sdg), я решил, что смогу сделать Сборка силы с 4 хорошими приводами:

~# 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

К счастью, в начале изменения формы я создал файл резервной копии так:

~# 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

Взгляд на вывод dmesg не сильно помог:

[ 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)

Я подумал, может быть, это сработает, если я попытаюсь собрать его, включая два диска с меньшим количеством событий:

~# 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

И беглый взгляд на вывод dmesg показал, что это не понравилось:

[ 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)

Прежде чем продолжить, я быстро просмотрел диски в файл на случай, если мне понадобятся подробности позже:

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

Это подводит меня к тому моменту, когда я полностью облажался, я попытался создать новый массив, используя 4 хороших диска, в надежде, что он снова увидит данные:

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

Однако после этого pvscan / vgscan и т. Д. Ничего не дали, и быстрый dd начала массива показал мне, что он был пустым:

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

На этом этапе я снова остановил массив до того, как будет нанесен какой-либо ущерб, и в массив не должно быть записано никаких данных. К сожалению, это изменило UUID RAID для этих четырех дисков, поэтому теперь он отличается от двух, которые были не синхронизированы.

Теперь я прекратил что-либо делать на сервере и надеюсь, что какой-нибудь хороший человек здесь может дать мне несколько советов, как действовать дальше.

Для этой системы не выполняется резервное копирование, поскольку это мой домашний лабораторный сервер, однако в массиве все еще есть много данных, которые я предпочел бы попытаться сохранить, а не стереть все и начать заново.