Библиотека сайта rus-linux.net
4. Восстановление ошибок
- В:
У меня установлен RAID-1 (зеркализация), и у меня пропало питание во время дисковой активности.
Что мне теперь делать?
О: Избыточность уровней RAID предназначена для защиты от отказа диска, не от отказа питания. Есть несколько путей восстановления в этой ситуации.
- Метод (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) не существуют.
- Метод (1): Использовать raid утилиты. Он может быть
использован для синхронизации raid массивов. Он не устраняет
повреждение файловой системы; после синхронизации raid
массивов, файловая система все еще нуждается в исправлении с
помощью fsck. Raid массивы могут быть проверены
- В:
Если у меня установлен RAID-4 или RAID-5 (паритетный), и пропало питание во врем активности диска.
Что мне делать?
О: Избыточность уровней 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
. Итак, Вы можете экспериментировать с различными возможными вариантами восстановления. - В:
Мое RAID-1 устройство,
/dev/md0
состоит из двух разделов жестких дисков:/dev/hda3
и/dev/hdc3
. Недавно, диск с/dev/hdc3
отказал, был заменен на новый диск. Мой лучший друг, который не разбирается в RAID, сказал, что сейчас правильно сделать ''dd if=/dev/hda3 of=/dev/hdc3
''. Я попробовал это, но все по прежнему не работает.О: Вы должны отстранить Вашего друга от компьютера. К счастью, не произошло никаких серьезных повреждений. Вы можете все восстановить запустив:
При запускеmkraid raid1.conf -f --only-superblock
dd
, были созданы две идентичные копии раздела. Это почти правильно, исключая то, что расширение ядра RAID-1 предполагает различие в суперблоке. Итак, когда Вы пробуете активировать RAID, программа обратит внимание на проблему, и деактивирует один из двух разделов. Пересоздав суперблок, вы должны получить полностью рабочую систему. - В:
У моей версии
mkraid
нет флага--only-superblock
. Что мне делать?О: В новых утилитах убрали поддержку этого флага, заменив его флагом
--force-resync
. Как мне сообщили с последней версией утилит и программ работает такая последовательность:
После этого,umount /web (что было смонтировано на /dev/md0) raidstop /dev/md0 mkraid /dev/md0 --force-resync --really-force raidstart /dev/md0
cat /proc/mdstat
должно доложитьresync in progress
, и далее можноmount /dev/md0
с этого места. - В:
Мое устройство RAID-1,
/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, которая позволяет:
- 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 динамик, звонят на пейджер, посылают почту, и т.д. - В:
Как мне запустить RAID-5 в деградированном режиме
(о одним отказавшим, и еще не замененным диском)?
О: Gadi Oxman < gadio@netvision.net.il> пишет: Обычно, для запуска RAID-5 набора из n дисков вы должны:
В случае, если один из дисков отказал, Вы все также должныmdadd /dev/md0 /dev/disk1 ... /dev/disk(n) mdrun -p5 /dev/md0
mdadd
их, как и при обычном запуске. (?? попробуйте использовать /dev/null вместо отказавшего диска ??? и посмотрите, что получится). После этого массив будет активен в деградированном режиме с (n - 1) диском. Если ``mdrun
'' не удается, ядро фиксирует ошибку (например, несколько отказавших дисков, или неправильное завершение). Используйте ``dmesg
'' для отображения сообщений об ошибках ядра от ``mdrun
''. Если набор raid-5 поврежден исчезновением питания, в отличие от отказа диска, можно попробовать создать новый RAID суперблок:
RAID массив не предоставляет защиту от отказа питания или краха ядра, и нельзя гарантировать корректное восстановление. Воссоздание суперблока приведет к игнорированию положения пометкой всех устройств, как ``OK'', как будто ничего не случилось.mkraid -f --only-superblock raid5.conf
- В:
Как работает RAID-5 при отказе диска?
О: Типичный рабочий сценарий следующий:
- RAID-5 массив активен.
- Одно устройство отказывает во время активности массива.
- Микропрограмма диска и низкоуровневые драйвера Linux диска/контроллера обнаруживают отказ и сообщают код ошибки MD драйверу.
- MD драйвер продолжает поддерживать безошибочную работу
/dev/md0
устройства для верхних уровней ядра (с потерей производительности) используя оставшиеся рабочие диски. - Системный администратор может, как обычно,
umount /dev/md0
иmdstop /dev/md0
. - Если отказавшее устройство не заменено, системный
администратор может запустить массив в деградированном
режиме, запустив
mdadd
andmdrun
.
- В:
О:
- В:
Почему нет вопроса номер 13?
О: Если Вы заботитесь о RAID, Высокой надежности, и UPS, то, возможно, также хорошая мысль - быть суеверным. Это не повредит, не так ли?
- В:
Я только что заменил отказавший диск в массиве RAID-5. После пересоздания массива,
fsck
выдает очень много ошибок. Это нормально?О: Нет. И, если Вы запускали fsck не в "режиме только для чтения; без обновлений", вполне возможно, что у Вас повреждены даные. К несчастью, часто встречающийся сценарий - случайное изменение порядка дисков в массиве RAID-5, после замены диска. Хотя суперблок RAID содержит правильный порядок, не все утилиты используют эту информацию. В частности, текущая версия
ckraid
будет использовать информацию указанную в-f
флаге (обычно, файл/etc/raid5.conf
) вместо данных из суперблока. Если указанный порядок неверный, то замененный диск будет реконструирован неправильно. Симптом этого - многочисленные ошибки выдаваемыеfsck
.И, если вы удивлены, да, кое-кто потерял все свои данные из-за этой ошибки. Настоятельно рекомендуется сделать копию всех данных перед ре-конфигурированием RAID месива.
- В:
В QuickStart сказано, что
mdstop
только для того, чтобы убедиться, что диски синхронизированы. Это ДЕЙСТВИТЕЛЬНО необходимо? Не достачно де-монтирования файловой системы?О: Команда
mdstop /dev/md0
будет:- помечать диски как ''чистые''. Это позволит нам обнаружить неправильное завершение, например из-за отказа питания или краха ядра.
- синхронизирует массив. Это менее важно после де-монтирования
файловой системы, но важно если к
/dev/md0
был доступ не через файловую систему (например посредствомe2fsck
).
Next Previous Contents