Next Previous Contents

## 4. Восстановление ошибок

1. В: У меня установлен 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`. Вы можете попробовать следующее:
   >   1. `fsck /dev/hda3`
   >   2. `fsck /dev/hdc3`
   >   3. Решите, который из двух разделов содержит меньше ошибок, или где проще восстановление, или на котором находятся нужные Вам данные. Выберите один, только один, для вашей новой ``главной'' копии. Предположим Вы выбрали `/dev/hdc3`.
   >   4. `dd if=/dev/hdc3 of=/dev/hda3`
   >   5. `mkraid raid1.conf -f --only-superblock`
   >   Вместо последних двух шагов, Вы можете запустить `ckraid /etc/raid1.conf --fix --force-source /dev/hdc3`, что будет быстрее.
   > - Метод (3): Версия для ленивых людей. Если Вы не хотите ждать завершения долгой проверки fsck, просто пропустите первые три шага выше, и начинайте прямо с последних двух шагов. Только после завершения запустите `fsck /dev/md0`. Метод (3) на самом деле замаскированный метод (1).
   > В любом случае, вышеуказанные шаги только синхронизируют массив raid. Для файловых систем возможно все еще необходимо устранение ошибок: для этого, нужно запустить fsck на активном, но не смонтированном устройстве.

   > С трех-дисковым массивом RAID-1, есть много вариантов, таких как использование двух дисков для выбора ответа. Утилиты автоматизации этого пока (Сентябрь 97) не существуют.

2. В: Если у меня установлен 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`. Итак, Вы можете экспериментировать с различными возможными вариантами восстановления.

3. В: Мое 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, программа обратит внимание на проблему, и деактивирует один из двух разделов. Пересоздав суперблок, вы должны получить полностью рабочую систему.

4. В: У моей версии `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` с этого места.

5. В: Мое устройство RAID-1, `/dev/md0` состоит из двух разделов: `/dev/hda3` and `/dev/hdc3`. Мой лучший друг(подруга?), который не разбирается в RAID, запустил без меня `fsck` на `/dev/hda3`, и сейчас RAID не работает. Что я должен делать?

   > О: Вы должны пересмотреть свое понятие - ``лучший друг''. В общем, `fsck` не должна запускаться на отдельных разделах массива RAID. Предположим ни один из разделов тяжело не поврежден, потерь данных нет, и RAID-1 устройство может быть восстановлено так:
   > 1. делаем резервную копию файловой системы на `/dev/hda3`
   > 2. `dd if=/dev/hda3 of=/dev/hdc3`
   > 3. `mkraid raid1.conf -f --only-superblock`
   > Это должно вернуть ваше зеркало к работе.

6. В: Почему сказанное выше работает как восстанавливающая процедура?

   > О: Потому что каждый компонент раздела в RAID-1 зеркале является просто точной копией файловой системы. В крайнем случае, зеркализация может быть запрещена, и один из разделов может быть смонтирован и безопасно запущен как обычная, не-RAID файловая система. Если Вы готовы перезапуститься используя RAID-1, то демонтируйте раздел, и следуйте вышеприведенным инструкциям для восстановления зеркала. Заметьте, что вышеуказанное работает ТОЛЬКО для RAID-1, и ни для какого другого уровня.

   > Возможно, Вам удобнее изменить направление копирования: копировать с диска, который был нетронут на тот, который был. Просто будьте уверены, что после этого запускаете fsck на md.

7. В: Я смущен предыдущим вопросом, но еще не убежден. Безопасно ли запускать `fsck /dev/md0` ?

   > О: Да, безопасно запускать `fsck` на устройствах `md`. Фактически, это единственное безопасное место запуска `fsck`.

8. В: Если диск медленно слабеет, будет очевидно который из них? Я беспокоюсь чтобы этого не случилось, и эта неразбериха не привела к каким-либо опасным решениям системного администратора.

   > О: Как только диск откажет, драйвер нижнего уровня вернет код ошибки драйверу RAID. RAID драйвер пометит этот диск в суперблоках RAID хороших дисков как ``плохой''(bad) (таким образом позже мы сможем узнать, которые из дисков хорошие, а которые нет), и продолжит работу RAID на оставшихся действующих зеркалах.

   > Это, конечно, предполагает, что диск и драйвер нижнего уровня в состоянии обнаружить ошибки чтения/записи и не будут, к примеру, молча искажать данные. Это справедливо для текущих дисков (схем обнаружения ошибок используемых в них), и основы работы RAID.

9. В: Как насчет горячей замены?

   > О: Работа далека от завершения ``горячей замены''. С этим свойством, можно добавить несколько ``резервных'' дисков в RAID набор (уровня 1 или 4/5), и как только диск отказал, он будет воссоздан на ходу на одном из резервных дисков, без необходимости остановки массива.

   > Однако, для использования этого свойства, резервные диски должны быть определены на момент загрузки или должны добавляться на ходу, что требует использования специального шкафа и соединителей, которые позволяют добавлять диск при включенном питании.

   > На Октябрь 97, доступна бета версия MD, которая позволяет:

   > - RAID 1 и 5 восстановление на резервных дисках
   > - RAID-5 восстановление паритета после неправильного завершения
   > - добавление резервных дисков в уже работающий массив RAID 1 или 4/5
   > По умолчанию, автоматическая реконструкция сейчас (Декабрь 97) запрещена по умолчанию, в основном по причине предварительного характера этой работы. Она может быть включена изменением значения `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`).
   >   Теперь массив будет запущен со всеми дисками, и снова будет защищен от отказа одного диска.

   > На текущий момент, не возможно назначить один резервный диск нескольким массивам. Каждый массив требует своего собственного резервного диска.

10. В: Хочу звуковую сигнализацию ``один диск в зеркале неисправен'', так как администратору-новичку узнать это проблематично.

    > О: Ядро ведет протокол событий с ```KERN_ALERT`'' приоритетом в syslog. Существует несколько программных пакетов, которые наблюдают за файлами syslog, и автоматически подают сигнал на PC динамик, звонят на пейджер, посылают почту, и т.д.

11. В: Как мне запустить 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 суперблок:

    > > `

    > >     mkraid -f --only-superblock raid5.conf

    > > `

    > RAID массив не предоставляет защиту от отказа питания или краха ядра, и нельзя гарантировать корректное восстановление. Воссоздание суперблока приведет к игнорированию положения пометкой всех устройств, как ``OK'', как будто ничего не случилось.

12. В: Как работает RAID-5 при отказе диска?

    > О: Типичный рабочий сценарий следующий:
    > - RAID-5 массив активен.
    > - Одно устройство отказывает во время активности массива.
    > - Микропрограмма диска и низкоуровневые драйвера Linux диска/контроллера обнаруживают отказ и сообщают код ошибки MD драйверу.
    > - MD драйвер продолжает поддерживать безошибочную работу `/dev/md0` устройства для верхних уровней ядра (с потерей производительности) используя оставшиеся рабочие диски.
    > - Системный администратор может, как обычно, `umount /dev/md0` и `mdstop /dev/md0`.
    > - Если отказавшее устройство не заменено, системный администратор может запустить массив в деградированном режиме, запустив `mdadd` and `mdrun`.

13. В:

    > О:

14. В: Почему нет вопроса номер 13?

    > О: Если Вы заботитесь о RAID, Высокой надежности, и UPS, то, возможно, также хорошая мысль - быть суеверным. Это не повредит, не так ли?

15. В: Я только что заменил отказавший диск в массиве RAID-5. После пересоздания массива, `fsck` выдает очень много ошибок. Это нормально?

    > О: Нет. И, если Вы запускали fsck не в "режиме только для чтения; без обновлений", вполне возможно, что у Вас повреждены даные. К несчастью, часто встречающийся сценарий - случайное изменение порядка дисков в массиве RAID-5, после замены диска. Хотя суперблок RAID содержит правильный порядок, не все утилиты используют эту информацию. В частности, текущая версия `ckraid` будет использовать информацию указанную в `-f` флаге (обычно, файл `/etc/raid5.conf`) вместо данных из суперблока. Если указанный порядок неверный, то замененный диск будет реконструирован неправильно. Симптом этого - многочисленные ошибки выдаваемые `fsck`.

    > И, если вы удивлены, да, кое-кто потерял все свои данные из-за этой ошибки. Настоятельно рекомендуется сделать копию всех данных перед ре-конфигурированием RAID месива.

16. В: В QuickStart сказано, что `mdstop` только для того, чтобы убедиться, что диски синхронизированы. Это ДЕЙСТВИТЕЛЬНО необходимо? Не достачно де-монтирования файловой системы?

    > О: Команда `mdstop /dev/md0` будет:
    > - помечать диски как ''чистые''. Это позволит нам обнаружить неправильное завершение, например из-за отказа питания или краха ядра.
    > - синхронизирует массив. Это менее важно после де-монтирования файловой системы, но важно если к `/dev/md0` был доступ не через файловую систему (например посредством `e2fsck`).

Next Previous Contents