From: Алексей Цыбань <leshats@a3d.od.ua.>
Newsgroups: email
Date: Mon, 08 Apr 2009 14:31:37 +0000 (UTC)
Subject: Восстановление массива RAID5 после сбоя двух дисков.
Слабое место RAID5 - процесс синхронизации с новым диском после сбоя.
Следующее хранилище важных данных я буду делать на RAID6.
Эта статья - попытка описать последовательность действий после краха
массива. Я постараюсь привести все команды, которыми пользовался, но не
буду объяснять их подробно. Очень рекомендую почитать документацию перед
тем, как применять их самому.
Начиналось все обыкновенно. Из RAID5 массива на шести дисках вывалился раздел sdc1.
Пара бэд-блоков - не такой уж редкий случай.
Вывожу диск из массива:
mdadm /dev/md0 --remove /dev/sdc1
И хочу понять, что с ним не так:
badblocks -vsw /dev/sdc
Утилита badblocks в таких случаях проблем не находит, так как
поврежденные блоки подменяются резервными прямо в процессе проверки.
После проверки диск можно включать обратно в RAID, но тут начинается
самое интересное.
В самом начале синхронизации из массива вываливается раздел sdd1. Теперь
массиву не хватает двух дисков и он радостно разваливается на части. В
моем случае система находится на другом разделе, поэтому компьютер
продолжает работать. Если так обвалится системный раздел, придется
грузиться с внешнего загрузочного диска. Мне больше нравится
systemrescuecd.
Сначала подозрения пали на SATA контроллер, поэтому, заменив контроллер,
пытаюсь собрать массив обратно. Собираю на пяти дисках из шести
возможных, sdc1 полезных данных не содержит, его в команду включать НЕ
НАДО!
mdadm --assemble --force /dev/md0 /dev/sd[abdef]1
Команда позволяет собрать разрушенный массив. Такой опыт у меня уже был.
Однако, сегодня явно не мой день и это почему-то не срабатывает:
mdadm: failed to RUN_ARRAY /dev/md0: Input/output error
Поиск в интернете дал такое решение:
# cat /sys/block/md0/md/array_state
inactive
# echo "clean" > /sys/block/md0/md/array_state
# cat /sys/block/md0/md/array_state
clean
Помогло, массив собрался (на пяти дисках из шести, sdc1 пропущен), хотя
я и не понял, почему.
Но день еще не кончился. Попытка запустить на разделе
xfs_repair -n /dev/md0
приводит к краху массива из-за все того же sdd1. Контроллер был в
порядке, а sdd - нет. Если вы пока еще не паниковали, на этом месте
можете начинать.
Покупаю новый винчестер, подключаю к системе. Это будет диск sdg.
Разбиваю его на разделы:
sfdisk -d /dev/sda | sdfisk /dev/sdg
При помощи утилиты ddrescue копирую все, что осталось c sdd1 на sdg1
Лог этой утилиты должен быть на любом другом рабочем разделе. Можно
запускать и без лога, но с ним гораздо лучше.
Пока шло копирование, я успел подумать, что есть еще два варианта
действий. Первый - копировать можно было не на новый диск, а на sdc. Он
ведь проходит проверку. Второй - пройти по разделу sdd1 утилитой
badblocks в неразрушающем режиме.
badblocks -vsn
Если дело в нескольких бэдах, как это было в моем случае, то винчестер
их подменит на резервные (remap) и собрать с ним массив. Но эти варианты
я не опробовал.
Итак, после окончания копирования собираю массив. Пять из шести с новым
диском sdg вместо sdd. Но сначала проверю:
mdadm --examine /dev/sdg1
Суперблок должен быть. Дальше:
mdadm --assemble --force /dev/md0 /dev/sd[abefg]1
Собрался, хотя это ничего не значит. Контрольного диска нет, сравнивать
не с чем, он бы с любым диском, содержащим суперблок, собрался. Можно
собрать и без суперблока.
У меня на этом разделе XFS, поэтому сначала монтирую, потом сразу
размонтирую, потом
xfs_repair -n /dev/md0
И вот тут можно вздохнуть. Кому с облегчением, а кому как. Мне, похоже
повезло. Дальше, по необходимости
xfs_repair /dev/md0
И теперь возвращаюсь к началу:
mdadm /dev/md0 --add /dev/sdc1
Затаить дыхание на все время синхронизации не получится, просто
скрестите пальцы.
Полезные ссылки
Linux RAID wiki: http://linux-raid.osdl.org/index.php/Linux_Raid
SystemRescueCd: http://www.sysresccd.org/
Google: http://www.google.com
1116 Прочтений • [Восстановление массива RAID5 после сбоя двух дисков. (raid recover sync crash disk mdadm)] [08.05.2012] [Комментариев: 0]