Программный Raid-6 Для Linux: Опыт Восстановления Массива 16Тб

Несколько дней назад вышел из строя один из жестких дисков бюджетного массива из накопителей 16х1 ТБ.

Уровень массива: RAID 6. Ситуация осложнялась тем, что (как оказалось) ранее вышел из строя кулер на видеокарте этого же сервера, что не было замечено заранее, а после замены HDD, т.к.

В результате изменения режима охлаждения корпуса это начало проявляться в виде зависаний времени синхронизации, что само по себе очень неприятно.

Это привело к тому, что массив перестал автосборку, а еще несколько дисков были отмечены как вышедшие из строя, и мне пришлось серьезно этим заняться, читать вики, мануалы и форумы (форумы наиболее полезны, так как описывают опыт конкретных людей в конкретных ситуациях).

Моя структура массива: Жесткий диск 16x1 ТБ разделы: md0 — /root 8x1 ГБ, RAID 6 md1 — /данные: 16x999 ГБ, RAID 6 Поначалу все эксперименты по сборке проводились на md0, т.е.

на корневом разделе, что само по себе особой ценности не имеет, кроме того, что это кастомизированная система.

Итак, я загрузился с первого диска Debian в «режиме восстановления».

Попытка автоматически собрать массив через

 
 mdadm --assemble --scan
 
приводило к ошибке «недостаточно дисков для построения массива».

Продолжим науку: 1. Необходимо хранить описательную информацию для массивов, содержащую информацию о том, какой конкретно диск имеет какой номер в массиве.

На случай, если вам придется собирать «опасными методами»:

 
 mdadm --examine /dev/sd[abcdefghijklmnop]1 > /mnt/raid_layout1
 mdadm --examine /dev/sd[abcdefghijklmnop]2 > /mnt/raid_layout2
 
Эти файлы содержат нечто похожее на приведенное ниже для всех HDD, имеющих суперблок на разделе sdX1 (в моем случае только 8 из 16 для md0 имеют суперблок на sdX1) Ниже приведен пример вывода одного из разделов:
 
 /dev/sdp1:
         Version : 0.90.00
      Raid Level : raid6
   Used Dev Size : 975360 (952.66 MiB 998.77 MB)
    Raid Devices : 8
   Total Devices : 8
 
       Number   Major   Minor   RaidDevice State
 this     4       8      177        4      active sync   /dev/sdl1
 
    0     0       8       97        0      active sync   /dev/sdg1
    1     1       8      113        1      active sync   /dev/sdh1
    2     2       8      129        2      active sync   /dev/sdi1
    3     3       8      145        3      active sync   /dev/sdj1
    4     4       8      177        4      active sync   /dev/sdl1
    5     5       8      193        5      active sync   /dev/sdm1
    6     6       8      209        6      active sync   /dev/sdn1
    7     7       8      225        7      active sync   /dev/sdo1
 
Коротко о том, что это означает: sdf2 — анализируемый текущий раздел Версия 0.90.00 — Версия Суперблока Также вы увидите кучу полезной информации — размер массива, UUID, Уровень, Размер массива, Количество устройств и т. д. Но самое главное для нас сейчас — это таблица внизу списка, первая строка в ней указывает, какой номер HDD в массиве у нашего испытуемого:
 
 this     4       8      177        4      active sync   /dev/sdl1
 
Также обратите пристальное внимание на версию суперблока! В моем случае это 0.90.00. Здесь мы видим его номер в массиве, т.е.

4 — такие же цифры вы найдете в выводе для всех остальных устройств из списка.

Обратите внимание, что буква диска в строке состояния другая — sdl1 — это означает, что диск инициализировался на другом порту SATA, а затем был перемещен.

Это некритическая информация, но может оказаться полезной.

Имя устройства и его номер в массиве имеют решающее значение (они будут меняться при перемещении устройств с порта на порт).

Сохраняем созданный файл RAID_layout (например на флешке), чтобы он не потерялся, и переходим к следующему шагу: 2. Пытаемся собрать массив Собрать массив можно 2 способами: автоматическим и ручным.

Авто:

 
 mdadm --assemble --scan -v
 
Если он собрался автоматически, считайте, что вам повезло, вам просто нужно проверить, все ли HDD есть в массиве, а если нет, добавить недостающие, и дальше можно не читать.

Но, в моем случае, автоматическая сборка завершается с ошибкой, что не хватает рабочих устройств:

 
 mdadm: /dev/md2 assembled from 4 drives - not enough to start the array.
 
и массив был создан на 4 из 8 дисков.

Конечно не получится, так как Raid6 позволяет отсутствовать только 2 диска.

Проверка состояния массива

 
 cat /proc/mdstat
 
 md2 : inactive sdn1[3](S) sdk1[7](S) sdj1[6](S) sdp1[4](S)
       3907264 blocks
 
Здесь есть тонкость — если в списке обнаружен HDD, который не инициализирован или помечен как неисправный, сборка немедленно прекращается, поэтому флаг «-v» полезен, чтобы увидеть, на каком HDD началась сборка.

Ручная сборка:

 
 mdadm --assemble /dev/sd[abcdefgh]1 -v
 
То же самое, но мы специально указали, какие HDD использовать для сборки.

Скорее всего, массив будет собран не так, как в случае автоматической сборки.

Но собирая вручную, начинаешь лучше понимать саму суть происходящего.

Массив также не будет собран, если в метаданных раздела диск помечен как «неисправный».

Здесь перехожу к тому, как я запустил массив с данными, так как потерял массив /root, почему и как - описано ниже.

Собрать массив игнорируя статус «неисправен» — можно добавить флаг «-f» (force) — в моем случае это решило проблему сборки основного раздела с данными, т.е.

раздел был успешно пересобран следующей командой:

 
 mdadm --assemble /dev/md3 /dev/sd[abcdefghijklmnop]2 -f
 
конечно, простой способ скомпилировать его будет следующим:
 
 mdadm —assemble —scan -f -v
 
Но раз до флага "-f" я добрался сквозь тернии, то теперь всё ясно.

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

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

Однако в итоге у меня получился массив в деградированном режиме, с 14 дисками из 16. Теперь, чтобы восстановить нормальную работу массива и не бояться за это, нужно добавить в него 2 недостающих диска:

 
 mdadm --add /dev/md3 /dev/sdX2
 
где X — буква нового раздела жесткого диска.

Ниже я приведу трудности, с которыми столкнулся сам, чтобы уберечь других от наступления на мои грабли: Я использовал рекомендации WIKI - Linux RAID Recovery ( RAID.wiki.kernel.org/index.php/RAID_Recovery ) по работе с массивом с Linux RAID WIKI — советую быть с ними осторожными, так как на странице очень кратко описан процесс, и благодаря этим рекомендациям я уничтожил /root (md0) своего массива.

До этой строчки в самом низу статьи WIKI всё очень полезно:

 
 mdadm --create --assume-clean --level=6 --raid-devices=10 /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 missing missing /dev/sdl1 /dev/sdk1 /dev/sdj1
 
Эта строка демонстрирует, как воссоздать массив, зная, какие устройства в каком порядке включены в него.

Здесь очень важно учитывать версию вашего суперблока, так как новый mdadm создает суперблок 1.2 и он находится в начале раздела, а 0.90 находится в конце.

Поэтому вам нужно добавить флаг «--metadata=0.90».

После того, как я собрал массив с помощью «--create», файловая система была уничтожена, и ни основной суперблок ext4, ни резервные не были найдены.

Сначала я обнаружил, что новый суперблок не 0,90, а 1,2, что могло привести к разрушению раздела, но, судя по всему, этого не произошло, поскольку смена RAID-версии суперблока на 0,90 и поиск резервного суперблока ext4 оказались безуспешными.

Поскольку раздел /root — не самая важная часть, здесь я решил поэкспериментировать — массив переформатировал, а затем остановил: mdadm --stop /dev/md2 и тут же был создан заново с помощью «--create»: в результате файловая система снова уничтожается, хотя этого не должно было случиться, я уверен, что не перепутал порядок устройств в первый раз, и особенно второй раз.

Возможно, кто-то успешно восстанавливал разделы с помощью «--create», буду рад добавить в эту статью, что именно я сделал не так и почему ФС был уничтожен.

Возможно, он также был скомпилирован с другими параметрами размера блока (размером фрагмента).

Очевидно, что любые рекомендации из этой статьи следует использовать на свой страх и риск; никто не гарантирует, что в вашем случае все будет работать точно так же, как в моем.

Теги: #linux #Системное администрирование #raid

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.