Linux のソフトウェア RAID である mdraid ですが、真昼間にアレイの整合性チェックが走ることがあります。さすがに真昼間にチェックされると通常利用に影響が出るのでやめてほしいところです。

アレイの整合性チェックを起動している systemd timer unit は mdcheck_start.timer と mdcheck_continue.timer の2つです。

mdcheck_start.timerの方は

OnCalendar=Sun *-*-1..7 1:00:00

となっていて、毎月第1日曜日午前1時(※マシンの local timezone、つまりは JST。以下同じ)にチェックを開始します。

mdcheck_start.service を見ると

Environment="MDADM_CHECK_DURATION=6 hours"
ExecStart=/usr/share/mdadm/mdcheck --duration ${MDADM_CHECK_DURATION}

となっており、一度には6時間しか実行しないようになっています。

中断したのを再開するのが mdcheck_continue.timer で、

OnCalendar=daily
# 梅澤注: 毎日午前0時の意味になる

毎日再開がスケジュールされます。一度に6時間しか実行しないのは start と同じです。

で、これだけだと夜中に実行されそうですが、start の方には以下の記述もあります。

RandomizedDelaySec=24h

つまり、毎月第1日曜日の午前0時からその24時間後までの間のランダムな時刻に開始する、という意味になります。結果として真昼間に実行される可能性があります。日曜だからっていつ実行してもいいわけじゃないんですよお兄さん。continue の方は平日にも起動されるためか 12h となっています。昼に実行する可能性があることには変わりませんが。

というわけで起動時刻とランダム遅延をオーバーライドすることを考えます。/etc/systemd/system/<systemd unit名>.d/override.conf というファイルにオーバーライドしたい内容を書きます。

# cat /etc/systemd/system/mdcheck_start.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=Sun *-*-1..7 02:05:00
RandomizedDelaySec=0
# cat /etc/systemd/system/mdcheck_continue.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=*-*-* 02:10:00
RandomizedDelaySec=0

午前0時だとまだ起きてることが多いので午前2時ごろにしました。2時ちょうどではないのはなんとなく他のタスクと衝突するのを避けるためです。ランダム遅延は要らないので0にしてあります。continue の方は start より少しだけ遅い時刻に起動することにしておきました(意味あるのか分かんないけど)。

最初に OnCalendar= とやっています。OnCalendar は ExecStart などと同様で、同一の unit の中に複数書けて、それぞれに意味がある形になります。一旦空を設定すると以前に書いたものが消去される意味になるので、上書きしたい場合はこういう記述になります。

Trackback

no comment untill now

Add your comment now