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
Используются технологии uCoz