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.