应将 tur 超时设为 5 秒并启用 rdac 检查器:tur 默认 1 秒易误判,需在 multipath.conf 中配置 checker_timeout "5";rdac 阵列须匹配 vendor/product 并设 path_checker "rdac",其检测由 polling_interval(毫秒)控制,建议设为 3000–5000。

path_checker tur 超时太短导致路径频繁 flapping
Linux dm-multipath 默认用 tur(Test Unit Ready)做路径健康检查,但它的超时值默认只有 1 秒——对某些响应慢的存储阵列(比如带加密、压缩或高负载的 LUN),tur 很容易误判为路径失效,触发不必要的路径切换甚至 I/O 暂停。
实操建议:
-
tur的实际超时由内核模块参数scsi_mod.use_blk_mq=0和设备队列深度共同影响,但更直接可控的是 multipath.conf 中的checker_timeout - 在
defaults或具体devices块里加:checker_timeout "5"
(单位秒,支持整数,最大建议不超过 10) - 改完后必须
sudo systemctl reload multipathd,且需确认multipath -t输出中该值已生效 - 注意:部分老版本 multipath-tools(如 RHEL 7.6 之前)不识别
checker_timeout,得升级到 >= 0.7.4
rdac checker 在 Dell EMC Unity/VNX 上必须配 vendor/product
rdac 是专为 Dell EMC(原 EMC)存储设计的路径检测器,它依赖 SCSI INQUIRY 返回的 vendor/product 字符串匹配才能启用。如果没配对,multipath 会悄悄 fallback 到 directio 或 tur,而后者在 RDAC 阵列上可能无法正确识别“伪离线”状态(比如控制器接管中)。
实操建议:
- 先查设备真实标识:
sudo sg_inq /dev/sdb | grep -E "(vendor|product)",典型输出是 vendor:EMC,product:SYMMETRIX或VNX - 在
devices块中显式声明:device { vendor "EMC " product "VNX.*" path_checker "rdac" }(注意 vendor 字段必须补足空格到 8 字符) -
product支持正则,VNX.*可覆盖 VNX5100/VNX5300 等变种;但SYMMETRIX和VNX不可混用 - 若仍 fallback,检查
/etc/multipath.conf是否有更高优先级的 generic 规则覆盖了该设备
checker_timeout 对 rdac 实际无效,得靠 polling_interval
rdac 本身不走 SCSI TUR 流程,而是通过定期发 MODE SENSE(page 0xC9)查询阵列控制器状态,所以 checker_timeout 对它完全不起作用。真正控制检测频率的是全局 polling_interval(单位毫秒),默认 5000(即 5 秒)。
实操建议:
- 降低检测延迟可设:
polling_interval "2000"
,但低于 2000ms 可能增加阵列负担,Dell 官方建议不低于 3000ms - 该值影响所有路径检查(包括
tur),不是 per-checker 配置项 - 修改后同样要
systemctl reload multipathd,并用multipathd show config | grep polling确认生效 - 注意:某些旧固件(如 VNX OE 05.32.000.5.022)在高并发 polling 下会返回错误码 0x29("Command sequence error"),此时反而要调大间隔
路径检查器选错会导致 failover 失败或静默丢包
选 tur 对 RDAC 阵列、或选 rdac 对非 Dell 存储,不只是“检测不准”,而是可能让 multipathd 误认为路径永远 UP,从而在真实故障时拒绝 failover;更危险的是,某些场景下 I/O 会卡在 pending 状态却不报错,应用层只看到延迟飙升。
实操建议:
- 确认存储型号和 firmware 版本,再查对应厂商文档(如 Dell EMC 的 “Linux Host Connectivity Guide”)明确推荐的
path_checker - 不要仅凭
lsscsi输出的 vendor 名判断——有些白牌 JBOD 也报EMC,但实际不支持 RDAC 协议 - 生产环境上线前,务必模拟单路径拔线,用
multipath -ll和dmesg | grep -i "multipath\|failover"观察是否真触发切换、I/O 是否中断 - 如果阵列同时挂了多个品牌(比如混用 Dell 和 HPE),必须用
devices块按 vendor/product 分别指定 checker,不能全塞进defaults
最常被忽略的一点:checker_timeout 和 polling_interval 的单位不同(秒 vs 毫秒),且前者只对 tur/directio 生效,后者才管 rdac。配错单位或混用场景,问题不会立刻报错,而是等某次存储微中断时才暴露成间歇性超时。










