Программный RAID-6 под Linux: опыт восстановления массива 16Тб
Несколько дней назад вышел из строя один из жестких дисков на бюджетном массиве из 16х1ТБ дисков. Уровень массива: RAID 6. Ситуация осложнилась тем, что (как оказалось) ранее также встал кулер на видеокарте этого же сервера, что не было заранее подмечено, и после замены HDD, в результате изменения режима охлаждения корпуса — это стало проявляться в виде зависаний во время синхронизации, что само по себе очень неприятно. Вылилось это в то, что массив перестал автособираться, и были помечены как сбойные еще несколько дисков, и пришлось уже разбираться с ним по-серьёзному, курить вики, мануалы и форумы (форумы — самое полезное, поскольку описывают опыт конкретных людей в конкретных ситуациях).
Структура моего массива:
разделы:
md0 — /root 8х1 Гб, RAID 6
md1 — /data: 16х999Гб, RAID 6
Сначала все эксперименты по сборке ставились на md0, т. е. на рутовой партиции, которая сама по себе большой ценностью не обладает, разве что тот факт что это настроенная система.
Итак я загрузился с 1-го диска Дебиан в режиме «Resque mode»
Попытка автосборки массива через
привела к выводу ошибки «недостаточно дисков для сборки массива».
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 — текущая анализируемая партиция
Version 0.90.00 — Версия суперблока
Также вы увидите кучу полезной информации — размер массива, UUID, Level, Размер массива, Кол-во устройств и т. д.
Но самое важное для нас сейчас — это таблица внизу списка, первая строчка в ней, указывает, каким по счету HDD в массиве является наш экзаменуемый:
this 4 8 177 4 active sync /dev/sdl1
Также обратите пристальное внимание на версию суперблока! В моем случае это 0.90.00.
Тут мы видим его номер в массиве, т. е. 4 — такие же номера вы найдете в выводе для всех других устройств из списка. Обратите внимание, что буковка диска в строчке статуса другая — sdl1 — это означает, что диск был проинициализирован на другом SATA порту, затем перемещен. Это некритичная информация, но может быть полезной.
Критичным является название устройства и его номер в массиве (они поменяются при переносе устройств с порта на порт).
Сохраняем созданный файл raid_layout (например на флешке), чтобы не потерялся, и приступаем к следующему шагу:
2. Пытаемся собрать массив
Собрать массив можно 2мя способами: автоматический и ручной.
Если автоматически он собрался, считайте вам повезло, надо просто проверить все ли 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 использовать для сборки.
Скорее всего массив не соберется также, как и в случае с автоматической сборкой. Но, собирая вручную, вы начинаете лучше понимать саму суть происходящего.
Массив также не соберется, если в метаданных раздела, диск помечен как «faulty».
Тут я перескакивая на то, как я запустил массив с данными, поскольку /root массив я потерял, почему и как — рассказано ниже. Собрать массив игнорируя статус «faulty» — можно добавив флаг «-f» (force) — в моем случае это решило проблему сборки основного раздела с данными т. е. раздел был успешно пересобран следующей командой:
mdadm --assemble /dev/md3 /dev/sd[abcdefghijklmnop]2 -f
наверняка, простой способ собрать его был бы следующим:
Но, поскольку я добрался до флага «-f» через тернии, это сейчас понятно.
Т. е. разделы, помеченные как сбойные, или устаревшие были добавлены в массив, а не проигнорированы. С большой вероятностью, сбойным или устаревшим раздел может быть помечен при плохо, или не плотно сидящем SATA кабеле, что является не редкостью.
Тем не менее, у меня получился массив в режиме degraded, на 14 дисков из 16.
Теперь, чтобы восстановить нормальную работоспособность массива и не бояться за него, нужно добавить в него 2 недостающих диска:
где Х буковка раздела нового HDD
Ниже я приведу сложности с которыми я столкнулся, дабы уберечь других, от наступания на мои грабли:
Я использовал рекомендации 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 и поиск backup суперблока ext4 — был неудачен.
Поскольку /root партиция — это не самая важная часть, тут я решил поэкспериментировать — массив был переформатирован и после этого остановлен:
mdadm —stop /dev/md2
и тотчас создан ещё раз через «—create»: результат — файловая система разрушена опять, хотя этого случиться не должно было, я уверен, что не перепутал порядок устройств и первый раз, и тем более 2-й.
Возможно кто-то успешно восстанавливал разделы, через «—create», буду рад добавить в данную статью, что конкретно мною было сделано неправильно, и почему разрушалась FS. Возможно, она была собрана еще и с другими параметрами размера блока (chunk size).
Очевидно что какими либо рекомендациями из данной статьи следует пользоваться на свой страх и риск, никто не гарантирует что в Вашем случае все сработает именно так как в моём.
Восстанавливаем RAID 5, 1 или 0 при поломке одного или нескольких дисков
В нашем пошаговом руководстве, я расскажу о нескольких методах восстановления информации с программных RAID 5, 0 или 1, которые собраны под «Linux».
Если один или несколько физических накопителей повреждены, то кажется что восстановить данные просто невозможно. На самом деле это не так, объем информации, который можно достать из массива, сильно зависит от типа RAID и количества сломанных носителей.
Программный RAID крайне ненадежная штука, отключите всего один накопитель и весь массив перестанет определяться системой. Массив с поломанным носителем, можно пересобрать при помощи специальных программ, в наших тестах я буду использовать Hetman RAID Recovery. После запуска, она автоматически определит тип контроллера, название программы или производителя материнской платы, на основе технологий которых был собран RAID. Потом утилита соберет его из оставшихся «живых» накопителей, просканирует и найдет всю оставшуюся информацию, которую можно будет сохранить в другое место.
Установочный файл программы есть только под ОС Windows. Чтобы запустить ее под Linux понадобиться, либо установить дополнительную систему на компьютер, либо воспользоваться виртуальной машиной под Windows. В нашем случае, я выбрал второй вариант.
Восстанавливаем файлы с RAID-1
Тестовый массив первого типа состоит из двух одинаковых накопителей. Этот тип очень надежен сам по себе, так как может состоять из четного количества физических дисков, которые работают как «полное зеркало». Если поврежден только один носитель, то все устройство невозможно смонтировать в Linux.
Запускаем программу, она нашла и пересобрала устройство, все параметры указаны верно.
Так как, «живой» диск содержит полноценную копию всей информации, то запускаем быстрый анализ, отмечаем нужные нам файлы и каталоги, сохраняем на любой другой диск.
Восстанавливаем данные с RAID 5
Тип RAID-5 – это избыточный массив накопителей с чередованием, без определенного диска четности. Главная особенность этого типа, в том что массив гарантировано будет работать даже при поломке одного диска. Но, при попытке смонтировать его в Linux ничего не вышло. Чтобы исправить ситуацию, необходимо подключить чистый «винчестер» на место сломанного, или пересобрать с помощью ПО.
Тестовый RAID 5 состоит из 5 физических дисков, один из них гарантированно сломан. Добавляем их в виртуальную машину с Windows, запускаем Hetman RAID Recovery, массив обнаружен и все настройки и свойства указаны верно.
Как и положено один накопитель пустой. Так как это RAID 5, то снова запускаем быстрый анализ, находим нужные данные с помощью функции превью и восстанавливаем их. Когда процесс сохранения закончится, все файлы будут находится в выбранном каталоге.
Теперь рассмотрим вариант когда повреждены два физических носителя из пяти. Программа обнаружила RAID, и два «винчестера» пустые.
Восстановить данные с такого массива, задача непростая, запускаем полное сканирование, в зависимости от размеров «винчестеров» оно может длиться вплоть до суток. В итоге, программа нашла нетронутые данные, но несколько файлов частично или полностью стерты, их не получиться восстановить.
Если повреждены два или более физических носителя, RAID 5 становиться полностью неработоспособным, что сулит 100% потерю всех данных. Поэтому наш результат можно считать удовлетворительным.
Как восстановить данные RAID-0
Наш тестовый RAID 0 включает 5 жестких дисков, этот тип один из самых ненадежных. Фактически, это вообще не RAID, так как он не хранит избыточную информацию о хранящихся файлах. Если выйдет из строя хоть один «винчестер», то все устройство целиком нельзя монтировать в ОС. Все данные становятся недоступны.
Тип RAID-0 – это массив физических носителей с чередованием. Он показывает хорошую производительность благодаря высокой скорости чтения/записи, но отказ оборудования для него будет критическим. Посмотрим, сможем ли мы восстановить хоть часть потерянных данных.
Добавляем диски в виртуальную машину и запускаем утилиту. Hetman Partition Recovery со скрежетом смогла правильно определить тип и свойства массива, один диск отображается пустым.
Быстрое сканирование бессмысленно, сразу запускаем глубокий анализ. Все живые файлы удалось обнаружить и просмотреть превью, но также много поврежденных данных. Выбираем файлы с помощью превью и кликаем «Восстановить».
Вывод
Как показали тесты, количество восстанавливаемой информации напрямую зависит от типа массива. Данные с RAID 5 или 1 можно восстановить практически в полном объеме, благодаря «зеркалам» или избыточности информации. Даже при поломке нескольких жестких дисков, шансы вернуть большую часть нужных файлов достаточно высока.
Выход из строя хоть одного носителя, для RAID 0 становиться критическим. В большинстве случаев вы сможете восстановить только малую часть хранящихся данных. Что касается программы, то она смогла в автоматическом режиме распознать подключенные диски и правильно определить тип массива, что дало возможность уже восстанавливать файлы.
Полную версию статьи со всеми дополнительными видео уроками смотрите в источнике.