Ubuntu 22.04 LTS 在对多个 RAID 进行 RAID 重新检查时冻结

Ubuntu 22.04 LTS 在对多个 RAID 进行 RAID 重新检查时冻结

我在一台机器上运行 Ubuntu 22.04,该机器有三个不同大小和几何形状的软件 RAID,其中两个(称为md5md6)非常大。由于某些原因,这些阵列之间共享磁盘。

每个月cron都会自动重新检查软件 RAID 阵列。由于共享磁盘,每次只能运行三个 RAID 检查中的一个,其他检查将自动暂停。此外,重新检查每天只运行六个小时,但我不知道如何确定这六个小时时间窗口的开始时间。

md6第二天重新检查时,挂载的文件系统冻结md6了。所有读写文件系统的进程和线程都陷入了“不可中断的睡眠”状态。强制卸载或强制拆卸阵列也是不可能的,所以我必须重新启动才能再次访问我的数据。除了有效的 DOS 之外,似乎没有数据丢失。

从日志中,我看到了以下情况:第一天,所有三个数组的检查同时启动。最小的数组,,md1赢得了最先被检查的竞争,而md5md6必须等待。md1在不到十分钟的时间内完成,然后md6继续直到第一天结束。

第二天,md5(不是已经开始的!)赢得了接受检查的比赛。六个小时后,当天的md6检查被中断。显然,几毫秒后收到了“运行”命令,开始运行,却在开始的同一秒内收到了 6 小时的停止。md5md6

在对 进行超快速的启动和停止检查后md6md6系统冻结。日志中的第一个迹象是警告,表明写入文件系统日志的尝试已被阻止超过两分钟:

以下是日志的相关部分(“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.

由于//home文件系统位于未受影响的 RAID 上,因此在 冻结之后我仍然可以登录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 个扇区(不到一个块!)。因此,我假设在启动并立即停止重新检查时出现死锁。

到目前为止,我的缓解措施是禁用自动 MD RAID 重新检查

答案1

你可能会遇到这个错误:https://bugs.launchpad.net/ubuntu/+source/linux-signed-hwe-5.11/+bug/1942935。这是一个上游内核错误,在 Linux v5.19 中会发布补丁来修复它。

评论 10,您可以尝试这种解决方法(首先切换md1md5/ md6/等):

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

相关内容