Перейти к основному содержанию

mdadm — изменить расписание проверки диска

Linux

По умолчанию проверка массивов mdadm запускается каждое воскресенье в час ночи. Не всегда такое поведение удобно, расписание можно изменить.

Конфигурация проверки массивов в Red Hat

Внести изменение в расписание можно в файле крона. Для RedHat это /etc/cron.d/raid-check (иногда я встречал и другие пути):

# Run system wide raid-check once a week on Sunday at 1am by default
0 1 * * Wed root /usr/sbin/raid-check

Если проверка мешает работе ваших приложений, можно задать приоритет операциям ввода-вывода. Вызываемая в кроне утилита /usr/sbin/raid-check читает конфигурацию в файле /etc/sysconfig/raid-check. Там есть параметр NICE. По умолчанию он правильно установлен в low (возможные варианты: high, normal, low, idle):

NICE=low

Ещё один интересный параметр — MAXCONCURRENT, по умолчанию параллельно проверяются все массивы, это поведение можно изменить.

MAXCONCURRENT=

SKIP_DEVS позволяет через пробел указать устройства, которые не нужно проверять. По умолчанию ничего не пропускается. Например, "md0 md3".

SKIP_DEVS=""

CHECK_DEVS позволяет через пробел указать устройства, которые нужно проверять. По умолчанию всё проверяется.

CHECK_DEVS=""

ENABLED позволяет включить или отключить проверку.

ENABLED=yes

CHECK определяет тип проверки. По умолчанию запускается check. Она сканирует диски на повреждённые сектора и автоматически исправляет их. Если находится исправный сектор с неправильными данными (не совпадающими с данными другого диска), то увеличивается счётчик /sys/block/$dev/md/mismatch_count. Это позволяет админу самому принять решение что делать с кривым сектором. Опция repair делает то же самое, но автоматически исправляет не консистентные данные. Однако, поскольку не всегда можно сказать которые данные корректные в raid1, то нам либо повезёт, либо нет. Эта опция является опцией по умолчанию для устройств, не перечисленных ни в CHECK_DEVS, ни в REPAIR_DEVS.

CHECK=check

Конфигурация проверки массивов в Ubuntu

До Ubuntu 20 внести изменение в расписание можно в файле крона. Для Ubuntu это /etc/cron.d/mdadm:

#
# cron.d/mdadm -- schedules periodic redundancy checks of MD devices
#
# Copyright © martin f. krafft <madduck@madduck.net>
# distributed under the terms of the Artistic Licence 2.0
#
# By default, run at 00:57 on every Sunday, but do nothing unless the day of
# the month is less than or equal to 7. Thus, only run on the first Sunday of
# each month. crontab(5) sucks, unfortunately, in this regard; therefore this
# hack (see #380425).
57 0 * * 0 root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi

Вызываемая в кроне утилита /usr/share/mdadm/checkarray принимает атрибуты:

Usage: $PROGNAME [options] [arrays]
Valid options are:
-a|--all       check all assembled arrays (ignores arrays in command line).
-s|--status    print redundancy check status of devices.
-x|--cancel    queue a request to cancel a running redundancy check.
-i|--idle      perform check in a lowest scheduling class (idle)
-l|--slow      perform check in a lower-than-standard scheduling class
-f|--fast      perform check in higher-than-standard scheduling class
--realtime     perform check in real-time scheduling class (DANGEROUS!)
-c|--cron      honour AUTOCHECK setting in /etc/default/mdadm.
-q|--quiet     suppress informational messages
               (use twice to suppress error messages too).
-h|--help      show this output.
-V|--version   show version information.
Examples:
$PROGNAME --all --idle
$PROGNAME --quiet /dev/md[123]
$PROGNAME -sa
$PROGNAME -x --all

Конфигурация считывается из /etc/default/mdadm.

# mdadm Debian configuration
#
# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if
# you want. You can also change the values here and changes will be preserved.
# Do note that only the values are preserved; the rest of the file is
# rewritten.
#
# AUTOCHECK:
#   should mdadm run periodic redundancy checks over your arrays? See
#   /etc/cron.d/mdadm.
AUTOCHECK=true
# START_DAEMON:
#   should mdadm start the MD monitoring daemon during boot?
START_DAEMON=true
# DAEMON_OPTIONS:
#   additional options to pass to the daemon.
DAEMON_OPTIONS="--syslog"
# VERBOSE:
#   if this variable is set to true, mdadm will be a little more verbose e.g.
#   when creating the initramfs.
VERBOSE=false

Для конфигурации можно запустить:

dpkg-reconfigure mdadm

Начиная с Ubuntu 20 появляется systemd service под названием mdcheck. Можно посмотреть в сторону:

  • mdcheck_start.service
  • mdcheck_start.timer
  • mdcheck_continue.service
  • mdcheck_continue.timer
systemctl list-timers | grep mdcheck

Здесь можно изменить расписание. И тут у нас в таймерах появляется непредвиденная переменная RandomizedDelaySec, которая может отсрочить запуск проверка на любой срок до суток, что может доставить проблем.

Запускается утилита /usr/share/mdadm/mdcheck. Проверка длится шесть часов, что можно переопределить в Environment="MDADM_CHECK_DURATION=6 hours". Затем каждый день проверка продолжается еще на 6 часов через случайный промежуток времени до 12 часов (RandomizedDelaySec). 

Вручную

Запуск проверки:

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

Остановка с возможным перезапуском:

echo 'idle' > /sys/block/md0/md/sync_action

Заморозка и блокировка перезапуска. Проверка продолжится с того же места после перезагрузки.

echo 'frozen' > /sys/block/md0/md/sync_action

Если нужно перезапустить при следующем запуске:

echo 'none' > /sys/block/md0/md/resync_start
echo 'idle' > /sys/block/md0/md/sync_action

Проверить наличие ошибок:

cat /sys/block/md0/md/mismatch_cnt

Отменить все проверки в Ubuntu:

/usr/share/mdadm/checkarray --cancel --all

Процедура проверки нагружает диски, скорость проверки можно регулировать. По умолчанию минимальная скорость 1000 Кб/сек, а максимальная — 200000 Кб/сек. Посмотреть текущие значения:

cat /proc/sys/dev/raid/speed_limit_min
cat /proc/sys/dev/raid/speed_limit_max

Эти переменные можно изменять. Например:

echo 150000 > /proc/sys/dev/raid/speed_limit_max

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

  • проверка и восстановление целостности данных
  • выравнивание (resync) данных между зеркальными (mirrored) дисками
  • перераспределение данных для RAID 5/6.

Теги

 

Похожие материалы

Zabbix — мониторинг программных RAID массивов в Linux

Мой шаблон работает на основе утилиты mdadm. Список MD массивов определяется автоматически. В шаблоне 10 прототипов элементов данных и 13 прототипов триггеров

Теги