multipath -ll为空的直接原因是默认黑名单禁用所有设备,须先删除devnode "*"黑名单、启用user_friendly_names、排除系统盘WWID,并执行multipath -F && multipath -v2重载扫描。

不改 /etc/multipath.conf,multipathd 默认把所有设备拉进黑名单,multipath -ll 永远为空——这是 90% 初次配置失败的直接原因。
为什么 multipath -ll 一直输出空,或者只显示 control?
这不是服务没起来,而是 multipathd 根本没看到可用路径。最常见原因是默认配置里写了 devnode "*" 黑名单,等于“禁止一切”。日志里会明确打印 /etc/multipath.conf does not exist, blacklisting all devices,这不是警告,是直接拒绝工作。
- 先确认内核模块已加载:
lsmod | grep dm_multipath,无输出就运行modprobe dm_multipath并加到/etc/modules或/usr/lib/modules-load.d/multipath.conf - 检查软件包是否装全:
rpm -qa | grep device-mapper-multipath(RHEL/CentOS)或dpkg -l | grep multipath-tools(Debian/Ubuntu) - 用
multipath -v2手动触发扫描,它会逐行输出匹配过程,重点看有没有blacklisted或skip: no path - 别依赖
mpathconf --enable生成的配置——它常带残缺黑名单,建议删掉整个devnode_blacklist块再重写
最小可用的 /etc/multipath.conf 怎么写?
新手被默认配置吓退,其实生产起步只需 4 行有效配置,其余全注释或删掉。关键不是堆参数,而是解除封锁、启用识别、排除系统盘。
- 必须取消注释并设为
yes:user_friendly_names yes,否则设备名是随机哈希如mpath-36005076b... - 注释掉整段
devnode_blacklist { devnode "*" },否则所有 SCSI 设备都被拒之门外 - 在
blacklist块里明确排除系统盘,例如:devnode "^sda"或更稳妥地用 WWID:wwid "36000c29263f724bede70506b10bce244"(用/usr/lib/udev/scsi_id -g -u -d /dev/sda获取) - 如果知道存储厂商型号(如 IBM、NETAPP、HUAWEI),加一段
devices配置可提升路径识别稳定性,vendor和product必须与scsi_id -g -u -d /dev/sdb输出完全一致(大小写敏感)
multipath -F && multipath -v2 为什么非执行不可?
改完配置文件后,multipathd 不会自动重载规则,也不会主动重新探测 SCSI 总线。不执行这组命令,变化永远不生效。
-
multipath -F清除旧的映射关系,避免残留 ghost 设备干扰 -
multipath -v2强制重新扫描并应用新配置;-v3会输出冗余调试信息,反而掩盖关键匹配失败点 - 执行后立即验证:
multipath -ll应出现类似mpathb (36005076b...) dm-3 IBM,2145的条目,且各路径状态为active或failed(而非[undef]) - 若仍为空,检查
systemctl status multipathd是否报错,常见原因是配置文件语法错误(比如漏了})或dm_multipath模块未加载
怎么让 /dev/mapper/mpathb 这种名字重启不变?
/dev/mapper/mpath* 是动态生成的,重启后字母可能变(mpathb → mpatha)。真正稳定的是 WWID,但太长难记。靠 /var/lib/multipath/bindings 绑定别名才是生产做法。
- 首次运行
multipath -v2后,/var/lib/multipath/bindings会自动生成,内容形如:mpathb 36005076b08164f4011ae88b23efb95fe - 想固定为
asm_data,需在multipaths块中显式定义:multipath { wwid "36005076b..." alias "asm_data" } - 别用
user_friendly_names no+ 硬编码mpatha——这会让多个设备竞争同一个名字,导致映射混乱 - 绑定后,设备节点变为
/dev/mapper/asm_data,这才是挂载、LVM 或 Oracle ASM 应该引用的路径
真正麻烦的不是配置本身,而是路径状态不一致:某条路径在 multipath -ll 里显示 active,但 path_checker 实际探活失败,结果 I/O 卡住几秒才切走。这种问题只能靠 multipath -v2 日志逐行比对,没法靠重启解决。


















