You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除Cinder卷报错“image still has watchers”的原因及解决方法咨询

残留Watcher导致RBD镜像无法删除的原因

RBD镜像的Watcher是Ceph RADOS层为实现客户端会话管理、镜像访问互斥、状态同步设计的机制:正常场景下Cinder挂载卷到计算节点、或客户端执行rbd map操作时,librbd客户端会为目标镜像注册Watcher,卷正常卸载/取消映射时客户端会主动通知集群注销Watcher。
出现残留Watcher的常见场景包括:

  • 卷挂载节点(计算节点/cinder-volume服务节点)的nova-compute/cinder-volume服务异常崩溃,未触发正常的Watcher注销流程
  • 客户端节点与Ceph集群网络闪断,会话中断后集群未在超时周期内自动回收失效Watcher
  • OpenStack侧卷状态异常(卡在attaching/error/deleting等状态),平台未触发正常的卷资源释放逻辑
  • 手动映射RBD卷后未执行取消映射操作直接退出客户端进程

残留Watcher场景下删除目标卷的操作步骤

操作前务必确认目标卷已无业务使用,强制清理正在使用的Watcher会导致读写IO失败、数据损坏

步骤1:优先尝试正常释放Watcher

首先登录Watcher对应的节点(你场景中为172.18.0.1)执行以下操作:

  • 检查是否有该卷的映射记录:
    rbd showmapped | grep ${volume-id}
    
    存在映射的话先执行取消映射:
    rbd unmap ${pool}/${volume-id}
    
  • 检查是否有进程占用该卷相关的设备:
    lsof /dev/rbd/${pool}/${volume-id}
    
    确认进程为无效残留的话可以手动结束进程,等待10s后Watcher会自动释放。
  • 也可以等待Ceph默认的30s客户端会话超时时间,确认超时后Watcher自动清理再尝试删除卷。

步骤2:手动清理残留Watcher

如果节点已经下线、或正常释放操作无效,执行以下命令手动清理Watcher:

适配Ceph Octopus(V15.2.+)及以上版本

使用rbd status输出的client ID和cookie参数执行清理:

rbd watchers rm ${pool}/${volume-id} --client-id 230016780 --cookie 94001004445696

适配低版本Ceph

先查询镜像对应的header对象:

rbd info ${pool}/${volume-id} | grep block_name_prefix
# 输出格式类似:block_name_prefix: rbd_data.xxxxxxxxxxxxxxx,对应的header对象为rbd_header.xxxxxxxxxxxxxxx

执行Watcher清理:

rados rmwatchers ${pool}/rbd_header.${volume-id} 172.18.0.1:0/523356342

步骤3:验证并删除卷

执行rbd status ${pool}/${volume-id}确认Watcher已完全清理后,执行删除操作:

rbd rm ${pool}/${volume-id}

如果OpenStack侧该卷状态异常,先重置状态再从平台侧删除:

cinder reset-state --state available ${volume-id}
cinder delete ${volume-id}

内容的提问来源于stack exchange,提问作者Corey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:27:06