Як відновити збій Linux md RAID5 масиву?


17

Деякий час тому в мене була система 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 повідомляє про 3 помилки (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

Це безпечно?

Оновлення

Я публікую сценарій аналізатора суперблоку, за допомогою якого я робив цю таблицю у своєму коментарі. Можливо, комусь це стане в нагоді. Дякую за всю вашу допомогу.


Я думаю, mdadm --re-addце не те, що ви шукаєте. Ви нещодавно зробили тест пам’яті? Чи є у вас повідомлення з журналу, пов'язані з помилкою масиву?
Жил 'ТАК - перестань бути злим'

@Gilles: У мене немає журналів до збою, оскільки вони зберігалися в невдалому масиві. І я не думаю, що я можу це виправити за допомогою стандартного інтерфейсу mdadm. Будь-яка операція, яка передбачає пересинхронізацію, неможлива з 1 з 4 дисків. Я думаю, що 3 "невдалі" диски містять достатньо інформації для відновлення всього. Наприклад, я можу прочитати їх з dd. "Гарний" може бути синхронізований. Я буду пам'ятати, але ця машина зараз ідеально працює з новим диском.
stribika

2
Чи намагалися ви зупинити масив і повторно зібрати новий mdadm -A /dev/md1 /dev/sd{b,c,d}2(можливо --force)? (Якщо ви цього не зробили, спершу створіть резервні копії суперблоків.)
Жил "ТАК - перестань бути злим"

@Gilles: я оновив своє запитання актуальною інформацією. Що потрібно точно створити для резервного копіювання? Перші кілька блоків дисків чи є певний інструмент для цього?
stribika

@stribika: Суперблок - це останній повний блок 64 кБ, вирівняний на межі 64 кБ на розділі. Я не маю уявлення, як /dev/sdd2можна опинитися в окремому масиві, незважаючи на те, що має такий самий UUID sd{a,b,c}2.
Жил "ТАК - перестань бути злим"

Відповіді:


12

Спочатку перевірте диски, спробуйте запустити смарт-самотест

for i in a b c d; do
    smartctl -s on -t long /dev/sd$i
done

Це може зайняти кілька годин, але перевіряйте стан тесту кожного диска кожні кілька хвилин, тобто

smartctl -l selftest /dev/sda

Якщо звіт про диск не завершений через помилки читання, цей диск слід вважати небезпечним для повторної збірки md1. Після завершення самотестування ви можете розпочати спробу перекомпонувати масив. За бажанням, якщо ви хочете бути особливо обережними, перемістіть диски на іншу машину, перш ніж продовжувати (про всяк випадок, якщо поганий таран / контролер / тощо).

Нещодавно у мене був такий випадок, як цей. Один накопичувач вийшов з ладу, я знову додав у масив, але під час відновлення 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 не мав шансу відновитись, тому він є самим застарілим із усіх). Через відмінності в лічильниках подій, - сила буде потрібна. Тож ви також могли спробувати це

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 --assemble /dev/md1 /dev/sd[abc]2 --forceпрацювали. Дякую. Ви зберегли мої дані! :) Я не намагатимуся додати четвертий диск, тому що перші 3 не такі гарні, як раніше. Кожен з виявлених самотестів має 10-20 нечитабельних блоків. Я почуваюся дурним, що не перевірив цього спочатку.
stribika

Дякую за вичерпну відповідь. Нагороджений 50 реп. Від мене.
0xC0000022L

Permute_array.pl відмінно працював для мене. Примітка для інших користувачів: масив пристрою, який він очікує побачити, включає всі диски, включаючи будь-який мертвий диск, який ви могли видалити.

"Якщо ви робите --create, важлива частина, що не вистачає, не намагайтеся додавати четвертий диск у масив, тому що тоді почнеться побудова, і ви втратите свої дані." - BS. Якщо ви вказали --assume-clean(ви зробили), це не буде.
poige

1

Під час використання я відчував багато проблем mdadm, але ніколи не втрачав даних. Вам слід уникати цієї --forceопції або використовувати її дуже обережно, оскільки ви можете втратити всі свої дані. Будь ласка, опублікуйте свою/etc/mdadm/mdadm.conf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.