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.
Related: How to create an erasure-coded pool in Ceph
Related: How to set a quota on a Ceph pool
Related: How to create a Ceph RBD 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.
Related: How to check Ceph cluster health
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.
Related: How to enable the Ceph PG autoscaler
$ 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.
$ 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.
$ 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.
$ 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.
$ 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.
$ 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.
Related: How to create a Ceph RBD pool
$ rados -p appdata stat smoke-object appdata/smoke-object mtime 2026-06-29T06:58:44.000000+0000, size 10
$ rados -p appdata rm smoke-object