我在 ubuntu server 22.04 上有一个 2TB raid1 mdadm 阵列,使用 HWE 内核 6.2.0-35-generic。驱动器是 nvme0n1 和 nvme1n1
有时,有时在高负载下,有时没有,整个服务器会停止响应 - 多个实时流和聊天程序正在运行,因此这非常明显。通常它会在几分钟内很快恢复。
之前和之后,内核都会记录类似这样的内容(第一行是在冻结之前,第二行是在恢复之后 - 查看时间戳)
Oct 28 20:33:50 tombstone kernel: [731601.828091] nvme nvme0: I/O 1 (I/O Cmd) QID 3 timeout, aborting
Oct 28 20:33:50 tombstone kernel: [731601.828099] nvme nvme0: I/O 2 (I/O Cmd) QID 3 timeout, aborting
Oct 28 20:33:50 tombstone kernel: [731601.828106] nvme nvme0: I/O 3 (I/O Cmd) QID 3 timeout, aborting
Oct 28 20:33:50 tombstone kernel: [731601.828113] nvme nvme0: I/O 4 (I/O Cmd) QID 3 timeout, aborting
Oct 28 20:34:21 tombstone kernel: [731632.551513] nvme nvme0: I/O 0 QID 3 timeout, reset controller
Oct 28 20:34:51 tombstone kernel: [731663.266956] nvme nvme0: I/O 24 QID 0 timeout, reset controller
Oct 28 20:35:22 tombstone kernel: [731693.971274] nvme nvme0: Abort status: 0x371
Oct 28 20:35:22 tombstone kernel: [731693.971281] nvme nvme0: Abort status: 0x371
Oct 28 20:35:22 tombstone kernel: [731693.971284] nvme nvme0: Abort status: 0x371
Oct 28 20:35:22 tombstone kernel: [731693.971287] nvme nvme0: Abort status: 0x371
Oct 28 20:35:22 tombstone kernel: [731693.971290] nvme nvme0: Abort status: 0x371
Oct 28 20:35:22 tombstone kernel: [731694.019253] nvme nvme0: 15/0/0 default/read/poll queues
值得注意的是,始终是 nvme0 执行此操作,而不是 nvme1
我已经尝试使用 io 调度程序,但似乎并没有起到什么作用。我还尝试更改脏内存值 - 目前是 300mb 的背景设置,以及 60gb 之类的硬限制,因为避免在数据写入时出现硬暂停是至关重要的,而较低的限制似乎仍然会造成麻烦。
据我所知,这可能表明驱动器出现故障,但一些消息来源建议将 io 超时增加到一个荒谬的高值。我愿意尝试一下,但如果服务器最终永远挂起,而不是默认超时的 30 秒或任何其他时间,那就更糟糕了。有人对此有什么意见吗?
由于停机时间非常糟糕,我的想法是,如果这是出现故障的驱动器,从 mdadm 阵列中移除磁盘并以降级方式运行,直到我们可以安排一些停机时间。
ETA:问题
- 是什么原因导致了这个问题?一定是硬件故障还是我配置错误?
- 为什么 mdadm 不在后台处理这个问题,而是导致系统冻结?
- 如果这确实是一个故障驱动器,将其标记为故障并将其从 mdadm raid1 阵列中删除,除了可能来自 mdadm 的烦人消息和明显缺乏冗余之外,还有什么缺点吗?