OpenStack 在线扩容卷超时问题
背景
最近发现,本系统OpenStack私有云上,ARM主机的麒麟V10系统上,云主机磁盘云硬盘扩容时,出现multipath resize命令时常超时,现象如下:

分析
我们简单梳理下,SAN或IP-SAN 存储环境下,云主机的磁盘在线扩容流程:
- Cinder调用存储驱动,扩容存储上云硬盘对应的逻辑卷
- 通知 Nova 云硬盘扩容完成
- Nova 计算节点调用os-brick, 扩容节点上对应磁盘 (重新扫描,如启用multipath,需resize mpath设备)
- Nova 调用 Libvirt的 blockResize 方法,调整云主机内部的磁盘大小
当前问题其实就出现在第三步骤,Nova-Compute调用 os-brick的extemd_volume方法完成本节点上磁盘的扩容,调用方法如下:
https://opendev.org/openstack/os-brick/src/branch/stable/2025.2/os_brick/initiator/linuxscsi.py
在启动muitipath特性后,本地磁盘扩容逻辑会调用multipathd命令,确保扩容mpath磁盘扩容,
依次执行的命令如下:
- multipathd reconfigure
- multipathd resize map xxx
if use_multipath:mpath_device = self.find_multipath_device_path(scsi_wwn)if mpath_device:# Force a reconfigure so that resize worksself.multipath_reconfigure() # multipathd reconfiguresize = utils.get_device_size(self, mpath_device)...self.multipath_resize_map(os.path.realpath(mpath_device)) ...
multipathd reconfigure 命令是异步命令,实测发现该命令在设备较多的ARM环境上耗时较长(主要作用是加载内核逻辑设备,重新构建多路径信息)。导致立即执行的multipathd resize map 命令陷入阻塞,出现超时错误。(默认命令4000ms超时)

解决办法
- 加入重试机制
- 调整multipath配置中的uxsock_timeout时间,从默认4s到10s。
