
私は、サイズと形状が異なる 3 つのソフトウェア RAID を備えたマシンで Ubuntu 22.04 を実行しています。そのうち 2 つ ( と といいますmd5
)md6
は非常に大きいです。特定の理由により、これらのアレイ間でディスクが共有されています。
毎月、cron
ソフトウェア RAID アレイの再チェックが自動的に開始されます。共有ディスクのため、一度に実行できるのは 3 つの RAID チェックのうち 1 つだけで、他のチェックは自動的に一時停止されます。さらに、再チェックは毎日 6 時間のみ実行されますが、その 6 時間の時間枠の開始がどのように決定されるかはわかりません。
md6
2 日目に再チェックが中断されたとき、マウントされたファイル システムがフリーズしましmd6
た。そのファイル システムへの読み取りと書き込みを行うすべてのプロセスとスレッドが「中断不可能なスリープ」状態になりました。アレイの強制アンマウントや強制分解も不可能だったため、データに再度アクセスするには再起動する必要がありました。有効な DOS 以外には、データが失われていないようです。
ログから、次のことが起こっていることがわかります。 1 日目には、3 つの配列すべてのチェックが同時に開始されます。 最も小さい配列 が、md1
最初にチェックされるかどうかの競争に勝ちますが、 とmd5
はmd6
待たなければなりません。md1
は 10 分以内に終了し、md6
1 日目の終わりまで続きます。
2 日目には、md5
(すでに開始されている ではなくmd6
) がチェックされるレースに勝ちます。6 時間後、 のチェックはmd5
その日のうちに中断されます。md6
は、明らかに数ミリ秒後に「実行」コマンドを受け取り、実行を開始しますが、開始したのと同じ秒数内に 6 時間の停止を受け取ります。
のチェックの超高速な開始と停止の後md6
、md6
フリーズします。ログに記録される最初の兆候は、ファイル システム ジャーナルへの書き込み試行が 2 分以上ブロックされていることを示す警告です。
ログの関連部分は次のとおりです (「M」はマシンの名前です)。
Sep 4 08:23:59 M root: mdcheck start checking /dev/md1
Sep 4 08:23:59 M kernel: [1682166.084604] md: data-check of RAID array md1
Sep 4 08:24:00 M root: mdcheck start checking /dev/md5
Sep 4 08:24:00 M kernel: [1682167.725977] md: delaying data-check of md5 until md1 has finished (they share one or more physical units)
Sep 4 08:24:00 M root: mdcheck start checking /dev/md6
Sep 4 08:24:00 M kernel: [1682167.758063] md: delaying data-check of md6 until md5 has finished (they share one or more physical units)
Sep 4 08:33:23 M kernel: [1682730.686726] md: md1: data-check done.
Sep 4 08:33:23 M kernel: [1682730.697864] md: data-check of RAID array md6
Sep 4 08:33:23 M kernel: [1682730.697864] md: delaying data-check of md5 until md6 has finished (they share one or more physical units)
Sep 4 08:34:01 M root: mdcheck finished checking /dev/md1
Sep 4 14:24:02 M root: pause checking /dev/md5 at 0
Sep 4 14:24:03 M kernel: [1703770.476375] md: md6: data-check interrupted.
Sep 4 14:24:03 M root: pause checking /dev/md6 at 5702160936
Sep 4 14:24:03 M systemd[1]: mdcheck_start.service: Deactivated successfully.
Sep 4 14:24:03 M systemd[1]: mdcheck_start.service: Consumed 1.957s CPU time.
Sep 4 20:03:05 M systemd[1]: mdmonitor-oneshot.service: Deactivated successfully.
Sep 5 07:02:14 M root: mdcheck continue checking /dev/md5 from 0
Sep 5 07:02:14 M kernel: [1763663.944043] md: data-check of RAID array md5
Sep 5 07:02:14 M root: mdcheck continue checking /dev/md6 from 5702160936
Sep 5 07:02:14 M kernel: [1763663.980271] md: delaying data-check of md6 until md5 has finished (they share one or more physical units)
Sep 5 13:02:26 M kernel: [1785276.510597] md: md5: data-check interrupted.
Sep 5 13:02:27 M kernel: [1785276.786479] md: data-check of RAID array md6
Sep 5 13:02:27 M root: pause checking /dev/md5 at 5824508144
Sep 5 13:02:27 M kernel: [1785276.795438] md: md6: data-check interrupted.
Sep 5 13:05:31 M kernel: [1785461.181277] INFO: task jbd2/md6-8:2495 blocked for more than 120 seconds.
Sep 5 13:05:31 M kernel: [1785461.181441] task:jbd2/md6-8 state:D stack: 0 pid: 2495 ppid: 2 flags:0x00004000
Sep 5 13:05:31 M kernel: [1785461.181742] md_write_start.part.0+0x174/0x220
Sep 5 13:05:31 M kernel: [1785461.181753] md_write_start+0x14/0x30
Sep 5 13:05:31 M kernel: [1785461.181781] md_handle_request+0x12d/0x1b0
Sep 5 13:05:31 M kernel: [1785461.181792] md_submit_bio+0x71/0xc0
Sep 5 14:44:14 M systemd[1]: mdmonitor-oneshot.service: Deactivated successfully.
/
およびファイル システムは影響を受けない RAID 上にあるため/home
、 のフリーズ後もログオンできましたmd6
。cat /proc/mdstat
次の情報が表示されました。
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md5 : active raid5 sdd4[1] sdk4[2] sdh4[0] sdl4[4]
11415389184 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
bitmap: 0/29 pages [0KB], 65536KB chunk
md1 : active raid1 sdd3[0] sdk3[1] sdh3[3] sdl3[2]
100596736 blocks super 1.2 [4/4] [UUUU]
md6 : active raid6 sdd2[10] sdk2[9] sdh2[11] sdl2[8] sdg[5] sdf[4] sdb[1] sdc[2] sdi[6] sde[3] sdj[7] sda[0]
117186867200 blocks super 1.2 level 6, 512k chunk, algorithm 2 [12/12] [UUUUUUUUUUUU]
[====>................] check = 24.3% (2851080676/11718686720) finish=95845361544.0min speed=0K/sec
bitmap: 0/88 pages [0KB], 65536KB chunk
注意してください。これは、/proc/mdstat
再チェックの位置を 1 kB ブロックで返すようです。2851080676 は 5702161352 セクターに相当し、これはsyslog
前日に到達した位置としてログインした 5702160936 からわずか 416 セクター (1 チャンク未満!) 離れています。したがって、再チェックが開始されてすぐに停止したときにデッドロックが発生したと想定します。
これまでの私の緩和策は、自動MD RAID再チェックを無効にすることでした
答え1
次のバグが発生している可能性があります:https://bugs.launchpad.net/ubuntu/+source/linux-signed-hwe-5.11/+bug/1942935これはアップストリーム カーネルのバグであり、Linux v5.19 で修正パッチがリリースされる予定です。
からコメント 10、この回避策を試すことができます (まず/ /etc.md1
に切り替えます)。md5
md6
echo active | sudo tee /sys/block/md1/md/array_state