How to create a Ceph RBD pool

A Ceph RBD pool is the RADOS storage area where block images, snapshots, and clones store their objects. Creating a dedicated pool before hosts, hypervisors, or orchestration platforms provision disks keeps block workloads separated from general application pools and lets the pool carry RBD metadata from the beginning.

RBD uses a replicated pool, then rbd pool init writes the metadata needed by the block-device tools. The pool can use the PG autoscaler like other replicated pools, but the replica policy, min_size, and placement assumptions still need to fit the cluster's failure domain and capacity budget.

Create the pool after ceph -s reports HEALTH_OK and enough OSDs are up and in for the intended replica count. The pool name rbd is common because many clients default to it, while a workload-specific name such as vms is better when block images need separate quotas, CRUSH rules, or client caps.

Steps to create a Ceph RBD pool:

  1. Check cluster health before adding the pool.
    $ 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:   3 pools, 73 pgs
        objects: 262.15k objects, 1.1 TiB
        usage:   3.4 TiB used, 56 TiB / 60 TiB avail
        pgs:     73 active+clean

    Delay pool creation when the cluster reports degraded, backfilling, remapped, or stuck PGs. A new pool adds placement work to the same OSD set.

  2. Decide the pool name, replica policy, and PG handling.

    The sample uses pool rbd, replica size 3, min_size 2, and starting pg_num 32. Keep the PG autoscaler on unless the pool has a deliberate manual PG plan.
    Tool: Ceph Storage Capacity Calculator

  3. Create the replicated pool.
    $ ceph osd pool create rbd 32 replicated
    pool 'rbd' created

    Use a power-of-two starting PG count when setting one manually. Omit custom CRUSH-rule arguments unless the RBD workload has a separate placement rule already tested for the target OSD class or failure domain.

  4. Set the pool replica count.
    $ ceph osd pool set rbd size 3
    set pool 4 size to 3

    The size value includes the primary copy. A size of 3 keeps three total object copies when enough OSDs are available.

  5. Set the pool minimum replica count.
    $ ceph osd pool set rbd min_size 2
    set pool 4 min_size to 2

    A production RBD pool with size 2 or min_size 1 can acknowledge writes with too little redundancy. Use those values only for a documented emergency or disposable test cluster.

  6. Enable PG autoscaling for the new pool.
    $ ceph osd pool set rbd pg_autoscale_mode on
    set pool 4 pg_autoscale_mode to on

    Use warn instead of on when PG count changes require manual approval. Add target_size_ratio or target_size_bytes only when the expected pool share is known before real data arrives.

  7. Initialize the pool for RBD.
    $ rbd pool init rbd

    No output indicates the pool metadata was initialized successfully.

    Do not use --force to override another application tag on a production pool unless the pool was deliberately prepared for RBD and no other workload still owns it.

  8. Inspect pool detail and confirm the RBD application tag.
    $ ceph osd pool ls detail
    pool 4 'rbd' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 51 flags hashpspool stripe_width 0 application rbd

    The target line should show the pool name, replicated type, size, min_size, autoscaler mode, and application rbd.

  9. Create a small RBD smoke-test image.
    $ rbd create --size 64 rbd/pool-check

    The --size value is in MiB unless another unit is supplied. The smoke-test image proves the initialized pool accepts RBD image metadata before clients depend on it.

  10. List images in the RBD pool.
    $ rbd ls rbd
    pool-check
  11. Remove the smoke-test image.
    $ rbd rm --no-progress rbd/pool-check

    No output indicates the temporary image was removed.