Linux多路径配置的核心,是安装device-mapper-multipath工具、编写multipath.conf、启动multipathd服务并验证聚合状态。配置成功后,多条物理链路会合并为一个虚拟设备,光纤链路断了也不影响业务读写,干运维的人都清楚,这一步不搞定,SAN存储就是管理员的噩梦。
什么场景需要Linux多路径配置
生产服务器通常配两块以上HBA卡,分别接到两台光纤交换机,存储阵列再同时映射同一个卷,操作系统并不会自动变聪明,它会看到两个一模一样的盘,比如/dev/sdb和/dev/sdc,里面存的是同一份数据。
- 直接在单块盘上建文件系统,链路故障时写入直接卡死
- 两条链路轮着写,还会把文件系统写坏
- 重启设备后盘符顺序变化,挂载点找不到数据
云主机场景就不太一样,多数云服务器的系统盘挂的是单链路虚拟磁盘,不需要做多路径,做linux多路径配置前先确认一下有没有多块HBA卡或iSCSI多会话,别为了配置而配置。
linux多路径multipath配置步骤
整个配置流程不需要重启系统,按顺序执行即可,我习惯先看盘,再改配置,最后验证,这顺序能省掉不少排查时间。
第一步:确认路径数量
用lspci看主机总线适配器数量,用multipath -ll观察现有映射,刚装好的系统一般没有任何多路径映射,没关系,这正是配置前该有的样子。
第二步:安装并启动多路径服务
CentOS/RHEL系执行:
yum install -y device-mapper-multipath
Debian/Ubuntu系执行:
apt install -y multipath-tools
装好后运行:
systemctl enable --now multipathd
第三步:生成并编写multipath.conf
用mpathconf --enable生成基础配置,然后手动改/etc/multipath.conf,最小可用配置长这样:
defaults { user_friendly_names yes find_multipaths no polling_interval 10 } multipaths { multipath { wwid "36001405f1234abcd5678" alias data01 } }
wwid是盘的全球唯一标识,获取命令:
/lib/udev/scsi_id -g -u /dev/sdb
也可以登录存储管理界面查看该卷的序列号。
第四步:刷新服务并验证
multipath -r
multipath -ll
能看到mpath或data01设备,说明聚合完成,再用lsblk检查,/dev/mapper/data01就是以后所有操作的对象,别再碰/dev/sdX。
华为存储linux多路径配置的注意点
华为存储有两种多路径方案,一是操作系统自带DM-Multipath,二是华为自家UltraPath。华为存储linux多路径配置最容易踩坑的地方就在这俩选哪个。
- 只做链路聚合和故障切换,用DM-Multipath就够了
- 需要华为存储的高级负载均衡策略,装UltraPath
- 装了UltraPath之后会接管multipathd,两条腿走路反而会出问题
如果选择UltraPath,安装完跑upadmin show vlun确认链路状态,用原生多路径时,确保同一LUN映射到Linux的wwid一致,存储侧不要乱改LUN的ID字段。
linux多路径聚合失效排查路线
配置完成后发现multipath -ll只显示一条路径,别急着重启,按下面顺序查。
检查服务状态
systemctl status multipathd
服务挂了就启动,配置文件写错了multipathd也会拒绝加载。
核对multipath.conf中的wwid
sda和sdb如果wwid不一致,多路径不会把它们合并,拿新建的LUN单独查一次scsi_id,多数配置问题都出在拷贝wwid时多了空格。
查看内核日志和路径状态
dmesg | grep scsi
multipath -v3 -d /dev/sdb
日志里能看到路径是active还是failed。failed

就检查光纤交换机端口的Zone配置,以及存储侧的映射关系是否漏了HBA卡的WWN。
linux多路径盘符漂移问题
系统重启后/dev/sdb变成/dev/sdc,这类事故在无盘符绑定控制的机器上很常见,多路径帮我们解决了大半,真正顽固的问题出在应用直接读取/dev/sdX路径。
- 在multipath.conf配置
alias固定别名 - 用
/dev/mapper/别名挂载文件系统 - 挂载表里使用UUID或
/dev/disk/by-uuid路径
linux多路径盘符漂移的完整防护是三层:wwid识别物理盘、alias固定多路径设备名、文件系统用UUID挂载,三层都做齐,拔盘重插、系统重启都稳如泰山。
linux多路径和LVM配合的先后顺序
多路径和LVM从功能上看并不冲突,硬要比哪个更基础,多路径在前,LVM在后,标准顺序是:
pvcreate /dev/mapper/data01
vgcreate vg_data /dev/mapper/data01
lvcreate -L 500G -n lv_home vg_data
mkfs.ext4 /dev/mapper/vg_data-lv_home
mount /dev/mapper/vg_data-lv_home /home
别在/dev/sdb上直接建PV,盘符信息不持久,但多路径映射名持久,在映射名上建LVM,重启后VG照常激活。
个别人群会问存储多路径和LVM哪个更优,答案很简单:多路径负责把路走稳,LVM负责把空间切好,两个搭着用才是生产标准。
多路径配置项参考与基础设施调优
| 配置项 | 推荐值 | 说明 |
|---|---|---|
find_multipaths |
no | 显式匹配所有需要合并的路径 |
user_friendly_names |
yes | 生成易读的mpath名称 |
path_grouping_policy |
multibus | 所有路径参与负载均衡 |
failback |
immediate | 故障恢复后自动切回优选项 |
no_path_retry |
5 | 无可用路径时重试5次 |
polling_interval |
10 | 路径检查间隔,单位秒 |
存储高带宽场景建议把IO调度器改为none或mq-deadline:
echo none > /sys/block/sda/queue/scheduler
顺序执行完这些操作,多路径的可靠性才真正闭环,业内专家指出,多路径的价值不在性能而在可用性链路断了业务不中断,这才是它存在的意义。
Q&A:linux多路径配置常见问题
配置完发现/dev/mapper目录下没有聚合设备怎么办?
先确认multipathd服务是否正常运行,再检查multipath.conf里wwid是否与scsi_id输出一致,如果find_multipaths设为yes,部分内核版本需要先执行multipath -r强制重扫,最后用multipath -ll观察,不出现设备就执行multipath -v3 -d /dev/sdb逐个路径排查。
多路径配置和直接格式化/dev/sdb有什么区别?
直接格式化单块盘意味着只绑定了一条物理链路,光纤故障时该盘立即不可用,多路径把两个HBA卡对应的路径合并成一个虚拟设备,底层驱动会自动切换,应用层完全感知不到链路变化,生产环境里LUN宿主机宕机的概率比链路故障低得多,多路径就是兜住这层底。
CentOS多路径配置和Debian系服务器差异大吗?
两者核心机制一致,都依赖dm_multipath内核模块和multipathd守护进程,区别仅在包管理器:CentOS用device-mapper-multipath,Debian系叫multipath-tools,配置文件和命令完全相同,跨发行版维护场景,按包名适配即可,不必重新学一套东西。
多路径配置其实没有复杂逻辑,把映射关系整理清楚,用稳定标识绑定设备,让系统知道哪几条路通向同一个磁盘,之后就永远不用在重启后对着丢失的挂载点叹气。


