共享块存储因 lvmlock result -28 导致资源操作失败
问题说明
当 lvmlockd 中累积大量 LV 锁历史信息后,lvmlockctl 的输出可能超过缓冲区限制并出现 result -28。平台可能因此无法获取完整的 VG lockspace 信息,导致需要执行 LVM 变更的资源操作失败。
现象
- 创建云盘快照失败。
- 云主机克隆、云盘扩容或其他涉及 LVM 变更的资源操作失败。
- 日志可能出现
lvmlockctl result -28、无法找到 VG lockspace,或 LV 无法停用等错误。 - 共享块主存储实际可访问,但部分资源操作无法继续执行。
适用环境
- 产品:ZStack Cloud。
- 存储类型:共享块存储(SharedBlock)。
- 受影响版本:未包含
lvmlock自动检测及恢复优化的平台版本,例如 5.3.x。 - 组件:物理机上的
lvmlockd、sanlock和 LVM lockspace。
判断方法
在报错关联的物理机上,由 ZStack 技术支持检查:
lvmlockctl -i | head
lvmlockctl -i | wc -l
systemctl status sanlock lvmlockd
sanlock status
若 lvmlockctl 返回 result -28,或无法查询到应存在的 VG lockspace,可结合管理节点日志和物理机日志确认是否属于本问题。
原因说明
lvmlockctl dump buffer 的容量有限。当 lvmlockd 累积大量 LV 锁历史信息时,查询输出可能超过限制并被截断。平台因此无法读取完整的 VG lockspace 信息,进而影响快照、扩容、克隆及其他涉及 LVM 状态变更的操作。
处理建议
临时恢复方案
Note:
警告:以下命令会中断物理机的共享存储锁服务。必须由 ZStack 技术支持在获批的维护窗口内执行。执行前必须关闭全局云主机高可用(VM HA),确认操作物理机及受影响 VG,并评估该物理机上运行中的云主机。不要在 HA 开启时直接执行。
- 在 ZStack 管理界面关闭全局云主机高可用(VM HA),并确认配置已生效。
- 记录当前云主机运行位置、VG、LV 和锁状态。
- 在受影响的物理机上重置锁服务:
pkill -9 sanlock
pkill -9 lvmlockd
systemctl start sanlock
systemctl start lvmlockd
- 对每个受影响的共享块 VG 恢复 lockspace。将
<VG_UUID>替换为实际的共享块主存储 VG UUID:
vgchange --lock-start <VG_UUID>
如涉及多个 VG,需使用各自的 VG UUID 分别执行:
vgchange --lock-start <VG_UUID_1>
vgchange --lock-start <VG_UUID_2>
- 完成验证后,按照变更计划恢复全局 VM HA。
长期解决方案
将平台升级到包含 lvmlock 处理优化的版本。生产稳定版本线建议升级到 ZStack Cloud 5.4.12。
该版本可由平台检测相关 lvmlockctl 缓冲区异常,并自动恢复 lvmlockd;恢复期间不重启 sanlock,并保留现有 sanlock 锁状态,从而避免针对该异常进行人工锁服务重置。实际目标版本应在完成客户环境评估后确认。
验证方法
执行以下检查,确认锁服务及 VG lockspace 已恢复:
systemctl status sanlock lvmlockd
lvmlockctl -i | head
sanlock status
sanlock和lvmlockd均为运行状态。lvmlockctl -i不再返回result -28。- 受影响 VG 的 lockspace 可正常查询。
- 在确认锁状态正常后,重新执行原失败操作,例如创建快照,并确认操作成功。
关联信息
- 生产稳定版本建议:ZStack Cloud 5.4.12。
