О: Избыточность уровней RAID предназначена для защиты от отказа диска, не от отказа питания. Есть несколько путей восстановления в этой ситуации.В любом случае, вышеуказанные шаги только синхронизируют массив raid. Для файловых систем возможно все еще необходимо устранение ошибок: для этого, нужно запустить fsck на активном, но не смонтированном устройстве.
- Метод (1): Использовать raid утилиты. Он может быть использован для синхронизации raid массивов. Он не устраняет повреждение файловой системы; после синхронизации raid массивов, файловая система все еще нуждается в исправлении с помощью fsck. Raid массивы могут быть проверены
ckraid /etc/raid1.conf
(для RAID-1, или,/etc/raid5.conf
, и т.д..) Запускckraid /etc/raid1.conf --fix
выберет оин один диск из дисков массива (обычно первый), для использования его в качестве главной копии, и копирования его блоков на другие диски зеркала. Для обозначения диска, который должен быть использован как главный, вы можете использовать--force-source
флаг: например,ckraid /etc/raid1.conf --fix --force-source /dev/hdc3
. Комманда ckraid может быть безопасно запущена без опции--fix
для проверки неактивного RAID массива без внесения изменений. Если Вы удовлетворены предполагаемыми изменениями, примените опцию--fix
.- Метод (2): Параноидальный, длительный по времени, не намного лучше, чем первый путь. Представим двух-дисковый массив RAID-1, состоящий из разделов
/dev/hda3
и/dev/hdc3
. Вы можете попробовать следующее:Вместо последних двух шагов, Вы можете запустить
fsck /dev/hda3
fsck /dev/hdc3
- Решите, который из двух разделов содержит меньше ошибок, или где проще восстановление, или на котором находятся нужные Вам данные. Выберите один, только один, для вашей новой ``главной'' копии. Предположим Вы выбрали
/dev/hdc3
.dd if=/dev/hdc3 of=/dev/hda3
mkraid raid1.conf -f --only-superblock
ckraid /etc/raid1.conf --fix --force-source /dev/hdc3
, что будет быстрее.- Метод (3): Версия для ленивых людей. Если Вы не хотите ждать завершения долгой проверки fsck, просто пропустите первые три шага выше, и начинайте прямо с последних двух шагов. Только после завершения запустите
fsck /dev/md0
. Метод (3) на самом деле замаскированный метод (1).С трех-дисковым массивом RAID-1, есть много вариантов, таких как использование двух дисков для выбора ответа. Утилиты автоматизации этого пока (Сентябрь 97) не существуют.
О: Избыточность уровней RAID предназначена для защиты от отказов дисков, а не от отказов питания. Так как диски в массиве RAID-4 или RAID-5 не содержат файловой системы, которую fsck может читать, есть несколько опций восстановления. Вы не можете использовать fsck для предварительной проверки и/или восстановления; Вы должны использовать сначала ckraid.Комманда
ckraid
может быть безопасно запущена без опции--fix
для проверки неактивного массива RAID без внесения любых изменений. Когда Вы удовлетворены предложенными изменениями, примените опцию--fix
.
Если Вы хотите, Вы можете попробовать обозначить один из дисков как ''отказавший диск''. Делайте это с флагом
--suggest-failed-disk-mask
.Только один бит должен быть установлен в флаге: RAID-5 не может восстанавливать два отказавших диска. mask - битовая маска: итак:
0x1 == первый диск 0x2 == второй диск 0x4 == третий диск 0x8 == четвертый диск, и т.д.Или Вы можете выбрать модификацию секторов с паритетом, используя флаг
--suggest-fix-parity
flag. Это заново вычислит паритет из других секторов.
Флаг
--suggest-failed-dsk-mask
и--suggest-fix-parity
может быть безопасно использован для проверки. Никаких изменений не будет сделано, если не указан флаг--fix
. Итак, Вы можете экспериментировать с различными возможными вариантами восстановления.
/dev/md0
состоит из двух разделов
жестких дисков:
/dev/hda3
и /dev/hdc3
.
Недавно, диск с /dev/hdc3
отказал,
был заменен на новый диск. Мой лучший друг,
который не разбирается в RAID, сказал, что сейчас правильно сделать
''dd if=/dev/hda3 of=/dev/hdc3
''.
Я попробовал это, но все по прежнему не работает.
О: Вы должны отстранить Вашего друга от компьютера. К счастью, не произошло никаких серьезных повреждений. Вы можете все восстановить запустив:При запуске
mkraid raid1.conf -f --only-superblockdd
, были созданы две идентичные копии раздела. Это почти правильно, исключая то, что расширение ядра RAID-1 предполагает различие в суперблоке. Итак, когда Вы пробуете активировать RAID, программа обратит внимание на проблему, и деактивирует один из двух разделов. Пересоздав суперблок, вы должны получить полностью рабочую систему.
mkraid
нет флага
--only-superblock
. Что мне делать?
О: В новых утилитах убрали поддержку этого флага, заменив его флагом--force-resync
. Как мне сообщили с последней версией утилит и программ работает такая последовательность:После этого,
umount /web (что было смонтировано на /dev/md0) raidstop /dev/md0 mkraid /dev/md0 --force-resync --really-force raidstart /dev/md0cat /proc/mdstat
должно доложитьresync in progress
, и далее можноmount /dev/md0
с этого места.
/dev/md0
состоит из двух
разделов: /dev/hda3
and /dev/hdc3
.
Мой лучший друг(подруга?), который не разбирается в RAID,
запустил без меня fsck
на /dev/hda3
,
и сейчас RAID не работает. Что я должен делать?
О: Вы должны пересмотреть свое понятие - ``лучший друг''. В общем,fsck
не должна запускаться на отдельных разделах массива RAID. Предположим ни один из разделов тяжело не поврежден, потерь данных нет, и RAID-1 устройство может быть восстановлено так:Это должно вернуть ваше зеркало к работе.
- делаем резервную копию файловой системы на
/dev/hda3
dd if=/dev/hda3 of=/dev/hdc3
mkraid raid1.conf -f --only-superblock
О: Потому что каждый компонент раздела в RAID-1 зеркале является просто точной копией файловой системы. В крайнем случае, зеркализация может быть запрещена, и один из разделов может быть смонтирован и безопасно запущен как обычная, не-RAID файловая система. Если Вы готовы перезапуститься используя RAID-1, то демонтируйте раздел, и следуйте вышеприведенным инструкциям для восстановления зеркала. Заметьте, что вышеуказанное работает ТОЛЬКО для RAID-1, и ни для какого другого уровня.Возможно, Вам удобнее изменить направление копирования: копировать с диска, который был нетронут на тот, который был. Просто будьте уверены, что после этого запускаете fsck на md.
fsck /dev/md0
?
О: Да, безопасно запускатьfsck
на устройствахmd
. Фактически, это единственное безопасное место запускаfsck
.
О: Как только диск откажет, драйвер нижнего уровня вернет код ошибки драйверу RAID. RAID драйвер пометит этот диск в суперблоках RAID хороших дисков как ``плохой''(bad) (таким образом позже мы сможем узнать, которые из дисков хорошие, а которые нет), и продолжит работу RAID на оставшихся действующих зеркалах.Это, конечно, предполагает, что диск и драйвер нижнего уровня в состоянии обнаружить ошибки чтения/записи и не будут, к примеру, молча искажать данные. Это справедливо для текущих дисков (схем обнаружения ошибок используемых в них), и основы работы RAID.
О: Работа далека от завершения ``горячей замены''. С этим свойством, можно добавить несколько ``резервных'' дисков в RAID набор (уровня 1 или 4/5), и как только диск отказал, он будет воссоздан на ходу на одном из резервных дисков, без необходимости остановки массива.Однако, для использования этого свойства, резервные диски должны быть определены на момент загрузки или должны добавляться на ходу, что требует использования специального шкафа и соединителей, которые позволяют добавлять диск при включенном питании.
На Октябрь 97, доступна бета версия MD, которая позволяет:
По умолчанию, автоматическая реконструкция сейчас (Декабрь 97) запрещена по умолчанию, в основном по причине предварительного характера этой работы. Она может быть включена изменением значения
- RAID 1 и 5 восстановление на резервных дисках
- RAID-5 восстановление паритета после неправильного завершения
- добавление резервных дисков в уже работающий массив RAID 1 или 4/5
SUPPORT_RECONSTRUCTION
вinclude/linux/md.h
.
Если при создании в массиве сконфигурированы резервные диски и реконструкция в ядре включена, резервный диск уже будет содержать суперблок (записанный утилитой
mkraid
), и ядро будет реконструировать его содержимое автоматически (без необходимости шагов: вызовmdstop
, замены диска,ckraid
,mdrun
).
Если Вы не запустили автоматическую реконструкцию, и не сконфигурировали диски с горячей заменой, рекомендуется процедура описанная Gadi Oxman < gadio@netvision.net.il> :
- Сейчас, как только один диск удален, набор RAID будет запущен в деградированном режиме. Для восстановления полноценного функционирования, Вы должны:
Теперь массив будет запущен со всеми дисками, и снова будет защищен от отказа одного диска.
- остановить массив (
mdstop /dev/md0
)- заменить отказавший диск
- запустить
ckraid raid.conf
для реконструкции содержимого- запустить массив снова (
mdadd
,mdrun
).На текущий момент, не возможно назначить один резервный диск нескольким массивам. Каждый массив требует своего собственного резервного диска.
О:
Ядро ведет протокол событий с
``KERN_ALERT
'' приоритетом в syslog.
Существует несколько программных пакетов, которые наблюдают за
файлами syslog, и автоматически подают сигнал на PC динамик,
звонят на пейджер, посылают почту, и т.д.
О: Gadi Oxman < gadio@netvision.net.il> пишет: Обычно, для запуска RAID-5 набора из n дисков вы должны:В случае, если один из дисков отказал, Вы все также должны
mdadd /dev/md0 /dev/disk1 ... /dev/disk(n) mdrun -p5 /dev/md0mdadd
их, как и при обычном запуске. (?? попробуйте использовать /dev/null вместо отказавшего диска ??? и посмотрите, что получится). После этого массив будет активен в деградированном режиме с (n - 1) диском. Если ``mdrun
'' не удается, ядро фиксирует ошибку (например, несколько отказавших дисков, или неправильное завершение). Используйте ``dmesg
'' для отображения сообщений об ошибках ядра от ``mdrun
''. Если набор raid-5 поврежден исчезновением питания, в отличие от отказа диска, можно попробовать создать новый RAID суперблок:RAID массив не предоставляет защиту от отказа питания или краха ядра, и нельзя гарантировать корректное восстановление. Воссоздание суперблока приведет к игнорированию положения пометкой всех устройств, как ``OK'', как будто ничего не случилось.
mkraid -f --only-superblock raid5.conf
О: Типичный рабочий сценарий следующий:
- RAID-5 массив активен.
- Одно устройство отказывает во время активности массива.
- Микропрограмма диска и низкоуровневые драйвера Linux диска/контроллера обнаруживают отказ и сообщают код ошибки MD драйверу.
- MD драйвер продолжает поддерживать безошибочную работу
/dev/md0
устройства для верхних уровней ядра (с потерей производительности) используя оставшиеся рабочие диски.- Системный администратор может, как обычно,
umount /dev/md0
иmdstop /dev/md0
.- Если отказавшее устройство не заменено, системный администратор может запустить массив в деградированном режиме, запустив
mdadd
andmdrun
.
О:
О: Если Вы заботитесь о RAID, Высокой надежности, и UPS, то, возможно, также хорошая мысль - быть суеверным. Это не повредит, не так ли?
fsck
выдает очень много ошибок. Это нормально?
О: Нет. И, если Вы запускали fsck не в "режиме только для чтения; без обновлений", вполне возможно, что у Вас повреждены даные. К несчастью, часто встречающийся сценарий - случайное изменение порядка дисков в массиве RAID-5, после замены диска. Хотя суперблок RAID содержит правильный порядок, не все утилиты используют эту информацию. В частности, текущая версияckraid
будет использовать информацию указанную в-f
флаге (обычно, файл/etc/raid5.conf
) вместо данных из суперблока. Если указанный порядок неверный, то замененный диск будет реконструирован неправильно. Симптом этого - многочисленные ошибки выдаваемыеfsck
.И, если вы удивлены, да, кое-кто потерял все свои данные из-за этой ошибки. Настоятельно рекомендуется сделать копию всех данных перед ре-конфигурированием RAID месива.
mdstop
только для того, чтобы
убедиться, что диски синхронизированы. Это ДЕЙСТВИТЕЛЬНО необходимо?
Не достачно де-монтирования файловой системы?
О: Командаmdstop /dev/md0
будет:
- помечать диски как ''чистые''. Это позволит нам обнаружить неправильное завершение, например из-за отказа питания или краха ядра.
- синхронизирует массив. Это менее важно после де-монтирования файловой системы, но важно если к
/dev/md0
был доступ не через файловую систему (например посредствомe2fsck
).