Как проверить RAID-массивы mdadm во время работы?

41

Я начинаю собирать дома компьютеры, и для их поддержки у меня есть «серверная» Linux-система с RAID-массивом.

В настоящее время mdadm RAID-1, собирается, RAID-5когда у меня будет больше дисков (а потом RAID-6я надеюсь). Однако я слышал различные истории о повреждении данных на одном диске, и вы никогда не замечали это из-за использования другого диска, вплоть до того момента, когда первый диск вышел из строя, и вы обнаружили, что ваш второй диск также прикручен (и 3-й, 4-й , 5-й диск).

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

Как бы вы проверили работающий RAID, чтобы убедиться, что все диски по-прежнему нормально работают?

Я отслеживаю SMART на всех дисках, а также mdadmнастроил отправку мне электронных писем в случае сбоя, но я хотел бы знать, что мои диски иногда тоже «проверяют» себя.

djsmiley2k - CoW
источник
Похоже, вы уже на правильном пути, вам просто нужно настроить cron, чтобы отправлять вам результаты smartctl для ваших дисков.
laebshade

Ответы:

56

Смысл RAID с избыточностью заключается в том, что он будет продолжать работать так долго, как может, но, очевидно, он будет обнаруживать ошибки, которые переводят его в ухудшенный режим, например, выходящий из строя диск. Вы можете показать текущее состояние массива с помощью mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Кроме того, состояние возврата отлично от mdadm -Dнуля, если есть какая-либо проблема, например, неисправный компонент (1 указывает на ошибку, которую компенсирует режим RAID, а 2 указывает на полный сбой).

Вы также можете получить краткую информацию о состоянии всех устройств RAID, посмотрев на /proc/mdstat. Вы также можете получить информацию об устройстве RAID /sys/class/block/md*/md/*; смотрите Documentation/md.txtв документации ядра. Некоторые /sysзаписи также доступны для записи; например, вы можете запустить полную проверку md0с помощью echo check >/sys/class/block/md0/md/sync_action.

В дополнение к этим выборочным проверкам mdadm может уведомить вас, как только что-то случится. Убедитесь, что вы MAILADDR rootв /etc/mdadm.conf(некоторые дистрибутивы (например, Debian) настроили это автоматически). Затем вы получите уведомление по электронной почте, как только возникнет ошибка (ухудшенный массив) .

Убедитесь, что вы получаете отправку почты в корневой каталог на локальном компьютере (некоторые современные дистрибутивы пропускают это, потому что считают, что вся электронная почта проходит через внешних провайдеров, но получение локальной почты необходимо для любого серьезного системного администратора). Проверьте это, посылая корень почту: echo hello | mail -s test root@localhost. Обычно для правильной настройки электронной почты требуются две вещи:

  • Запустите MTA на вашем локальном компьютере. MTA должен быть настроен как минимум для локальной доставки почты. Все дистрибутивы поставляются с подходящими MTA, выбирайте что угодно (но не nullmailer, если вы хотите, чтобы электронная почта доставлялась локально).
  • Перенаправляйте почту, поступающую в системные учетные записи (как минимум root), на адрес, который вы регулярно читаете. Это может быть ваша учетная запись на локальном компьютере или внешний адрес электронной почты. В большинстве MTA адрес может быть настроен в /etc/aliases; у вас должна быть строчка вроде

    root: djsmiley2k
    

    для локальной доставки, или

    root: djsmiley2k@mail-provider.example.com
    

    для удаленной доставки. Если вы выбираете удаленную доставку, убедитесь, что ваш MTA настроен для этого. В зависимости от вашего MTA, вам может потребоваться запустить newaliasesкоманду после редактирования /etc/aliases.

Жиль "ТАК - перестань быть злым"
источник
Можете ли вы объяснить, почему не следует использовать nullmailer? Это из-за причин, упомянутых в unix.stackexchange.com/questions/1449/… ? Какой MTA вы бы порекомендовали?
Кэмерон Мартин
@CameronMartin Nullmailer только пересылает почту на удаленный компьютер, но не выполняет локальную доставку. Вы можете использовать его, если у вас есть SMTP-сервер, который принимает почту с вашего компьютера, но не если вы доставляете почту локально. Я отредактировал свой ответ, чтобы уточнить.
Жиль "ТАК - перестань быть злым"
19

Вы можете принудительно проверить весь массив, пока он в сети. Например, чтобы проверить массив /dev/md0, запустите от имени пользователя root:

echo check > /sys/block/md0/md/sync_action

У меня также есть задание cron, которое запускает следующую команду раз в месяц:

tar c /dir/of/raid/filesystem > /dev/null

Это не тщательная проверка самого диска, но она вынуждает систему периодически проверять, что (почти) каждый файл может быть успешно прочитан с диска. Да, некоторые файлы будут считываться из кеша памяти, а не с диска. Но я полагаю, что если файл находится в кеше памяти, то он недавно был успешно прочитан с диска или готов к записи на диск, и любая из этих операций также обнаружит ошибки диска. Во всяком случае, выполнение этой работы проверяет самый важный критерий RAID-массива («Могу ли я успешно прочитать мои данные?»), И за три года работы моего массива один раз у меня вышел из строя диск, это было эта команда, которая обнаружила это.

Одно маленькое предупреждение: если ваша файловая система большая, эта команда займет много времени; моя система занимает около 6 часов / TiB. Я запускаю его ioniceтак, чтобы остальная часть системы не остановилась во время проверки диска:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null
stharward
источник
Обратите внимание, что это ioniceбудет работать, только если вы используете (по умолчанию) планировщик ввода-вывода CFQ.
Тотор
Так что это может быть очевидным для большинства, но это не для меня - как запуск сценария, чей вывод перенаправлен на devnull, на самом деле уведомляет вас о чем-то? Является ли это случаем, что если tar обнаружит какие-либо ошибки, они будут переданы демону mdadm, который (предположительно) отправит вам электронное письмо?
ljwobker
Мой вопрос к вам, stharward, как вы обнаруживаете ошибки tar, если они запускаются из задания cron? Где этот вывод? Я бы подумал, что вы добавите перенаправление для stderr к файлу, который можно периодически отслеживать, или к концу его вывода на консоль открытия окна терминала :)
Мадивад
1
@ljwobker Извините за возрождение старой темы. Я думаю, что целью команды tar является попытка прочитать все содержимое тома. Это позволит убедиться, что весь том все еще доступен для чтения, и даст md шанс обнаружить неисправный диск.
mikepj
1
Если он приходит из cronjob, cron обычно отправляет весь свой вывод прямо в адрес mailto =, если он установлен, в противном случае - в root. Однако ... мне интересно, будет ли dd лучше, чем tar, для снижения накладных расходов?
djsmiley2k - CoW
11

пакет 'mdadm' Debian и Ubuntu содержит файл

/etc/cron.d/mdadm

который по очереди первое воскресенье каждого месяца будет запускать команду

/usr/share/mdadm/checkarray --cron --all --idle --quiet

это проверит все ваши массивы на согласованность (если вы не установите для AUTOCHECK значение false в / etc / default / mdadm ). Отчет будет отправлен пользователю root (убедитесь, что вы получаете такие письма).

am70
источник
8

Я использую эту простую функцию для проверки /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }
jasonwryan
источник
аккуратный! мне нравится стиль :) .. это именно то, что я искал, чтобы положить в MOTD :) спасибо!
ирислав