По умолчанию проверка массивов 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.