Ubuntu 22.04 LTS が複数の RAID の RAID 再チェック中にフリーズする

Ubuntu 22.04 LTS が複数の RAID の RAID 再チェック中にフリーズする

私は、サイズと形状が異なる 3 つのソフトウェア RAID を備えたマシンで Ubuntu 22.04 を実行しています。そのうち 2 つ ( と といいますmd5)md6は非常に大きいです。特定の理由により、これらのアレイ間でディスクが共有されています。

毎月、cronソフトウェア RAID アレイの再チェックが自動的に開始されます。共有ディスクのため、一度に実行できるのは 3 つの RAID チェックのうち 1 つだけで、他のチェックは自動的に一時停止されます。さらに、再チェックは毎日 6 時間のみ実行されますが、その 6 時間の時間枠の開始がどのように決定されるかはわかりません。

md62 日目に再チェックが中断されたとき、マウントされたファイル システムがフリーズしましmd6た。そのファイル システムへの読み取りと書き込みを行うすべてのプロセスとスレッドが「中断不可能なスリープ」状態になりました。アレイの強制アンマウントや強制分解も不可能だったため、データに再度アクセスするには再起動する必要がありました。有効な DOS 以外には、データが失われていないようです。

ログから、次のことが起こっていることがわかります。 1 日目には、3 つの配列すべてのチェックが同時に開始されます。 最も小さい配列 が、md1最初にチェックされるかどうかの競争に勝ちますが、 とmd5md6待たなければなりません。md1は 10 分以内に終了し、md61 日目の終わりまで続きます。

2 日目には、md5(すでに開始されている ではなくmd6) がチェックされるレースに勝ちます。6 時間後、 のチェックはmd5その日のうちに中断されます。md6は、明らかに数ミリ秒後に「実行」コマンドを受け取り、実行を開始しますが、開始したのと同じ秒数内に 6 時間の停止を受け取ります。

のチェックの超高速な開始と停止の後md6md6フリーズします。ログに記録される最初の兆候は、ファイル システム ジャーナルへの書き込み試行が 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、 のフリーズ後もログオンできましたmd6cat /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に切り替えます)。md5md6

echo active | sudo tee /sys/block/md1/md/array_state

関連情報