Ceph RBD snapshots preserve the state of a block image at a specific point in time so a risky change can be tested without losing the previous disk contents. They are useful before package upgrades, application migrations, VM template changes, or any operation where a rollback or clone may be needed.

An RBD snapshot is created from an admin host with rbd snap create and identified as pool/image@snapshot. Ceph stores the snapshot as a read-only checkpoint over the existing image, so creating it is fast, but the snapshot reflects only the write state visible to the cluster at that instant.

RBD does not understand the file system inside the image. Freeze the mounted file system, stop the virtual machine, or use a guest-agent freeze before the snapshot when application-level consistency matters, then unfreeze writes immediately after the snapshot is created.

Steps to create a Ceph RBD snapshot:

  1. Check cluster health before snapshotting the image.
    $ ceph -s
      cluster:
        id:     11111111-2222-3333-4444-555555555555
        health: HEALTH_OK
    
      services:
        mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3
        mgr: ceph-node1(active), standbys: ceph-node2
        osd: 9 osds: 9 up, 9 in
    
      data:
        pools:   4 pools, 96 pgs
        objects: 262.15k objects, 1.1 TiB
        usage:   3.4 TiB used, 56 TiB / 60 TiB avail
        pgs:     96 active+clean

    Delay the snapshot when the cluster reports degraded, backfilling, remapped, or stuck PGs. A snapshot records image state, but it does not fix unhealthy placement or incomplete recovery.

  2. Check which clients have the image open.
    $ rbd status rbd/vm-100-disk-0
    Watchers:
        watcher=192.0.2.21:0/4213 client.314159 cookie=18446462598732840961

    The watcher line identifies an active librbd or kernel RBD client. Coordinate the freeze or stop operation on the client that owns the mounted file system, VM disk, or application workload.

  3. Freeze writes from the client that mounts the image.
    $ sudo fsfreeze --freeze /mnt/rbd-data

    Run fsfreeze on the client host that has the file system mounted. Skip this step when rbd status shows no watchers, or use the hypervisor's qemu-guest-agent freeze mechanism when the image is attached to a virtual machine.

    Keep the freeze window short. Applications that write to the frozen file system can block until it is unfrozen.

  4. Create the snapshot from the Ceph admin host.
    $ rbd snap create rbd/vm-100-disk-0@before-upgrade

    No output indicates the snapshot was created. The snapshot specification is pool/image@snapshot; use a snapshot name tied to the protected change, such as before-upgrade.

  5. Unfreeze writes after the snapshot command returns.
    $ sudo fsfreeze --unfreeze /mnt/rbd-data

    Restart the paused workload or thaw the virtual machine guest at the equivalent point when fsfreeze was not the freeze mechanism.

  6. List snapshots on the image and confirm the new name appears.
    $ rbd snap ls rbd/vm-100-disk-0
    SNAPID  NAME            SIZE    PROTECTED  TIMESTAMP
    12      before-upgrade  64 GiB             Mon Jun 29 07:12:44 2026

    Leave the snapshot unprotected unless it will become a clone parent. rbd snap protect rbd/vm-100-disk-0@before-upgrade prevents deletion until the snapshot is unprotected and any child clones are removed.