Как восстановить разбитый RAID-массив Linux md RAID5?

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

  • md0 – массив RAID1, состоящий из sda1, sdb1, sdc1 и sdd1.
  • md1 – массив RAID5, состоящий из sda2, sdb2, sdc2 и sdd2.
  • md2 – массив RAID0, состоящий из sda3, sdb3, sdc3 и sdd3.

md0 и md2 сообщают обо всех дисках, пока сообщения md1 не сработали (sdb2, sdc2, sdd2). Это мое мнение, что при сбоях жестких дисков все разделы должны быть потеряны не только средними.

В этот момент я выключил компьютер и отсоединил диски. С тех пор я использовал этот компьютер с меньшим новым диском.

Есть ли надежда восстановить данные? Могу ли я каким-то образом убедить mdadm в том, что мои диски действительно работают? Единственный диск, который может действительно иметь проблему, это sdc, но тот тоже сообщается другими массивами.

Обновить

Наконец, я получил возможность подключить старые диски и загрузить этот компьютер из SystemRescueCd. Все вышеизложенное было записано по памяти. Теперь у меня есть жесткие данные. Вот вывод mdadm --examine /dev/sd*2

 /dev/sda2: Magic : a92b4efc Version : 0.90.00 UUID : 53eb7711:5b290125:db4a62ac:7770c5ea Creation Time : Sun May 30 21:48:55 2010 Raid Level : raid5 Used Dev Size : 625064960 (596.11 GiB 640.07 GB) Array Size : 1875194880 (1788.33 GiB 1920.20 GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 1 Update Time : Mon Aug 23 11:40:48 2010 State : clean Active Devices : 3 Working Devices : 4 Failed Devices : 1 Spare Devices : 1 Checksum : 68b48835 - correct Events : 53204 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 3 3 0 0 3 faulty removed 4 4 8 50 4 spare /dev/sdd2 /dev/sdb2: Magic : a92b4efc Version : 0.90.00 UUID : 53eb7711:5b290125:db4a62ac:7770c5ea Creation Time : Sun May 30 21:48:55 2010 Raid Level : raid5 Used Dev Size : 625064960 (596.11 GiB 640.07 GB) Array Size : 1875194880 (1788.33 GiB 1920.20 GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 1 Update Time : Mon Aug 23 11:44:54 2010 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 1 Spare Devices : 1 Checksum : 68b4894a - correct Events : 53205 Layout : left-symmetric Chunk Size : 64K Number Major Minor RaidDevice State this 1 8 18 1 active sync /dev/sdb2 0 0 0 0 0 removed 1 1 8 18 1 active sync /dev/sdb2 2 2 8 34 2 active sync /dev/sdc2 3 3 0 0 3 faulty removed 4 4 8 50 4 spare /dev/sdd2 /dev/sdc2: Magic : a92b4efc Version : 0.90.00 UUID : 53eb7711:5b290125:db4a62ac:7770c5ea Creation Time : Sun May 30 21:48:55 2010 Raid Level : raid5 Used Dev Size : 625064960 (596.11 GiB 640.07 GB) Array Size : 1875194880 (1788.33 GiB 1920.20 GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 1 Update Time : Mon Aug 23 11:44:54 2010 State : clean Active Devices : 1 Working Devices : 2 Failed Devices : 2 Spare Devices : 1 Checksum : 68b48975 - correct Events : 53210 Layout : left-symmetric Chunk Size : 64K Number Major Minor RaidDevice State this 2 8 34 2 active sync /dev/sdc2 0 0 0 0 0 removed 1 1 0 0 1 faulty removed 2 2 8 34 2 active sync /dev/sdc2 3 3 0 0 3 faulty removed 4 4 8 50 4 spare /dev/sdd2 /dev/sdd2: Magic : a92b4efc Version : 0.90.00 UUID : 53eb7711:5b290125:db4a62ac:7770c5ea Creation Time : Sun May 30 21:48:55 2010 Raid Level : raid5 Used Dev Size : 625064960 (596.11 GiB 640.07 GB) Array Size : 1875194880 (1788.33 GiB 1920.20 GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 1 Update Time : Mon Aug 23 11:44:54 2010 State : clean Active Devices : 1 Working Devices : 2 Failed Devices : 2 Spare Devices : 1 Checksum : 68b48983 - correct Events : 53210 Layout : left-symmetric Chunk Size : 64K Number Major Minor RaidDevice State this 4 8 50 4 spare /dev/sdd2 0 0 0 0 0 removed 1 1 0 0 1 faulty removed 2 2 8 34 2 active sync /dev/sdc2 3 3 0 0 3 faulty removed 4 4 8 50 4 spare /dev/sdd2 

Похоже, что все изменилось со времени последней загрузки. Если я правильно это прочитаю, sda2, sdb2 и sdc2 работают и содержат синхронизированные данные, а sdd2 является запасным. Я отчетливо помню, как 3 диска были повреждены, но это хорошая новость. Тем не менее массив все еще не работает:

 Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md125 : inactive sda2[0](S) sdb2[1](S) sdc2[2](S) 1875194880 blocks md126 : inactive sdd2[4](S) 625064960 blocks md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1] 64128 blocks [4/4] [UUUU] unused devices: <none> 

md0 представляется переименованным в md127. md125 и md126 очень странные. Они должны быть одним массивом не два. Это называлось md1. md2 полностью ушел, но это был мой обмен, поэтому мне все равно.

Я могу понять разные имена, и это не имеет большого значения. Но почему массив с 3 «активными синхронизационными» дисками нечитабелен? И что случилось с sdd2, находящимся в отдельном массиве?

Обновить

Я попробовал следующее после создания суперблоков:

 root@sysresccd /root % mdadm --stop /dev/md125 mdadm: stopped /dev/md125 root@sysresccd /root % mdadm --stop /dev/md126 mdadm: stopped /dev/md126 

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

 root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2 missing mdadm: cannot open device missing: No such file or directory mdadm: missing has no superblock - assembly aborted 

Видимо, я не могу этого сделать.

 root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2 mdadm: /dev/md1 assembled from 1 drive - not enough to start the array. root@sysresccd /root % cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : inactive sdc2[2](S) sdb2[1](S) sda2[0](S) 1875194880 blocks md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1] 64128 blocks [4/4] [UUUU] unused devices: <none> 

Это тоже не сработало. Давайте попробуем со всеми дисками.

 mdadm --stop /dev/md1 mdadm: stopped /dev/md1 root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c,d}2 mdadm: /dev/md1 assembled from 1 drive and 1 spare - not enough to start the array. root@sysresccd /root % cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S) 2500259840 blocks md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1] 64128 blocks [4/4] [UUUU] unused devices: <none> 

Не повезло. Основываясь на этом ответе, я планирую попробовать:

 mdadm --create /dev/md1 --assume-clean --metadata=0.90 --bitmap=/root/bitmapfile --level=5 --raid-devices=4 /dev/sd{a,b,c}2 missing mdadm --add /dev/md1 /dev/sdd2 

Это безопасно?

Обновить

Я публикую сценарий синтаксического анализа суперблока, который я использовал, чтобы сделать эту таблицу в моем комментарии. Может быть, кто-то найдет это полезным. Спасибо за вашу помощь.

Сначала проверьте диски, попробуйте запустить smart selftest

 for i in abcd; do smartctl -s on -t long /dev/sd$i done 

Это может занять несколько часов, но проверить состояние каждого диска каждые несколько минут, т.е.

 smartctl -l selftest /dev/sda 

Если состояние отчетов о диске не завершено из-за ошибок чтения, этот диск должен считаться небезопасным для повторной сборки md1. После самотестирования вы можете начать повторную сборку массива. При желании, если вы хотите быть более осторожным, переместите диски на другую машину, прежде чем продолжить (как раз в случае плохой ram / controller / etc).

Недавно у меня был случай, похожий на этот. Один диск получил неудачу, я снова добавлен в массив, но во время восстановления 3 из 4 дисков вообще не удалось. Содержимое / proc / mdadm было таким же, как ваше (возможно, не в том же порядке)

 md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S) 

Но мне повезло и собрал массив с этим

 mdadm --assemble /dev/md1 --scan --force 

Посмотрев на представленный вами вывод –examine, я могу сказать, что произошел следующий сценарий: sdd2 не удалось, вы удалили его и повторно добавили, поэтому он стал запасным приводом, пытающимся перестроить. Но при восстановлении sda2 не удалось, а затем sdb2 не удалось. Таким образом, счетчик событий больше в sdc2 и sdd2, которые являются последними активными дисками в массиве (хотя sdd не имел возможности перестроить, и поэтому он является самым устаревшим из всех). Из-за различий в счетчиках событий необходимо будет –force. Таким образом, вы также можете попробовать

 mdadm --assemble /dev/md1 /dev/sd[abc]2 --force 

В заключение я считаю, что если приведенная выше команда завершится неудачно, попробуйте воссоздать массив следующим образом:

 mdadm --create /dev/md1 --assume-clean -l5 -n4 -c64 /dev/sd[abc]2 missing 

Если вы --create , missing часть важна, не пытайтесь добавить четвертый диск в массив, потому что тогда начнется строительство, и вы потеряете свои данные . Создание массива с отсутствующим диском не изменит его содержимое, и у вас будет возможность получить копию в другом месте (raid5 не работает так же, как raid1).

Если это не удается запустить массив, попробуйте это решение (скрипт perl) здесь. Воспроизведение массива

Если вам, наконец, удастся привести массив, файловая система будет нечиста и, возможно, повреждена. Если сбой при отказе диска во время перестройки, ожидается, что массив остановится и заморозится, не делая записи на другие диски. В этом случае два диска не удались, возможно, система выполняла запросы на запись, которые не удалось завершить, поэтому есть небольшая вероятность, что вы потеряли некоторые данные, но также шанс, что вы ее никогда не заметите 🙂

Изменить: добавлено некоторое уточнение.

У меня было много проблем, пока я использовал mdadm , но никогда не терял данные. Вам следует избегать опции -force или использовать ее очень осторожно, потому что вы можете потерять все свои данные. Отправьте свой /etc/mdadm/mdadm.conf