一、背景:
有两台服务器和一台共享存储,共享存储有添加到两台服务器中,配置了多路径。
二、问题一:
1、执行multipath -ll报错
两台服务器执行multipath -ll,其中一台执行报下面的错误:
[root@localhost ~]# multipath -ll
180968.573566 | /etc/multipath.conf line 18, invalid keyword in the defaults section: ri_min_io
mpathb (3600062b224b0f480319557d49e2c1820) dm-3 BROADCOM,MR9560-8i
size=10T features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 0:3:111:0 sda 8:16 active ready running
180968.604802 | sdc: prio = const (setting: emergency fallback - alua failed)
mpathe (36f4fbb8100e46f63335a98e600000001) dm-4 HUAWEI,XSG1
size=31T features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 15:0:0:1 sdc 8:32 active ready running
180968.605565 | sdd: prio = const (setting: emergency fallback - alua failed)
2、原因分析:
查看/etc/multipath.conf配置文件,具体信息如下:
[root@localhost ~]# cat /etc/multipath.conf
defaults {
user_friendly_names yes
path_checker tur
path_selector "round-robin 0"
path_grouping_policy group_by_prio
failback immediate
no_path_retry 10
ri_min_io 128
polling_interval 8
fast_io_fail_tmo 4
dev_loss_tmo 20
}
devices{
device{
vendor "HUAWEI"
product "XSG1"
hardware_handler "1 alua"
path_checker tur
prio alua
rr_weight priorities
failback immediate
dev_loss_tmo 20
fast_io_fail_tmo 4
no_path_retry 10
}
}
blacklist {
}
语法错误:ri_min_io 关键字无效
原因:第 18 行提示 invalid keyword...: ri_min_io。其实是你将历史版本的 rr_min_io(或 rr_min_io_rq)误拼写成了 ri_min_io。
在Oracle Linux 9的现代多路径版本中,该参数已被底层内置自动优化,无需在 defaults 节中手动配置。
本地盘被错认成多路径设备(mpathb)
隐患:mpathb 的底层是BROADCOM,MR9560-8i(本地 Broadcom RAID 卡)。这块 10.48TB 的磁盘是两台服务器各自私有的本地盘,
由于只连接了一条内部总线,多路径将其聚合为 mpathb 是完全错误的。这会导致后期本地LVM划分和挂载产生路径冲突。
华为共享存储多路径失效(mpathe 的ALUA报错)
致命隐患:提示 sdc: alua failed 且下方的路径组中只看到了sdc一条路径,sdd 报错断开。
后果:华为存储的ALUA(非对称逻辑单元访问)机制没有被系统正确识别。此时多路径实质上已经降级为单路径紧急备用模式。
3、解决方案:
修改/etc/multipath.conf配置文件,使用下面文件替换
[root@localhost ~]# vi /etc/multipath.conf
# ====================================================================
# 1. 全局默认设置 (去除了错误的 ri_min_io,保留并优化了您原本的超时控制)
# ====================================================================
defaults {
user_friendly_names yes
find_multipaths yes
polling_interval 8
}
# ====================================================================
# 2. 核心黑名单 (精确拉黑本地 Broadcom RAID 盘,放行给本地 LVM 管理)
# ====================================================================
blacklist {
devnode "^sd[a-b]$"
}
# ====================================================================
# 3. 华为设备专属微调 (移除了冲突的 hardware_handler,保留您的超时策略)
# ====================================================================
devices {
device {
vendor "HUAWEI"
product "XSG1"
path_grouping_policy multibus
prio const
path_checker tur
path_selector "service-time 0"
failback immediate
no_path_retry 6
fast_io_fail_tmo 5
dev_loss_tmo 30
}
}
# 重启多路径服务以重载配置
[root@localhost ~]# systemctl restart multipathdlsb
# 强行清除之前由于错误配置产生的旧磁盘映射缓存
[root@localhost ~]# multipath -F
# 重新激活和扫描多路径
[root@localhost ~]# multipath -ll
# 排查系统底层是否真的认到了多条路径
[root@localhost ~]# lsblk
# 强制多路径守候进程无条件扫描并聚合所有属于华为存储的磁盘
[root@localhost ~]# multipath -v3
[root@localhost ~]# multipath -ll
三、问题二:
1、执行pvcreate /dev/sda报错
将/dev/sda从多路径中移除后,在使用pvcreate创建PV卷的时候出现下面的报错:
[root@localhost ~]# pvcreate /dev/sda
Cannot use /dev/sda: device is a multipath component
2、原因分析:
在Oracle Linux 9.6(以及RHEL 9系列)中,虽然已经在/etc/multipath.conf中配置了blacklist,但系统内核、Device Mapper、LVM2缓存以及udev数据库中可能仍残留了该
盘属于多路径组件的元数据或绑定关系。此外,OL 9默认启用了LVM盼复管理文件(device file),这也会锁死设备状态。
3、解决方案:
第一步:清理LVM盘符管理文件(OL 9 的关键)
Oracle Linux 9引入了新特性use_devicesfile = 1,LVM会把设备WWID记录在特定文件中。如果是残留导致其被判定为multipath组件,需要将其从LVM设备文件中删除或重新扫入。
1.尝试清空缓存并刷新LVM设备列表
[root@localhost ~]# lvmdevices --deldev /dev/sda
[root@localhost ~]# pvscan --cache
2.如果后续仍旧报错,可以尝试编辑/etc/lvm/devices/system.devices,手动删除里面包含sda的那一行.
pvscan --cache的执行结果没有/dev/sda的信息,所以该步骤跳过。
第二步:清理多路径绑定与WWID残留
多路径服务除了配置文件外,还会在系统盘上固化WWID。
1.彻底清空multipath中的无效路径
[root@localhost ~]# multipath -f sda
[root@localhost ~]# multipath -F
注意:如果提示map in use,说明Device Mapper还在占用它
2.清理WWID记录
检查/etc/multipath/wwids文件,使用文本编辑器(如 vi)打开它,删除包含/dev/sda对应WWID的那一行,然后保存。
# 查看/dev/sda对应WWID的值
[root@localhost ~]# cat /etc/lvm/devices/system.devices
# 这里注释了/dev/sda的行
[root@localhost ~]# vi /etc/multipath/wwids
#/3600062b224b0f480319557d49e2c1820/
3.重启服务并刷新
[root@localhost ~]# systemctl restart multipathd
[root@localhost ~]# multipath -r
第三步:清理 Device Mapper(设备映射)残留
有时多路径已经退出了,但Linux内核的dmsetup依然维持着隐形映射。
1.检查是否有dm映射关联到sda
[root@localhost ~]# dmsetup ls | grep sda
2.如果能查到任何输出(比如叫 mpathX 或带有 sda 的名称),强制将其移除。
[root@localhost ~]# dmsetup remove <查到的映射名称>
注意:此次执行未发现该步骤的对应信息,所以未执行后面的强制删除命令。
第四步:擦除磁盘旧元数据(Wipefs)
如果/dev/sda之前属于多路径,头部可能残留了旧的Device Mapper签名或分区表,导致LVM扫描时误判。
1.强制擦除 /dev/sda 上的所有旧签名
[root@localhost ~]# wipefs -a /dev/sda
2.触发系统重新识别
[root@localhost ~]# partprobe /dev/sda
[root@localhost ~]# udevadm settle
完成上述清理后,重新执行
[root@localhost ~]# pvcreate /dev/sda