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

mdadm raid5 восстанавливает двойной отказ диска - с поворотом (порядок дисков)

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

Ошибка №0, отсутствие 100% резервной копии. Я знаю.

у меня есть mdadm Система RAID5 объемом 4x3 ТБ. Диски / dev / sd [b-e], все с одним разделом /dev/sd[b-e]1. Я знаю, что использование RAID5 на очень больших дисках рискованно, но я все равно это сделал.

Недавние события

RAID ухудшается после отказа двух дисков. Один диск [/ dev / sdc] действительно исчез, другой [/ dev / sde] восстановился после отключения питания, но не был автоматически повторно добавлен в RAID. Так что у меня остался RAID-массив из 4 устройств и только 2 активных диска [/ dev / sdb и / dev / sdd].

Ошибка №1, не использовать dd-копии дисков для восстановления RAID. У меня не было ни драйва, ни времени. Ошибка №2, если не сделать резервную копию суперблока и mdadm -E из оставшихся дисков.

Попытка восстановления

Я повторно собрал RAID в деградированном режиме с

mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.

Тогда я мог получить доступ к своим данным. Я заменил /dev/sdc с запаской; пустой; идентичный привод.

Я удалил старый /dev/sdc1 из RAID

mdadm --fail /dev/md0 /dev/sdc1

Ошибка # 3, не делать этого перед замена привода

Затем я разделил новый /dev/sdc и добавил в RAID.

mdadm --add /dev/md0 /dev/sdc1

Затем он начал восстанавливать RAID. ETA 300 мин. Я следил за процессом через /proc/mdstat до 2%, а затем занялись другими делами.

Проверка результата

Через несколько часов (но менее 300 минут) я проверил процесс. Он остановился из-за ошибки чтения на /dev/sde1.

Вот где действительно начинаются проблемы

Затем я удалил /dev/sde1 с RAID и заново добавил. Я не могу вспомнить, зачем я это сделал; было поздно.

mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1

Тем не мение, /dev/sde1 был теперь помечен как запасной. Поэтому я решил воссоздать весь массив, используя --assume-clean, используя то, что я считал правильным, и с /dev/sdc1 отсутствует.

mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1

Это сработало, но файловая система не была распознана при попытке монтирования. (Должен был быть EXT4).

Заказ устройства

Затем я проверил последнюю резервную копию, которая у меня была /proc/mdstat, и я нашел порядок дисков.

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]

Затем я вспомнил, что этот RAID потерял диск около года назад, и восстановил его, заменив неисправный диск на запасной. Возможно, это немного изменило порядок устройства ... поэтому не было диска [3], а были только [0], [1], [2] и [4].

Я попытался найти порядок дисков с помощью скрипта Permute_array: https://raid.wiki.kernel.org/index.php/Permute_array.pl но вот не нашел нужного порядка.

Вопросы

Теперь у меня два основных вопроса:

  1. Облажал все суперблоки на дисках, а дал только:

    mdadm --create --assume-clean
    

    команд (поэтому мне не следовало перезаписывать сами данные на /dev/sd[bde]1. Я прав теоретически RAID можно восстановить [при условии, что /dev/sde1 это нормально] если я просто найду нужный порядок устройства?

  2. Важно ли, чтобы /dev/sde1 получить номер устройства [4] в RAID? Когда я создаю это с

    mdadm --create /dev/md0 --assume-clean -l5 -n4 \
      /dev/sdb1 missing /dev/sdd1 /dev/sde1
    

    ему присвоен номер [3]. Интересно, относится ли это к вычислению блоков четности. Если это окажется важным, как я могу воссоздать массив с помощью /dev/sdb1[0] отсутствует [1] /dev/sdd1[2] /dev/sde1[4]? Если бы я мог заставить это работать, я мог бы запустить его в деградированном режиме и добавить новый диск /dev/sdc1 и дайте ему снова синхронизироваться.

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

Чтобы ответить на ваши вопросы,

  1. Можно ли его восстановить?

    • Прежде всего - СТОП, сядь поудобнее и подумай немного. Да, алгоритм, размер блока и порядок на диске жизненно важны для правильной повторной сборки любой файловой системы, которая присутствовала. Но, поскольку вы перезаписали суперблоки, теперь вам остается прибегать к методам проб и ошибок.
    • Во-вторых, есть ли способ восстановить предыдущую структуру диска? Я всегда делаю mdadm --detail> backupfile, чтобы сохранить эту структуру диска в безопасном месте. Проверьте dmesg, / var / log на наличие каких-либо свидетельств того, как диски были настроены в рейде.
    • Наконец, если вы соответствуете предыдущему размеру блока и порядку на диске, вы могли повредить суперблок ext4 - есть способы быстро просканировать другие суперблоки (и есть отличная программа под названием TestDisk, которая сканирует суперблоки существующих файловых систем и пытается их просмотреть. вручную: http://www.cgsecurity.org/wiki/Main_Page)
  2. Поскольку sdc является новым, я бы продолжил попытки собрать вручную с помощью недостающего предложения, и да, sde должен быть в правильном порядке для сборки в деградированном режиме. Как только вы найдете правильный макет - скопируйте все данные из массива и начните снова, документируя макет (чтобы вы больше не столкнулись с этой проблемой).

Удачи

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

самая опасная ошибка, которую вы сделали, - это не та, которую вы пронумеровали, а именно:

mdadm --create ...

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

Чтобы исправить это, вам нужно снова перезаписать их с правильными значениями. Самый простой способ узнать это - посмотреть на метаданные, но вы их уже уничтожили. Следующий способ - угадать. Угадайте различные комбинации такой команды, с разными значениями для любого из параметров, кроме того, что вы знаете (4 устройства, уровень 5), а также разный порядок дисков:

mdadm --create /dev/md0 --assume-clean --metadata=1.2 --raid-devices=4 --level=5 --layout=... --chunk=512 --data-offset=128M /dev/sdb1 missing /dev/sdd1 /dev/sde1

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

Как только вы нашли некоторые аргументы, которые создают рабочий массив, который вы можете fsck или смонтировать и проверить (например, проверьте контрольную сумму файла, достаточно большого, чтобы охватить всех участников рейда, например ISO, который вы должны были сохранить с его контрольной суммой / pgp подпись, либо распаковать -t или gunzip -ta большой архив)

Прежде чем делать что-либо еще, запишите 'mdadm --examine / dev / sdX1' для каждого из дисков, которые БЫЛИ в вашем массиве, и 'mdadm --detail / dev / md0' из этого, вы сможете определить точный макет.

Мне просто пришлось сделать это самому, чтобы восстановить массив Synology в отдельном вопросе:

Как восстановить массив mdadm на Synology NAS с диском в состоянии «E»?

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

Ваши последующие команды ВЫГЛЯДИТ правильно. Самый простой вариант - запустить создание с каждым возможным порядком, а затем посмотреть, можете ли вы смонтировать файловую систему и получить доступ к ней в режиме только для чтения.