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

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.

Теги

 

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

mdadm — увеличиваем скорость синхронизации массива

Системным администраторам часто приходится сталкиваться с программными массивами в Linux. Создавать, восстанавливать, менять диски. Если массив большой, то процесс синхронизации (ресинхронизации) или восстановления массива может занимать часы или даже дни.

Теги

mdadm — RAID10 из четырёх NVMe дисков на сервере Dell

RAID1 из двух дисков NVMe 3.84 TB KCD5XLUG3T84 прекрасно работал. Потом место кончилось. Было принято решение приобрести ещё два диска такого же объёма и сделать RAID10 из четырёх NVMe дисков.

Теги

Ubuntu 20 на Intel RST не грузится после установки mdadm

Поймал очень интересный и опасный баг. Если у вас имеется операционная система Ubuntu Desktop 20.04.6, которая установлена на программный массив Intel RST, и вы установили утилиту mdadm, то ОС после перезагрузки не может распознать системный диск.

Теги