Ceph pools define where RADOS objects live and how many copies the cluster keeps. A replicated pool stores full object copies across OSDs, making it the usual choice for RBD images, CephFS metadata, RGW indexes, and small application data where quick recovery matters more than raw capacity savings.

The pool creation command sets the pool name, pool type, and initial placement group count. Current Ceph clusters can also let the PG autoscaler choose or adjust PG counts, but a deliberate starting value is still useful when the workload size and placement plan are known before data is written.

Set the application tag before handing the pool to clients so Ceph health checks do not report an unclassified pool. For a block-image pool, the rbd tag identifies the client stack before images are created, while a small raw RADOS smoke test proves basic pool I/O without replacing workload-specific setup such as rbd pool init.

Steps to create a replicated Ceph 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 already reports degraded, backfilling, remapped, or stuck PGs. A new pool adds placement work to the same OSD set.

  2. Decide the pool name, application, replica policy, and initial PG count.

    The sample pool uses name appdata, application rbd, replica size 3, min_size 2, and pg_num 32. Choose a power-of-two PG count when setting it manually, or omit the count when the PG autoscaler should choose from observed pool usage.

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

    The final replicated argument makes the pool type explicit. If a custom CRUSH rule is required, add the rule name after replicated.

  4. Set the replica count for the pool.
    $ ceph osd pool set appdata size 3
    set pool 7 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 minimum replica count for client I/O.
    $ ceph osd pool set appdata min_size 2
    set pool 7 min_size to 2

    A production 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 the pool application tag.
    $ ceph osd pool application enable appdata rbd
    enabled application 'rbd' on pool 'appdata'

    Use rbd for block images, cephfs for CephFS pools, and rgw for object gateway pools. Workload-specific initialization may still be required after the generic pool exists.

  7. Inspect the pool detail.
    $ ceph osd pool ls detail
    ##### snipped #####
    pool 7 'appdata' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 44 flags hashpspool stripe_width 0 application rbd
    ##### snipped #####

    The target line should show the pool name, replicated type, size, min_size, pg_num, pgp_num, autoscale mode, and application tag.

  8. Write a small smoke-test object to the pool.
    $ rados -p appdata put smoke-object /etc/hostname

    The object write tests raw RADOS I/O only. For an RBD pool, continue with rbd pool init before creating images.

  9. Confirm the smoke-test object exists.
    $ rados -p appdata stat smoke-object
    appdata/smoke-object mtime 2026-06-29T06:58:44.000000+0000, size 10
  10. Remove the smoke-test object.
    $ rados -p appdata rm smoke-object