apache / apache/cloudstack

Unable to Expunge Mirrored RBD Image from Cloudstack

未關閉
#12,761 3 則留言 2 個 reaction 已指派 0 人 在 GitHub 檢視
component:ceph component:primary-storage Severity:Minor type:bug
主要語言
Java
星號
3.1k
分支
1.4k
平均合併
7 天 14 小時
30 天內合併 PR
31

描述

### problem

I'm running into an issue in Cloudstack where when using ceph RBD as primary storage, and having snapshot-based mirroring in Ceph, I cannot delete and expunge the image without manually disabling mirroring:
```
Request failed. (530)
Failed to expunge the volume Volume {"id":1751,"instanceId":null,"name":"TV-REP-02","uuid":"6ad0914e-9172-45d3-87a0-1f34661b1d3f","volumeType":"DATADISK"} in Primary data store : com.cloud.utils.exception.CloudRuntimeException: com.ceph.rbd.RbdException: Failed to find out if snapshot .mirror.primary.625a7cf1-1946-48a3-8fc3-5a4de98bec29.b8365252-c64b-4862-850b-cb29e333ceb7 is protected - No such file or directory
```

### versions

ACS: 4.22.0.0
KVM: Ubuntu 22.04
Ceph: version 18.2.7 (6b0e988052ec84cf2d4a54ff9bbbc5e720b621ad) reef (stable)

### The steps to reproduce the bug

1. Create a disk image in Cloudstack on the RBD storage pool
2. Enable mirroring on the image in ceph
3. Either define a schedule for snapshots at the pool level, define a snapshot schedule for the image itself, or manually initiate a snapshot of the image in ceph
4. Attempt to delete the image in Cloudstack with the expunge flag enabled (or without, it will just fail to delete it later)
5. Get the error
`Failed to find out if snapshot is protected - No such file or directory`

### What to do about it?

It would be excellent if when trying to delete an RBD image from Cloudstack if the command could be passed through first determine whether or not mirroring is enabled, and if so, disable it prior to attempting to delete it:
```
rbd info /
rbd mirror image disable /
```
And then run the actual delete command.

So for example, if the image ID is `df1e2a8b-00ff-4854-b2d4-f8a2d685fa1e'`:
```
root@ceph:/# rbd info cloudstack/df1e2a8b-00ff-4854-b2d4-f8a2d685fa1e
rbd image 'df1e2a8b-00ff-4854-b2d4-f8a2d685fa1e':
size 25 GiB in 6400 objects
order 22 (4 MiB objects)
snapshot_count: 2
id: 3ad0e7be094cd5
block_name_prefix: rbd_data.3ad0e7be094cd5
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling
op_features:
flags:
create_timestamp: Fri Mar 6 20:14:52 2026
access_timestamp: Fri Mar 6 20:14:52 2026
modify_timestamp: Fri Mar 6 20:14:52 2026
journal: 3ad0e7be094cd5
mirroring state: enabled
mirroring mode: snapshot
mirroring global id: a29acb3e-0d54-4de9-ac62-c98e435462ca
mirroring primary: true

root@ceph:/# rbd mirror image disable cloudstack/df1e2a8b-00ff-4854-b2d4-f8a2d685fa1e
Mirroring disabled
```

It would also be excellent to include an option to enable mirroring on an image when it's created in Cloudstack, but that's a little bit outside of the scope of this issue.

貢獻指南

開啟貢獻指南

研究方向

首先,使用列出的 CloudStack、KVM 和 Ceph 版本,重現 Ceph RBD 主要儲存的 delete 和 expunge 流程。追蹤刪除前如何處理鏡像狀態和受保護的快照,然後驗證具有以快照為基礎的鏡像功能的 RBD 映像可以被刪除和 expunge,且不會出現回報的缺少快照錯誤。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
java
領域
cloud, infrastructure
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
冷清
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。