Skip to main content
RunBook Academy

CephXXXIX · RBD TroubleshootingRBD Troubleshooting

When an image will not open

Advanced⏱ ~17 minrbdceph

What you'll learn

  • Map each error message to its cause
  • Check cluster health before image-specific investigation
  • Diagnose a missing or renamed image
  • Handle an image whose watchers block access

Prerequisites

None — start here.

Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18

Not yet marked complete on this device.

Why this matters in production

The error messages are specific and are usually skimmed. Each names a different problem with a different fix, and reading the exact text before starting the investigation saves most of the investigation.

Check the cluster first

ceph -s
ceph health detail

If PGs are inactive, the image is unavailable because its data is, and no amount of image-level investigation helps. Rule this out in one command before anything else.

The four messages

rbd: error opening image: (2) No such file or directory

The image name is not in the pool’s directory. Causes: wrong pool, wrong name, the image was renamed, or it was deleted.

POOL=rbd-vms
ID=12
rbd ls ${POOL}
rbd ls ${POOL} --long
rbd trash ls ${POOL}          # deleted but recoverable
rbd trash restore ${POOL}/${ID}

The trash is worth checking — rbd rm moves images there with a delay on many configurations, so a recent deletion may be recoverable.

rbd: image uses unsupported features: 0x38

The client cannot handle the image’s feature set. Almost always a kernel RBD client against an image with modern features.

POOL=rbd-vms
IMAGE=vm-disk-01
rbd info ${POOL}/${IMAGE} | grep features
rbd feature disable ${POOL}/${IMAGE} object-map fast-diff

rbd: error opening image: (1) Operation not permitted

A capability problem. The credential lacks access to this pool, or to the data pool of an image using --data-pool.

NAME=acme
PATH=/mnt/cephfs/projects
POOL=rbd-vms
IMAGE=vm-disk-01
ceph auth get client.${NAME}
rbd -n client.${NAME} --keyring ${PATH} info ${POOL}/${IMAGE}

rbd: error opening image: (30) Read-only file system or a hang

The pool is full, or the PGs are inactive. Back to ceph -s.

Watchers blocking exclusive access

POOL=rbd-vms
IMAGE=vm-disk-01
rbd status ${POOL}/${IMAGE}
# Watchers:
#   watcher=10.20.0.55:0/1234567 client.4152 cookie=1

Another client holds the image. If that client is genuinely gone — a crashed host — the lock can be broken:

POOL=rbd-vms
IMAGE=vm-disk-01
LOCK_ID=12
LOCKER=locker
rbd lock ls ${POOL}/${IMAGE}
rbd lock rm ${POOL}/${IMAGE} ${LOCK_ID} ${LOCKER}

Break a lock only after confirming the holder is truly dead. Two writers on one image corrupts it immediately.

Quiz

Knowledge check · 4 questions

  1. Q1. `rbd map` returns "image uses unsupported features: 0x38". What is the first action?

  2. Q2. An image removed with `rbd rm` is always immediately and permanently gone.

  3. Q3. Work an image-unavailable report efficiently.

    At 02:00 an on-call engineer is paged: a production VM will not start because its RBD image cannot be opened. The exact error text is in the alert but has not been read carefully.

  4. Q4. Why must a watcher be confirmed dead before breaking an RBD lock?

Passing score: 75%. Answers are checked in this browser.

Production discipline

Read the exact error text before beginning any RBD availability investigation — the four common messages point at four unrelated causes and each has a different first command. Add rbd trash ls to the deleted-image response; the recovery window is short but the check is free.

Cross-course references

  • Kubernetes: distinguishing a Pod scheduling failure from an image pull failure is the same read-the-message discipline
  • Linux: mount errors are similarly specific and similarly skimmed