Ваш RAID-массив создан, собран и корректно работает, придавая надёжности хранению данных, а вам — ощущения уверенности в завтрашнем дне. Однако же, ничто не вечно, а жёсткие диски особенно. Ваша же задача, как системного администратора, состоит в том, чтобы поддерживать работу администрируемой вами системы, частью которой могут быть и RAID-массивы. О том, как и откуда получать информацию о состоянии md-массивов — в сегодняшней заметке.
Чтобы получить подробную информацию, а также узнать, в каком состоянии находится массив, можно воспользоваться опцией —detail из режима misc утилиты mdadm. Ниже предоставлен пример вывода для массива RAID-1, состоящего из трёх дисков, который мы создавали в предыдущей заметке:
# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Jan 12 12:24:16 2012 Raid Level : raid1 Array Size : 8387572 (8.00 GiB 8.59 GB) Used Dev Size : 8387572 (8.00 GiB 8.59 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Fri Jan 20 04:09:29 2012 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Name : debian-test0:0 (local to host debian-test0) UUID : a51bea1f:59677b56:1a4a2cbe:8a258729 Events : 196 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd
Как видим, все три устройства являются активными и синхронизированными, иными словами всё хорошо. Теперь давайте представим (к сожалению, у меня нет возможности физически сломать одно из устройств, входящих в рассматриваемый массив), что один из дисков вышел из строя (вспомним, что для RAID-1/5/6 это допустимо). В случае «железных» проблем драйвер md автоматически пометит диск как сбойный и исключит его дальнейшее использование в массиве; в нашем же тестовом случае мы сделаем это программно. Итак, сделаем устройство /dev/sdcсбойным:
# mdadm --fail /dev/md0 /dev/sdc mdadm: set /dev/sdc faulty in /dev/md0
И посмотрим, что изменилось:
# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Jan 12 12:24:16 2012 Raid Level : raid1 Array Size : 8387572 (8.00 GiB 8.59 GB) Used Dev Size : 8387572 (8.00 GiB 8.59 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Fri Jan 20 04:26:25 2012 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Name : debian-test0:0 (local to host debian-test0) UUID : a51bea1f:59677b56:1a4a2cbe:8a258729 Events : 198 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 0 0 1 removed 2 8 48 2 active sync /dev/sdd 1 8 32 - faulty spare /dev/sdc
Первое, что видим: массив стал неполным (degraded). хотя и продолжает функционировать (clean) :
State : clean, degraded
Сразу же оцениваем ситуацию. Вместо трёх активных устройств у нас осталось всего два:
Active Devices : 2 Working Devices : 2
и один диск сбойный:
Failed Devices : 1
В самом конце mdadm любезно предоставляет подробную информацию об устройствах, входящих массив, отметив что второй по счёту диск был удалён:
0 8 16 0 active sync /dev/sdb 1 0 0 1 removed 2 8 48 2 active sync /dev/sdd
а после — информацию об удалённом диске:
1 8 32 - faulty spare /dev/sdc
Из всего становится понятно, что наш RAID-1 работает на двух дисках и что надо-что-то решать с вышедшим из строя устройством. Прежде всего, его необходимо отключить от массива:
# mdadm --manage --remove /dev/md0 /dev/sdc mdadm: hot removed /dev/sdc from /dev/md0
Далее уже по обстоятельствам. Первым делом стоит изучить содержимое логов ядра и попытаться определить причину сбоя. Причины могут быть разные, начиная от проблем с интерфейсным кабелем или питанием, до полного выхода диска из строя. Если физически с диском всё порядке и ошибка была вызвана, например, некачественным кабелем, то после её устранения и подключения диска, необходимо вернуть его в массив:
# mdadm --manage --re-add /dev/md0 /dev/sdc mdadm: re-added /dev/sdc
Если всё в порядке, драйвер md тут же приступит к операции восстановления массива до «полного» состояния путём синхронизации данных на вернувшийся диск:
# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Jan 12 12:24:16 2012 Raid Level : raid1 Array Size : 8387572 (8.00 GiB 8.59 GB) Used Dev Size : 8387572 (8.00 GiB 8.59 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Fri Jan 20 04:57:37 2012 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Rebuild Status : 3% complete Name : debian-test0:0 (local to host debian-test0) UUID : a51bea1f:59677b56:1a4a2cbe:8a258729 Events : 206 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 spare rebuilding /dev/sdc 2 8 48 2 active sync /dev/sdd
И, в случае успешного восстановления, массив вернётся к своему нормальному состоянию, которое было приведено в начале заметки.
Если же устройство, которое вышло из строя, к жизни вернуть не представляется возможным, то после замены его новым, вместо опции —re-add следует использовать опцию —add:
# mdadm --manage --add /dev/md0 /dev/sdc mdadm: added /dev/sdc
Мониторинг
Вопрос, который возникает в первую очередь: а как, собственно, администратору узнать о том, что с массивом что-то неладно? Не заглядывать же постоянно в логи системы! Для целей мониторинга и оповещения о событиях, среди режимов работы утилиты mdadm предусмотрен режим monitor, позволяющий в качестве средств оповещения использовать как традиционный syslog, так и отправку уведомлений почтой. В этом режиме утилита, как правило, работает в режиме демона и запускается init-сценария во время старта системы.
В частности в Ubuntu/Debian запускающий сценарий называется mdadm и по-умолчанию включён. Если вы хотите получать уведомления не только в syslog, но и электронной почтой, добавьте исправьте строку в /etc/default/mdadm:
DAEMON_OPTIONS="--syslog"
на
DAEMON_OPTIONS="--syslog --mail root@localhost"
и перезапустите демон:
# service mdadm restart Stopping MD monitoring service: mdadm --monitor. Starting MD monitoring service: mdadm --monitor.
Тем, кому необходимо запускать mdadm в режиме монитора из собственных сценариев или же в целях тестирования, можно воспользоваться командой:
# mdadm --monitor --scan --syslog --mail root@localhost
Если же нужно, чтобы mdadm запустилась в режиме демона и не занимала консоль, просто добавьте опцию —daemonize:
# mdadm --monitor --scan --syslog --mail root@localhost --daemonize