CephClusterGuide
Isometric blue platform holding pink cube blocks in dashed outlined slots, evoking storage pools in a cluster, set in a dark circle on a pink background
operations

Ceph Show Pools: Commands to List and Inspect Pools

Ceph has no show pools command. Use ceph osd pool ls detail, ceph df and autoscale-status to list pools, read their settings and check usage.

By CephClusterGuide Editorial · · 8 min read

There is no literal ceph show pools command. To list pools, run ceph osd pool ls for names only, ceph osd lspools for names with IDs, or ceph osd pool ls detail for replica size, PG count, CRUSH rule and application per pool. For usage per pool, run ceph df.

Run these wherever ceph status already works: a host with the admin keyring, or inside cephadm shell on a cephadm-managed cluster. All of them are read-only, so they are safe on a degraded cluster at 2 a.m., which is when most people go looking for them.

Which command shows Ceph pools?

ceph osd pool ls detail is the one worth memorising: it prints every pool on one line with its ID, type, replica count, min_size, CRUSH rule, PG count, autoscale mode and application tag. The other commands are narrower slices of the same pool map, or they add usage and I/O figures the pool map does not carry.

CommandWhat it showsUse it when
ceph osd pool lsPool names onlyScripting and loops
ceph osd lspoolsPool ID and nameMatching a PG ID to its pool
ceph osd pool ls detailFull settings per poolAuditing size, rules, PGs
ceph dfStored, objects, used, %used, max availCapacity questions
ceph df detailAdds quotas, compression, data vs omapFinding where space went
rados dfPer-pool usage and object countsCross-checking ceph df
ceph osd pool statsI/O per poolFinding the busy pool
ceph osd pool autoscale-statusPG autoscaler viewPG count warnings
ceph osd pool get <pool> allEvery parameter for one poolDeep dive on one pool

The Ceph pool operations documentation covers the three listing forms and recommends plain ceph osd pool ls for scripting. Its lspools sample looks like this:

$ ceph osd lspools
1 .rgw.root
2 default.rgw.log
3 default.rgw.control
4 default.rgw.meta

The ID matters: every placement group ID starts with its pool ID, so when ceph health detail complains about PG 3.1f, pool 3 is the one in trouble.

How do you read ceph osd pool ls detail?

Read it left to right: pool ID and name, type, size and min_size, CRUSH rule ID, PG counts, autoscale mode, flags and application. Here is one line from the documentation’s sample cluster, wrapped for width:

pool 1 '.rgw.root' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins
    pg_num 32 pgp_num 32 autoscale_mode on last_change 19 flags hashpspool
    stripe_width 0 application rgw read_balance_score 4.00
  • replicated is the type. Erasure-coded pools show erasure plus the profile name, and their size is k+m.
  • size 3 min_size 1 means three copies in total, with I/O continuing while at least one is up.
  • crush_rule 0 is the rule by numeric ID. Map it to a name with ceph osd crush rule dump. The current ceph man page also lists a --show-rule-names option for ceph osd pool ls; older releases may lack it.
  • pg_num 32 pgp_num 32 is the placement group count. If the two differ, a PG change is still being applied.
  • autoscale_mode on means the PG autoscaler manages this pool.
  • application rgw is the application tag: rbd, cephfs, rgw or a custom name.

That min_size 1 in the docs’ sample deserves a second look if you find it on your own three-replica pools. It lets the pool keep accepting writes with a single surviving copy, which is the setup that turns one more dead disk into lost data. The conventional pairing is size 3 with min_size 2; the reasoning is in how Ceph places data with pools, PGs and CRUSH.

For scripts, ask for JSON rather than splitting the text on spaces. The --format (or -f) option takes json, json-pretty, xml or xml-pretty:

ceph osd pool ls detail -f json-pretty
ceph osd pool ls detail -f json | jq -r '.[] | [.pool_name, .size, .min_size, .pg_num] | @tsv'

What is the .mgr pool in my pool list?

.mgr is Ceph’s own pool, holding state for the manager daemon’s modules, and you should leave it alone. The Quincy 17.2.0 release notes say the old device_health_metrics pool was renamed .mgr, became a common store for all ceph-mgr modules, and is renamed automatically on upgraded clusters.

Pool names starting with a dot are reserved for Ceph’s internal operations, and the pools documentation says not to create or manipulate them. Expect pools you never created: .mgr always, .rgw.root and the default.rgw.* family once an object gateway starts, .nfs if you deploy the NFS service, and a metadata and data pair per CephFS filesystem.

Proxmox users met a sharp edge here. The Proxmox Pacific to Quincy upgrade guide warns that guest images stored in the device_health_metrics pool “will be broken after the upgrade” and says to move them to a new pool first. If a pool listing ever shows VM disks living in a pool Ceph created for itself, move them before the next major upgrade, not after.

How do you see pool usage and free space?

Run ceph df. Its POOLS section lists STORED (data clients wrote), OBJECTS, USED (raw space consumed, including replication and erasure-coding overhead), %USED and MAX AVAIL (an estimate of how much more that pool can take). ceph df detail adds quota, compression and data-versus-omap columns.

A trimmed excerpt from the monitoring documentation:

--- POOLS ---
POOL         ID   PGS   STORED  OBJECTS     USED  %USED  MAX AVAIL
.mgr         11     1  558 MiB      141  1.6 GiB      0    5.8 TiB
cephfs_meta  13  1024  166 GiB   14.59M  499 GiB   2.74    5.8 TiB
kubedata    104   256   63 GiB   17.65k  188 GiB   0.03    234 TiB

That sample comes from a multi-petabyte cluster, not a three-node homelab, but the ratios read the same at any size. Each of those pools shows USED at roughly three times STORED, which is what a three-replica pool should look like. Compression pulls the ratio down; snapshots and allocation granularity on small objects push it up.

The docs call MAX AVAIL a function of the replication or erasure coding in use, the CRUSH rule, the utilisation of the devices that rule selects, and mon_osd_full_ratio. That is why the sample shows 5.8 TiB and 234 TiB side by side: those pools map to different devices. On a small cluster, one unevenly filled OSD can drag MAX AVAIL down before the raw totals look alarming, so check ceph osd df when it falls faster than you expect. Nearfull OSDs and pools near quota raise named health checks, covered in clearing Ceph HEALTH_WARN.

Check one pool’s settings with ceph osd pool get

ceph osd pool get <pool> all
ceph osd pool get <pool> size
ceph osd pool get <pool> crush_rule
ceph osd pool get <pool> erasure_code_profile   # erasure-coded pools only
ceph osd pool application get <pool>

Per the man page, all returns every parameter that applies to the pool’s type, so you skip guessing key names. Single keys suit scripts and monitoring checks. For an erasure-coded pool the profile name is half the story; ceph osd erasure-code-profile get <profile> shows the k, m and failure domain behind it, and erasure coding versus replication explains what those numbers cost.

Confirm an application tag on every pool you created. A pool without one triggers POOL_APP_NOT_ENABLED, which the health checks reference resolves with rbd pool init <pool> for RBD or ceph osd pool application enable for anything else.

Check PG counts and live I/O per pool

ceph osd pool autoscale-status
ceph osd pool stats <pool>

autoscale-status is the pool list from the PG autoscaler’s point of view. The placement groups documentation defines its columns: RATE is space amplification (3.0 for three replicas, 1.5 for a k=4, m=2 erasure-coded pool), PG_NUM is the current count, NEW PG_NUM appears only when the recommendation differs enough to matter, and AUTOSCALE reads on, off or warn. An empty NEW PG_NUM column is the good outcome.

ceph osd pool stats reports I/O for one pool, or all pools if you omit the name. During the rebalance after you add an OSD, it is the quickest way to see which pool is moving data.

Showing pools in Proxmox and the dashboard

On Proxmox VE, pveceph pool ls lists all pools and their settings, per the pveceph manual, and the node’s Ceph > Pools panel shows the same in the GUI. On cephadm clusters, the Ceph dashboard Pools page lists applications, autoscaling, placement groups, replication size, erasure-code profiles, CRUSH rules and quotas.

Both are fine for a glance. When asking for help on a forum, paste ceph osd pool ls detail and ceph df output instead; a screenshot cannot be grepped.

What should you check after listing pools?

Check four things: every replicated data pool runs size 3 with min_size above 1, each CRUSH rule’s failure domain matches the hosts you actually own, every pool carries an application tag, and MAX AVAIL leaves room to survive a host failure and recover.

The failure-domain check catches the most homelab mistakes. A host-level rule on a three-replica pool needs three hosts with free space, so a two-node cluster stays undersized until the third arrives; the node counts are in Ceph minimum hardware requirements. With exactly three hosts, losing one leaves nowhere to re-replicate, so the cluster runs degraded until it returns. That is the honest argument for a fourth node.

FAQ

how do i list objects in a ceph pool

Run rados -p <pool> ls to list every object in a pool, or pass --pgid with a PG ID instead of the pool to list only that placement group’s objects. On a pool holding millions of objects this walks the entire pool, so redirect it to a file or pipe it through head rather than flooding the terminal.

why is ceph df max avail lower than free space

MAX AVAIL is an estimate of what the pool can still store, not raw free space. Ceph divides by the pool’s replication or erasure-coding overhead, limits it to devices its CRUSH rule selects, accounts for how full those devices are, and stops at mon_osd_full_ratio. A three-replica pool sees about a third of raw free space.

can i delete the .mgr pool in ceph

No, leave .mgr in place. The manager daemon uses it as a shared store for its modules, including device health data, and Ceph reserves every pool name that starts with a dot for internal use. Deleting any pool also requires setting mon_allow_pool_delete to true first, a deliberate speed bump worth respecting here.

how do i check a ceph pool quota

Run ceph osd pool get-quota <pool> to see a pool’s object and byte quotas; ceph df detail shows the same limits in its QUOTA OBJECTS and QUOTA BYTES columns. Set one with ceph osd pool set-quota <pool> max_bytes <bytes>, and remove it by setting the value to 0. A pool that hits its quota stops accepting writes.

Sources

  1. Ceph Documentation: Pools
  2. Ceph Documentation: Monitoring a Cluster
  3. Ceph Documentation: ceph command man page
  4. Ceph Documentation: rados command man page
  5. Ceph Documentation: Placement Groups
  6. Ceph Documentation: Health Checks
  7. Ceph Documentation: Ceph Dashboard
  8. Ceph.io: v17.2.0 Quincy released
  9. Proxmox VE Wiki: Ceph Pacific to Quincy
  10. Proxmox VE: pveceph manual page
#ceph #ceph-pools#ceph-cli #placement-groups #storage-monitoring

Related