Follow-up to #609, which restored cephfs-metadata. These two pools were left out of that PR pending a decision, and the decision is to restore them.
pool
was
now
replicapool
2 / min_size 1
3
cephfs-data0
2 / min_size 1
3
Why they were at 2
Not the conversion — this is #434. With three Crucial P3 QLC OSDs on three hosts, size 3 put every write on every drive, so per-drive write volume equalled total cluster write volume and all three wore at an identical rate:
measured 2026-08-19: 80/82/87% endurance used, ~0.13 points/day
projected exhaustion: Nov 2026 - Jan 2027, all three together
Replication is no defence against that, because the wear was correlated by construction rather than independent. Size 2 cut per-drive write volume by a third to desynchronise it, accepting that a second drive failure during a degraded window loses data.
Why that no longer applies
All three OSDs are Samsung PM983 enterprise drives now, at 2-3% of rated endurance with a far higher write budget and independent wear histories:
S437NX0M400426 jupiter 3% used
S437NX0M403161 saturn 2% used
S437NF0M501176 neptune 3% used
The correlated wear-out failure mode the size-2 trade was bought to avoid does not exist on this hardware, so the pools return to the durability the cluster is sized for. This makes #434 resolvable.
min_size
Both min_size: "1" overrides are dropped. They existed only because Ceph does not lower min_size when size is reduced — leaving them would have made the pools 2/2, where any single OSD down blocks IO for its PGs. At size 3 the default min_size of 2 is correct.
Left alone
cephfs-ci stays at size 2 — throwaway Woodpecker CI workspaces, at 2 rather than 1 only because an unreplicated pool makes ceph osd ok-to-stop refuse for every OSD. Unrelated to #434.
objectstore metadataPool is size 2 with no rationale recorded and an erasure-coded 2+1 dataPool. Flagging rather than changing, since I could not establish whether that 2 was deliberate.
Expect on merge
Re-replication of roughly 280 GiB — comparable to the backfill that just completed, so budget similar time and watch ceph -s rather than merging and walking away. The cluster is currently 217 PGs active+clean with all three OSDs up.
Follow-up to #609, which restored `cephfs-metadata`. These two pools were left out of that PR pending a decision, and the decision is to restore them.
| pool | was | now |
| --- | --- | --- |
| `replicapool` | 2 / min_size 1 | 3 |
| `cephfs-data0` | 2 / min_size 1 | 3 |
## Why they were at 2
Not the conversion — this is #434. With three Crucial P3 QLC OSDs on three hosts, size 3 put every write on every drive, so per-drive write volume equalled total cluster write volume and all three wore at an identical rate:
```
measured 2026-08-19: 80/82/87% endurance used, ~0.13 points/day
projected exhaustion: Nov 2026 - Jan 2027, all three together
```
Replication is no defence against that, because the wear was correlated by construction rather than independent. Size 2 cut per-drive write volume by a third to desynchronise it, accepting that a second drive failure during a degraded window loses data.
## Why that no longer applies
All three OSDs are Samsung PM983 enterprise drives now, at 2-3% of rated endurance with a far higher write budget and independent wear histories:
```
S437NX0M400426 jupiter 3% used
S437NX0M403161 saturn 2% used
S437NF0M501176 neptune 3% used
```
The correlated wear-out failure mode the size-2 trade was bought to avoid does not exist on this hardware, so the pools return to the durability the cluster is sized for. This makes #434 resolvable.
## min_size
Both `min_size: "1"` overrides are dropped. They existed only because Ceph does not lower `min_size` when `size` is reduced — leaving them would have made the pools 2/2, where any single OSD down blocks IO for its PGs. At size 3 the default `min_size` of 2 is correct.
## Left alone
- `cephfs-ci` stays at size 2 — throwaway Woodpecker CI workspaces, at 2 rather than 1 only because an unreplicated pool makes `ceph osd ok-to-stop` refuse for every OSD. Unrelated to #434.
- `objectstore` metadataPool is size 2 with no rationale recorded and an erasure-coded 2+1 dataPool. Flagging rather than changing, since I could not establish whether that 2 was deliberate.
## Expect on merge
Re-replication of roughly 280 GiB — comparable to the backfill that just completed, so budget similar time and watch `ceph -s` rather than merging and walking away. The cluster is currently 217 PGs `active+clean` with all three OSDs up.
These two sat at size 2 because of #434, not because of the conversion. With
three Crucial P3 QLC OSDs on three hosts, size 3 put every write on every
drive, so per-drive write volume equalled cluster write volume and all three
wore at an identical rate — 80/82/87% of rated endurance, projected to exhaust
together between Nov 2026 and Jan 2027. Replication is no defence against that,
because the wear was correlated by construction.
The OSDs are Samsung PM983 enterprise drives now, at 2-3% of rated endurance
with a far higher write budget. Wear-out is no longer the binding constraint
and the correlation argument no longer applies, so the pools return to the
durability the cluster is sized for.
The min_size 1 overrides go with them. They existed only because Ceph does not
lower min_size when size is reduced, which would have left the pools 2/2 and
blocked IO on any single OSD going down.
cephfs-metadata's comment loses the clause explaining that data0 sits at 2,
which stops being true here.
cephfs-ci stays at size 2: that pool holds throwaway CI workspaces and is at 2
rather than 1 only because an unreplicated pool makes `ceph osd ok-to-stop`
refuse for every OSD. Unrelated to #434.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-up to #609, which restored
cephfs-metadata. These two pools were left out of that PR pending a decision, and the decision is to restore them.replicapoolcephfs-data0Why they were at 2
Not the conversion — this is #434. With three Crucial P3 QLC OSDs on three hosts, size 3 put every write on every drive, so per-drive write volume equalled total cluster write volume and all three wore at an identical rate:
Replication is no defence against that, because the wear was correlated by construction rather than independent. Size 2 cut per-drive write volume by a third to desynchronise it, accepting that a second drive failure during a degraded window loses data.
Why that no longer applies
All three OSDs are Samsung PM983 enterprise drives now, at 2-3% of rated endurance with a far higher write budget and independent wear histories:
The correlated wear-out failure mode the size-2 trade was bought to avoid does not exist on this hardware, so the pools return to the durability the cluster is sized for. This makes #434 resolvable.
min_size
Both
min_size: "1"overrides are dropped. They existed only because Ceph does not lowermin_sizewhensizeis reduced — leaving them would have made the pools 2/2, where any single OSD down blocks IO for its PGs. At size 3 the defaultmin_sizeof 2 is correct.Left alone
cephfs-cistays at size 2 — throwaway Woodpecker CI workspaces, at 2 rather than 1 only because an unreplicated pool makesceph osd ok-to-stoprefuse for every OSD. Unrelated to #434.objectstoremetadataPool is size 2 with no rationale recorded and an erasure-coded 2+1 dataPool. Flagging rather than changing, since I could not establish whether that 2 was deliberate.Expect on merge
Re-replication of roughly 280 GiB — comparable to the backfill that just completed, so budget similar time and watch
ceph -srather than merging and walking away. The cluster is currently 217 PGsactive+cleanwith all three OSDs up.