小编gre*_*gan的帖子

如何防止磁盘 I/O 超时导致磁盘断开连接和 SMR 磁盘数据损坏?

我有这些希捷磁盘(ST5000LM000 - 请注意它们是 SMR),当我将它们置于繁重的写入工作负载下时,I/O 利用率将达到 100%,吞吐量基本上为零。将磁盘插入使用mpt3sas驱动程序的 SAS 控制器(磁盘显示为 scsi 设备)。我尝试更改调度程序noop,将 ncq 设置为 1,并将设备超时增加到 1 小时。我什至尝试了一个完全不同的磁盘控制器(它使用megaraid驱动程序),它没有改变任何东西。每个驱动器都有一个 XFS 分区。

唯一有帮助的事情似乎是减少我的脚本写出文件的并发性,以便磁盘 I/O 永远不会落后太多,以至于滚雪球效应会使事情陷入停顿。

我认为echo 1 > /sys/block/sdl/device/queue_depth应该防止并发磁盘操作,但我通常会看到大约 150 个正在进行的操作cat /sys/block/sdl/stat

这是一个大问题,因为如果我在这种情况开始发生时不终止加载脚本,最终 i/o 操作会超时,导致磁盘断开连接,这有时会导致进程陷入可怕的D状态,我经常会以这种方式结束与损坏的数据。

我可以更改内核设置以防止陷入这种糟糕的状态吗? 看来我应该做点什么,因为如果我足够早地杀死它,它总是可以在任何 i/o 操作超时并断开磁盘连接之前被捕获。

kern.log从磁盘实际断开连接时开始

[401217.833235] sd 0:0:6:0: device_block, handle(0x0010)
[401218.583675] mpt3sas_cm0: log_info(0x31110e03): originator(PL), code(0x11), sub_code(0x0e03)
[401218.833518] sd 0:0:6:0: device_unblock and setting to running, handle(0x0010)
[401222.584105] sd 0:0:6:0: device_block, handle(0x0010)
[401230.581727] sd 0:0:6:0: device_unblock and …
Run Code Online (Sandbox Code Playgroud)

linux io hard-disk

5
推荐指数
1
解决办法
7790
查看次数

标签 统计

hard-disk ×1

io ×1

linux ×1