CephXLIII · CephFS Failure ScenariosCephFS Failure Scenarios
Responding to an MDS daemon crash
What you'll learn
- Sequence the automatic response to an MDS crash
- Describe what clients experience during failover
- Identify when operator action is required
- Investigate a repeatedly crashing MDS
Prerequisites
None — start here.
Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18
Why this matters in production
A single MDS crash with a standby present is a pause, not an incident. Knowing that lets you resist intervening in a recovery that is proceeding correctly, and reserve action for the cases that genuinely need it.
The automatic response
1. MDS process dies; beacons stop
2. Monitors wait mds_beacon_grace, then mark the rank failed
3. A standby is assigned the rank
4. It replays the journal, resolves, reconnects clients, rejoins
5. Rank active; clients resume
watch -n 2 'ceph fs status cephfs'
ceph -w | grep -i mds
No operator action is required for any of this.
What clients see
| Client state | Experience |
|---|---|
| Idle | nothing |
| Reading an already-open file | nothing — data I/O bypasses the MDS |
| Performing a metadata operation | blocks until the new rank is active |
| Writing with buffered capabilities | blocks, then flushes after reconnect |
Applications doing bulk data transfer frequently do not notice an MDS failover at all, because their I/O never touches the MDS. Applications doing metadata work pause for the duration.
When action is required
No standby available.
ceph fs status cephfs
# RANK STATE MDS
# 0 failed
The rank has nowhere to go. Start an MDS:
ceph orch apply mds cephfs --placement="3 host1 host2 host3"
Repeated crashes. The standby takes over, crashes, the next takes over, crashes. This is a crash loop, and it usually means the MDS is hitting the same condition during recovery each time.
journalctl -u ceph-mds@a --since '1 hour ago' | grep -iE 'assert|abort|signal|FAILED'
coredumpctl list ceph-mds
Out-of-memory kills.
journalctl -k | grep -i 'killed process.*ceph-mds'
ceph config get mds mds_cache_memory_limit
An MDS killed by the OOM killer is a cache sizing or client capability problem, not an MDS bug.
Investigating a crash loop
# what state does it reach before dying?
ceph fs status cephfs
# increase logging for the next attempt
ceph config set mds debug_mds 10
ceph config set mds debug_ms 1
# ... reproduce ...
ceph config set mds debug_mds 1/5
An MDS crashing consistently in rejoin points at client capability
state; one crashing in replay points at the journal.
Quiz
Knowledge check · 4 questions
Q1. A client is streaming a large read from an already-open CephFS file when the MDS fails over. What does it experience?
Q2. An MDS repeatedly killed by the OOM killer indicates an MDS software bug.
Q3. Break an MDS crash loop.
Every MDS assigned to rank 0 reaches `rejoin` and then crashes with an assertion failure. Three daemons have cycled through in twenty minutes. The filesystem is unavailable.
Q4. What does the state an MDS reaches before crashing tell you?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Resist intervening in an MDS failover that is progressing — the automatic sequence handles a single crash without help, and interference adds risk. Reserve action for the three cases that need it: no standby available, a crash loop, and out-of-memory kills, each of which has a distinct signature.
Cross-course references
- Kubernetes: a CrashLoopBackOff caused by one bad input has the identical investigation shape
- Linux: a service failing consistently at the same startup stage points at persistent state