X

Mdadm check - запланированные проверки

Сегодня заметил, что на одном из серверов, скопилось кучу запросов в БД. И это было странно, т.к. нагрузка на сайт была не значительная. Т.к. я недавно там восстанавливал один из дисков (Hetzner и замена диска), то первое о чем я подумал, что он продолжил сыпаться, однако проверив /proc/mdstat я заметил, что всего лишь идет проверка, которая и конкретно замедляет i/o операции диска..

Вот так выглядит эта картина:

Mdstat check state. Проверка Raid-а

Не особо веселая ситуация, т.к. я сам не запускал такой проверки, то предположил что команда проверки прописана где-то в системе. Быстрый взгляд в обычные места обитания, выявил такую команду в /etc/cron.d/mdadm

Запуск проверки через крон

Разумеется, мне это очень мешает, поэтому я решил отключить такую еженедельную проверку, делается это так:

$ dpkg-reconfigure mdstat

Далее меняем нужные параметры, в частности, проверка отключается тут:

Отключение еженедельной проверки Raid-ов

После этого, я сново проверил /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).

#20 1 1 * * root if [ -x /usr/share/mdadm/checkarray ]; then /usr/share/mdadm/checkarray --cron --all --i$

Разумеется после этих действий проверка которая уже запущена не остановится, а ждать возобновления нормальной работы 50 часов мне не хотелось, поэтому я попросту перезагрузил сервер. После чего, все заработало так, как и ожидалось.

--[добавлено 19 июня 2018]--

Список опций checkarray

$ /usr/share/mdadm/checkarray -h
checkarray -- MD array (RAID) redundancy checker tool
Copyright © martin f. krafft <madduck@debian.org>
Released under the terms of the Artistic Licence 2.0

Usage: checkarray [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:
checkarray --all --idle
checkarray --quiet /dev/md[123]
checkarray -sa
checkarray -x --all

Devices can be specified in almost any format. The following are equivalent:
/dev/md0, md0, /dev/md/0, /sys/block/md0

You can also control the status of a check with /proc/mdstat file.

Описание работы checkarray ( /usr/share/doc/mdadm/README.checkarray)

checkarray notes
================

checkarray will run parity checks across all your redundant arrays. By
default, it is configured to run on the first Sunday of each month, at 01:06
in the morning. This is realised by asking cron to wake up every Sunday with
/etc/cron.d/mdadm, but then only running the script when the day of the month
is less than or equal to 7. See #380425.

Cron will try to run the check at "idle I/O priority" (see ionice(1)), so that
the check does not overload the system too much. Note that this will only
work if all the component devices of the array employ the (default) "cfq" I/O
scheduler. See the kernel documentation[0] for information on how to verify
and modify the scheduler. checkarray does not verify this for you.

  0. http://www.kernel.org/doc/Documentation/block/switching-sched.txt

If you manually invoke checkarray, it runs with default I/O priority. Should
you need to run a check at a higher (or lower) I/O priority, then have a look
at the --idle, --slow, --fast, and --realtime options.

'check' is a read-only operation, even though the kernel logs may suggest
otherwise (e.g. /proc/mdstat and several kernel messages will mention
"resync"). Please also see question 21 of the FAQ.

If, however, while reading, a read error occurs, the check will trigger the
normal response to read errors which is to generate the 'correct' data and try
to write that out - so it is possible that a 'check' will trigger a write.
However in the absence of read errors it is read-only.

You can cancel a running array check with the -x option to checkarray.

 -- martin f. krafft <madduck@debian.org>  Thu, 02 Sep 2010 10:27:29 +0200

--[добавлено 08 июня 2020]--

Запустить / Остановить проверку CentOS можно так

$ echo "check" > /sys/block/md0/md/sync_action
$ echo "idle" > /sys/block/md0/md/sync_action
$ echo "frozen" > /sys/block/md0/md/sync_action
  • check = запуск проверки
  • idle = остановка, однако возможен перезапуск.
  • frozen = остановка и блокировка перезапуска. В этом режиме, проверка продолжиться с того же места при следующей перезагрузке.

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

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

Отключить или изменить расписание можно тут

$ nano /etc/cron.d/raid-check

# Run system wide raid-check once a week on Sunday at 1am by default
# 0 1 * * Sun root /usr/sbin/raid-check
Категории: Linux
Тэги: checkmdadmRaid

Комментарии (5)

  • Здравствуйте, Виталий.
    Как Вы думаете, отключение периодического выполнения утилиты checkarray не приведёт нас к ситуации, когда RAID начнёт сыпаться, а мы об этом не узнаем? Или на самом деле периодическое выполнение этой утилиты из выше рассмотренного задания cron не несёт никакой смысловой нагрузки? Ведь зачем-то же разработчики включили этот скрипт по умолчанию в cron.

    • Здравствуйте, Алексей. Отключение утилиты приведет именно к тому, что Вы описали - мы не узнаем если райд начнет сыпаться. Забота и ответственность о таких проверках ложиться на плечи системного администратора, например, запуск этой же утилиты "вручную".

  • По идее, можно было остановить запущенную проверку без перезагрузки сервера:

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

    • Спасибо, в следующий раз попробую. Насколько я помню, я испробовал несколько способов которые смог нагуглить, но такой команды среди них не было.