如何调试冻结的 md raid?

如何调试冻结的 md raid?

我们有一台旧的备份服务器,里面有很多磁盘,其中一个带有mdraid 5 设置的挂载现在已冻结。如何诊断问题并使其重新运行?我想避免重新启动整个系统,因为只有一个子系统需要这一特定的安装点。

到目前为止的诊断:

# cat /proc/mdstat
...
md0 : active raid5 sdn1[2] sdm1[1] sdo1[4] sdl1[0] sdg1[5] sda1[6]
      29301952000 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/6] [UUUUUU]
      [==========>..........]  check = 54.4% (3191189500/5860390400) finish=3314902.0min speed=13K/sec
      bitmap: 0/44 pages [0KB], 65536KB chunk

/proc/sys/dev/raid/speed_limit_max即使我已经调整并/proc/sys/dev/raid/speed_limit_min等待了一个小时,这也没有取得任何进展。

然而,mdadm一切似乎都很好:

# mdadm --query --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Jun 15 23:50:50 2016
        Raid Level : raid5
        Array Size : 29301952000 (27944.52 GiB 30005.20 GB)
     Used Dev Size : 5860390400 (5588.90 GiB 6001.04 GB)
      Raid Devices : 6
     Total Devices : 6
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Jul  5 01:42:59 2021
             State : active, checking 
    Active Devices : 6
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

      Check Status : 54% complete

              Name : examplehost:md0  (local to host examplehost)
              UUID : ed0000c4:47000085:8000006f:221938f5
            Events : 404407

    Number   Major   Minor   RaidDevice State
       0       8      177        0      active sync   /dev/sdl1
       1       8      193        1      active sync   /dev/sdm1
       2       8      209        2      active sync   /dev/sdn1
       4       8      225        3      active sync   /dev/sdo1
       6       8        1        4      active sync   /dev/sda1
       5       8       97        5      active sync   /dev/sdg1

底层设备工作得很好:我测试了运行

dd if=/dev/sdX of=/tmp/test.img bs=1M count=1

对于此 raid 中的每个磁盘,并获得预期的磁盘启动和正常的响应时间。

所以看起来底层硬件工作得很好,但 md raid 在实践中已经冻结了。这次 raid 的实际挂载点不会给出任何错误,但似乎永远不会响应任何 IO 请求。即使是简单的也会ls -la永远挂起。

表明journalctl --since "7 days ago" | grep "blocked for more than"速度缓慢,md1md0即使根本没有响应,也没有出现在系统日志中。

Jul 04 01:20:14 examplehost kernel: INFO: task jbd2/md1-8:2262 blocked for more than 120 seconds.
Jul 04 01:38:21 examplehost kernel: INFO: task jbd2/md1-8:2262 blocked for more than 120 seconds.
Jul 04 02:04:32 examplehost kernel: INFO: task jbd2/md1-8:2262 blocked for more than 120 seconds.

挂载点md1工作得很好,所以那天晚上的负载一定太大了。

您能提供有关如何修复此安装的任何提示吗?我显然更喜欢可以在不重新启动整个服务器的情况下修复它的建议。如果您能建议一些可以在不卸载文件系统的情况下解决此问题的建议,那就更好了。我首先假设这是硬件挂起,但情况似乎并非如此。

我认为这种情况以前发生过一次,在这种情况下服务器刚刚重新启动。但是,我想了解真正的问题,以便我可以应用真正的解决方案。该系统正在运行 Linux 内核版本 5.4.119,以防出现差异。

相关内容