Ceph Cheatsheet

Ceph CheatsheetAlle Kapitel

Ceph Cheatsheet im Volltext

Stand Ceph Umbrella (v21) · Edition 2026.11

Cheatsheet im Volltext

Derselbe Inhalt wie im PDF, zum Mitlesen, Durchsuchen und direkten Kopieren der Command-Snippets. Stand: Ceph 21 (Umbrella) / 20 (Tentacle), Edition 2026.11.

Architektur (RADOS)

RADOS & Daemons

RADOS (Reliable Autonomic Distributed Object Store) ist das Fundament; RBD, CephFS, RGW und librados setzen darauf auf.

MON: hält die Cluster-Maps (MonMap, MgrMap, OSDMap, CRUSH-Map, MDSMap) und die CephX-Auth-Datenbank, Konsens via Paxos. Ungerade Zahl ≥3, Mehrheit (Quorum) muss up sein. Nur State, keine Nutzdaten.

MGR: aktiv/standby, Module (Dashboard, Prometheus-Exporter, Balancer, Autoscaler, Orchestrator/cephadm). Genau ein active, mind. 2 für HA.

OSD: je einer pro Datenträger. Daten, Replikation, Recovery, Scrubbing, Rebalance. Backend BlueStore.

MDS: nur CephFS, hält POSIX-Metadaten; die Daten liegen in RADOS.

RGW: HTTP-Daemon mit S3- und Swift-API.

CRUSH & Placement

CRUSH (Controlled Replication Under Scalable Hashing) ist deterministisch: der Client rechnet Objekt → PG → OSD selbst, keine zentrale Lookup-Tabelle.

CRUSH-Map = Bucket-Baum (root → dc → rack → host → osd) plus Rules plus Device-Classes (hdd/ssd/nvme).

PG (Placement Group): Objekt →(Hash)→ PG → Acting-Set (OSDs). Der pg_autoscaler steuert die PG-Zahl.

Pool: Replikation oder EC, CRUSH-Rule, pg_num, size/min_size, Quota, application-Tag (rbd/cephfs/rgw).

Redundanz & BlueStore

Replikation size=3/min_size=2 (Default, empfohlen): 3-fach Overhead, einfaches Recovery.

Erasure Coding k+m (z. B. k=4,m=2 → Faktor 1,5): zwei Ausfälle (je Failure-Domain) ohne Datenverlust, Client-I/O mit dem Default min_size=k+1 nur bis zu einem. Platzsparend, aber CPU- und latenzintensiv. RBD/CephFS brauchen allow_ec_overwrites, ab Tentacle FastEC per allow_ec_optimizations. RBD-Images legen nur die Daten in den EC-Pool: rbd create --size 100G --data-pool ecpool data/vol1.

BlueStore: raw Device + RocksDB, kein Dateisystem dazwischen. FileStore ist seit Quincy (v17) deprecated und ab Reef (v18) nicht mehr unterstützt, also ab Reef BlueStore-only.

Zugriffsschichten

RBD (Block)

Thin-provisionierte Block-Images, krbd (Kernel) oder librbd (QEMU). Layering, Trim/Discard.

Snapshots und CoW-Clones aus einem geschützten Snapshot (snap protect → clone).

rbd-mirror für DR: journal-based (2× Writes, feingranular) vs. snapshot-based (Delta, weniger Overhead); one-way oder two-way.

CephFS (POSIX)

MDS hält die Metadaten, die Nutzdaten liegen in RADOS. max_mds>1 gibt mehrere aktive MDS (dynamisches Subtree-Partitioning) plus Standby(-replay).

Getrennte Daten- und Metadaten-Pools. Snapshots je Verzeichnis (.snap).

Subvolumes und Subvolume-Groups sind die Basis für den Kubernetes-CSI.

RGW (Objekt) & librados

RGW: S3 + Swift, Bucket Policies, ACLs, STS, Versioning, Lifecycle, Notifications.

Multisite: Realm → Zonegroup → Zone, active-active seit Kraken (jede Zone beschreibbar, radosgw-Daemons synchronisieren selbst, kein separater Sync-Agent). Status: radosgw-admin sync status.

librados: native Lib (C/C++/Python), atomare Ops, Object Classes.

NVMe-oF Gateway

Exportiert RBD-Images als NVMe/TCP-Targets an Nicht-Ceph-Clients (VMware, Linux). Für Neu-Deployments statt iSCSI-Gateway (seit 11/2022 nur Wartung).

HA über Gateway-Groups (bis 8 Gateways je Gruppe, je Namespace active/standby über Load-Balancing-Groups). DH-CHAP, ab 20.2.2 Namespace-Verschlüsselung mit KMIP. Ab 20.2.3 mgr-Modul mit Pool .nvmeof, nach Upgrade ceph mgr module enable nvmeof.

Deployment

cephadm (Default)

Seit Octopus (v15), containerisiert (Podman/Docker), kein externes Config-Management nötig.

Orchestrator: Hosts (ceph orch host add), Labels (frei; _admin verteilt ceph.conf + Keyring), Service Specs (mon/mgr/osd/mds/rgw/nfs/smb/nvmeof/rbd-mirror/monitoring/mgmt-gateway), Placement (Host-Liste, Label, count oder Host-Pattern).

cephadm bootstrap --mon-ip 10.0.0.10
ceph orch host add node2 10.0.0.11 --labels mon,osd
ceph orch apply mon --placement="label:mon"
ceph orch apply osd --all-available-devices
ceph orch ls          # Service-Status
ceph orch ps          # Daemon-Instanzen

Rook & ceph-ansible

Rook: CNCF-Graduated-Operator, der offizielle Weg für Ceph in Kubernetes (oder einen externen Cluster via CSI an K8s anbinden).

Faustregel: cephadm für Bare-Metal, Rook für Kubernetes.

Rook 1.21: Squid, Tentacle, Umbrella; msgr2 Pflicht (Kernel ≥5.11, sonst network.connections.requireMsgr2: false). Beispiel-Image noch v20.2.4.

ceph-ansible: nur noch Wartung, letzter Branch stable-9.0 (Squid), kein Tentacle/Umbrella. Vor dem Upgrade über Squid hinaus per cephadm adopt migrieren. (cephadm-ansible sind nur Helper-Playbooks.)

Kern-Commands

ceph -s                 # Cluster-Status
ceph health detail      # Warnungen im Klartext
ceph df                 # Kapazität je Pool
ceph osd df tree        # Auslastung je OSD/Host
ceph versions           # Daemon-Versionen
# OSD-Management
ceph osd tree
ceph osd set noout      # keine Migration (Wartung)
ceph osd out 5          # OSD 5 evakuieren
ceph osd reweight 5 0.8 # temporäres Gewicht
ceph orch osd rm 5      # cephadm, statt osd purge
# Pools & Autoscaler
ceph osd pool create data 128 128 replicated
ceph osd pool set data size 3
ceph osd pool set data min_size 2
ceph osd pool set data bulk true   # PGs vorab hoch
ceph osd pool autoscale-status
ceph osd pool application enable data rbd
# Erasure-Profil & EC-Pool
ceph osd erasure-code-profile set ec42 \
  k=4 m=2 crush-failure-domain=host plugin=isa
# v21 deprecated: shec, clay, jerasure außer reed_sol_van
ceph osd pool create ecpool erasure ec42
ceph osd pool set ecpool allow_ec_overwrites true
# FastEC ab v20, nicht umkehrbar:
ceph osd pool set ecpool allow_ec_optimizations true
# CRUSH
ceph osd crush tree --show-shadow
ceph osd crush rule create-replicated ssd-rule \
  default host ssd
ceph osd crush rm-device-class osd.5
ceph osd crush set-device-class nvme osd.5
ceph osd crush move node7 rack=rack2
# cephx / Auth (aes256k ab 20.2.4/19.2.6)
ceph auth ls
ceph auth get-or-create client.app \
  mon 'profile rbd' osd 'profile rbd pool=data' \
  mgr 'profile rbd pool=data'
ceph auth rotate --key-type=aes256k client.app
ceph health detail | grep AUTH_INSECURE
# RBD: Image, Snap, Clone, Mirror
rbd create data/vol1 --size 100G
rbd snap create data/vol1@base
rbd snap protect data/vol1@base
rbd clone data/vol1@base data/clone1
rbd mirror image enable data/vol1 snapshot
# CephFS
ceph fs volume create cephfs
ceph fs subvolumegroup create cephfs csi
ceph fs subvolume create cephfs v1 --group_name csi
# ab v20 bei FS-Health-Warnung: --yes-i-really-mean-it
ceph fs set cephfs max_mds 2
ceph fs status
# RGW (S3) & Balancer/Orchestrator
radosgw-admin user create --uid=app --display-name="App"
radosgw-admin key create --uid=app --key-type=s3 \
  --gen-access-key --gen-secret
radosgw-admin sync status
ceph balancer status    # upmap + on ist Default

Betrieb & Diagnose

PG-States

Ziel: active+clean (bedient I/O, alle Replikate konsistent).

degraded: nicht alle Replikate da. undersized: Acting-Set < size. peering: OSDs einigen sich auf den PG-Stand. remapped: temporär anderes Set bis Backfill fertig.

backfilling/backfill_wait: Voll-Kopie läuft/wartet (backfill_toofull = Ziel-OSD zu voll). recovering: Delta aus dem Log.

incomplete: fehlende Schreib-Historie, Datenverlust-Risiko. inconsistent: Scrub-Abweichung → ceph pg repair <pgid>.

down: Replikat mit nötigen Daten down, PG offline. peered: unter min_size, kein Client-I/O. stale: MON ohne aktuellen PG-Status vom Primary.

Scrubbing & Rebalancing

Scrub light (täglich, Größe und Attribute) vs. deep-scrub (wöchentlich, liest die Daten, prüft Checksummen, I/O-intensiv). Flags noscrub/nodeep-scrub.

Rebalance entsteht durch CRUSH-Änderung, OSD in/out oder neue Kapazität. Drosseln unter mClock (Default seit Quincy) über osd_mclock_profile (high_client_ops); osd_max_backfills/osd_recovery_max_active greifen nur mit osd_mclock_override_recovery_settings=true. Flags norebalance/nobackfill.

Disk-Tausch (cephadm, Rook)

--replace setzt die OSD out, leert sie und hält die ID (destroyed). Erst ziehen, wenn OSD 5 nicht mehr in rm status steht; Disk schon tot: --force. cephadm legt die neue OSD per Spec auf demselben Host an. Kein noout: das hält clusterweit das Auto-Out anderer OSDs an. Rook 1.21 (nur Host-OSDs, osdsPerDevice 1) per Annotation, ziehen erst nach replace-ready-for-swap.

ceph orch osd rm 5 --replace   # out, leeren, ID halten
ceph orch osd rm status        # erst ziehen, wenn fertig
# Rook, ziehen erst nach replace-ready-for-swap:
kubectl -n rook-ceph annotate deploy rook-ceph-osd-5 \
  osd.rook.io/replace=yes-really-replace-osd-5

Health-Warnungen (typisch)

PG_DEGRADED/PG_AVAILABILITY: Redundanz bzw. Verfügbarkeit einer PG.

OSD_NEARFULL/OSD_BACKFILLFULL/OSD_FULL: Kapazität, FULL blockt Writes.

MON_CLOCK_SKEW: NTP/chrony driftet. SLOW_OPS (OSD/MON) / MDS_SLOW_REQUEST (CephFS): hängende Ops.

Weitere: POOL_NEAR_FULL, MON_DISK_LOW, TOO_MANY_PGS/TOO_FEW_PGS, MDS_SLOW_METADATA_IO, AUTH_INSECURE_*_KEY_TYPE u. a. (CephX-Rotation, ab 20.2.4/19.2.6), DEPRECATED_EC_PLUGIN (ab v21).

# Diagnose
ceph tell osd.5 bench          # Durchsatz je OSD
ceph tell mon.* mon_status     # Quorum / MonMap
ceph tell osd.5 perf dump      # remote, kein cephadm enter
ceph tell osd.5 dump_ops_in_flight
ceph pg 3.1a query             # Peering-/Recovery-Detail
ceph osd perf                  # commit/apply-Latenz

Fallen & Tunables

Sicherheitsrelevante Defaults

min_size=1 ist gefährlich: Schreiben mit nur einer Kopie, ein weiterer Ausfall bedeutet Datenverlust. Bei Replikation min_size=2 halten.

Kapazitäts-Ratios: nearfull_ratio 0.85 (Warnung), backfillfull_ratio 0.90 (kein Backfill mehr), full_ratio 0.95 (Pool wird read-only, Stillstand). Puffer für Recovery lassen.

MON-Zahl immer ungerade (3 oder 5), sonst kein sauberes Quorum.

PG-Ziel: Umbrella hebt mon_target_pg_per_osd 100→200 und mon_max_pg_per_osd 250→500, Pools mit Autoscaler on können nach dem Upgrade splitten (Backfill). Bei osd_memory_target unter 4 GiB oder mehr als zwei OSDs je SSD vorher pinnen: ceph config set global mon_target_pg_per_osd 100.

CVE-Hotfix 20.2.4 / 19.2.6 (CephX, RGW)

Vier CVEs (High), gefixt ab 20.2.4 und 19.2.6 (19.08.2026) sowie in Umbrella, für Reef und Quincy gibt es keinen Fix. CephX nutzte AES-128-CBC ohne HMAC, ein Client-Key reicht für gefälschte Admin-Tickets (CVE-2025-30156). Jede Identität mit mon 'allow r' las den Config-Key-Store samt LUKS-Passphrasen und cephadm-SSH-Key (CVE-2026-50152).

Neuer Key-Typ aes256k. Reihenfolge: Daemon-Keys (cephadm automatisch, Rook ab v1.20.6 bzw. v1.19.10 per keyGeneration), dann auth_service_cipher, zuletzt Client-Keys, erst wenn alle Kernel-Clients Linux 7.0 (oder Backport) haben und alle rbd-mirror-Peers gepatcht sind. auth_allowed_ciphers aes256k erst setzen, wenn AUTH_INSECURE_SERVICE/CLIENT_KEY_TYPE weg sind, sonst Lockout.

RGW lehnt jeden SigV4-Request mit unsigniertem host- oder x-amz-*-Header mit 403 ab, nicht nur bei Multisite: Clients vorher prüfen, RGW zuletzt und einzeln upgraden. Multisite: vor dem Upgrade rgw_sigv4_insecure=true, nach dem letzten Cluster wieder false (der Schalter hebt den Fix auf). cephadm-SSH-Key rotieren.

Regression: 20.2.4/19.2.6 lehnen auch unsignierte Content-Type und x-amz-content-sha256 ab (boto3-presigned-PUT, minio-go, Thanos/Loki/Mimir). Behoben in 19.2.7, 20.2.5 und 21.2.0.

Neueres seit 2024

Crimson & SeaStore (Preview)

Crimson = Next-Gen-OSD auf Seastar (thread-per-core, DPDK/SPDK): Tech Preview seit Squid, auch in Umbrella nicht produktionsreif. EC-Support erst ab v21 (Tentacle nur replizierte Pools), Deployment per cephadm möglich. Klassischer OSD + BlueStore bleiben Default und Produktion.

SeaStore = NVMe-optimiertes Objektstore-Backend für Crimson, ebenfalls Tech Preview und früh.

Stretch-Cluster

Stretch-Mode: 2 Datacenter plus Tiebreaker-MON in einer dritten Site (VM, hohe Latenz ok). Pflicht: 5 MON (2+2+1), Election-Strategie connectivity, Pool size=4 (2 je Site), min_size=2, keine EC-Pools. Aktivieren: ceph mon enable_stretch_mode [<tiebreaker>] <rule> datacenter (ab v21 wählt Ceph den Tiebreaker selbst, wenn er fehlt). Fällt eine Site aus, setzt Ceph min_size=1.

Ab 19.2.1 alternativ Stretch-Pools je Pool (ceph osd pool stretch set), auch über mehr als 2 Sites, aber ohne I/O bei Netsplit (kein Tiebreaker).

Versionen & Historie

Release-Stand (10.11.2026)

Umbrella (v21): stabil seit 28.10.2026 mit 21.2.0, EOL geplant 01.06.2028. Container brauchen x86-64-v3-CPUs (auch unter Rook), cephadm auf den Hosts Python ≥3.9.

Tentacle (v20): zuletzt 20.2.5 (02.11.2026), EOL geplant 01.06.2027.

Squid (v19): zuletzt 19.2.7 (12.10.2026), EOL geplant 02.12.2026.

Reef (v18): EOL 20.03.2026 mit 18.2.8. Quincy (v17): EOL 13.01.2025.

Für Neu-Deployments raten wir zu Umbrella. x86-Hosts ohne x86-64-v3 bleiben auf Tentacle, dann bis Juni 2027 die Hardware tauschen.

Codenamen alphabetisch nach Kopffüßern: Pacific(16) → Quincy(17) → Reef(18) → Squid(19) → Tentacle(20) → Umbrella(21) → Vampire(22). Kadenz rund jährlich, Support laut Policy rund 24 Monate (Tentacle geplant rund 18).

Upgrade überspringt höchstens eine Serie, Ziel ist immer der neueste Point-Release: Umbrella aus Squid oder Tentacle, Reef zuerst auf Squid oder Tentacle. Kein Downgrade. Vorher mit dem cephadm aus 21.2.0 die CPU prüfen (cephadm gather-facts | grep cpu_isa_level) und den Autoscaler pausieren (ceph osd pool set noautoscale, danach unset), aus 19.2.7/20.2.4 macht cephadm das nicht, CPU-Block ab 20.2.5. cephadm: ceph orch upgrade start --image quay.io/ceph/ceph:v21.2.0; paketbasiert zum Schluss ceph osd require-osd-release umbrella.

Herkunft

2004 UC Santa Cruz (Sage Weil) → 2012 Inktank → 2014 an Red Hat → 2019 IBM kauft Red Hat. Seit 2018 Ceph Foundation (directed fund der Linux Foundation), 2026 Marke an die Linux Foundation übertragen. Der Upstream bleibt offen und community-getrieben.

Projekt und Quellen

Projektseite ceph.io, Doku docs.ceph.com, Release Notes docs.ceph.com/en/latest/releases, Quellcode github.com/ceph/ceph.

Rook: rook.io, github.com/rook/rook.