Несколько дней назад вышел из строя один из жестких дисков бюджетного массива из накопителей 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
-
Стоит Ли Обновляться До V.92?
19 Oct, 24 -
Ретороманские Языки
19 Oct, 24 -
Массовая Sql-Инъекция Скрипта Lizamoon
19 Oct, 24 -
Фишинг, Классика Жанра!
19 Oct, 24