ser8 whole-system disk review: 54.7% used, ~70 GB reclaimable, ClickHouse is the growth vector #916
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#916
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
First full disk review of ser8 since bring-up. Diagnosis only. No relief applied. Following
ops-investigation-disk-pressure, which requires stopping at classification unless an attended operator approves a relief path.Headline: no pressure, but worth knowing
297 GB until the critical threshold. Inode exhaustion is ruled out entirely, so this is byte pressure only, and there is no incident. This is a capacity baseline.
Node otherwise idle: 61.85 GB RAM at 15%, load 0.47/1.07/1.16, uptime 82 days.
Tooling correction, important for anyone reading past numbers
The node-stats MCP surface materially undercounts ser8 volumes, because its scans hit timeouts and entry caps at this scale:
A 6x undercount.
get_pressure_path_usagesimilarly reported/var/lib/rancher/k3s/storageas 13.99 GB against an actual 71.1 GB. Both results carriedtruncated: trueandtimed_out: true, so the tool was honest, but a reader skimming the totals would be badly misled.Also worth noting: ser8's node-stats deployment lacks
get_host_usage_breakdown, which kai-server has and which the disk-pressure skill explicitly recommends reaching for before any hand-rundu. On ser8 that tool does not exist, so a hand-run walk was the only route to the answer.Per
raw-du-guardrails.md: thedufigures below were taken with-xand with*kubernetes.io~local-volume*and*volume-subpaths*excluded so kubelet bind mounts are not double counted. They remain uncorrected totals in the sense that reference warns about.Measured ownership
1. restic backup repo, 208.5 GB, healthy
Single repo
/var/lib/rest-server/repos/kai-server. Backups are current and running daily, contrary to what an alphabetical listing first suggested:15 snapshots retained. So ser8 is already serving as a live backup target, which is worth recording because the k3s snapshot-ship automation (#261) is still open. This is a different, working backup path.
Open question, not answered here: whether a
restic forget --prunepolicy is configured. 15 snapshots at 208.5 GB deduped is reasonable, but an unbounded repo is the single largest growth risk on the disk after ClickHouse. Worth confirming rather than assuming.2. SigNoz ClickHouse, 66.2 GB, and now accelerating
The PVC requests 100 GB and uses 66.2 GB, so it is at 62% of its own claim while the node is at 54.7%. Note the request is a scheduling request, not a quota and not a limit.
This is the growth vector. Traefik access logs were enabled at 00:54 UTC today (
coilyco-bridge/deploy#786, coilyco-bridge/deploy#786), which sends every public request into this store. The retention decision left open on that issue is not cosmetic: it directly governs whether this 66.2 GB stays flat or climbs toward the 100 GB request and beyond.3. Pod ephemeral, 56.4 GB, live
Attributed to Forgejo runner pods at roughly 6.3 GB each:
This is live working data (DinD image cache and scratch), not a cleanup target. It is the domain the skill flags as having hidden the 2026-08-17 incident, and it is invisible to PVC accounting. Recorded so it is not mistaken for waste, and so the per-runner footprint is known: each additional ser8 runner costs about 6.3 GB.
4. Stale SigNoz upgrade backups, 52.1 GB, the clearest waste
Four directories, all created within one hour on 2026-08-04, three weeks ago.
LATESTnames20260804T190428Z, so the other two large copies are superseded pre-upgrade snapshots from the same session. SigNoz has run since without needing them.5. Idle non-k3s container runtime, 18.0 GB
dockerandcontainerdare bothactiveunder systemd, but neither tree has been written since 2026-07-12, six weeks ago. k3s uses its own containerd at/var/lib/rancher/k3s/agent/containerd(28.4 GB, separately accounted), and the runner DinD containers run inside k3s pods. So this looks like an install left over from bring-up, holding images nothing uses.Proposed relief, attended, in priority order
None of this is applied. Each needs an operator and a rollback position.
LATEST. Reclaims ~34.7 GB. Lowest risk item here: they are three weeks old and explicitly superseded. Dropping all four reclaims 52.1 GB, which is defensible given SigNoz has run three weeks without them, but keepingLATESTis the conservative call.Items 1 and 2 together take the node from 54.7% to roughly 47%.
Follow-ups worth their own tracking
get_host_usage_breakdown, or its scan budgets should be raised, so this review is repeatable without SSH and a hand-rundu.ops-investigation-disk-pressureis written around kai-server, including akai-disk-pressure-reporthelper that has no ser8 equivalent. The methodology transferred cleanly; the tooling did not.Attended relief applied: 52.2 GB reclaimed, 54.7% -> 49.7%
Kai authorized items 1 and 2 and was attended throughout. Item 3 (restic) was raised and deliberately deferred, see below.
Admission gate, recorded before mutation
Per
relief-and-verification.md, neither action maps cleanly onto the six enumerated relief paths, so the gate was established explicitly:/var/backups/signoz-upgrades52.1 GB,/var/lib/containerd+/var/lib/docker18.0 GB.chi-signoz-clickhouse-cluster-0-0-0,signoz-0,signoz-otel-collector,signoz-zookeeper-0all Running at 20d. Not mid-incident.LATESTbackup retained intact, plus re-pullable registry images.Action 1: superseded SigNoz upgrade backups
Completion markers were verified before removal rather than assumed:
That confirmed the read of the directory listing: the near-zero-byte one was a genuinely aborted run, not a small valid backup.
Each contains
SHA256SUMS,backup-complete,backup-id,clickhouse-native.zip,clickhouse-pvc.tar.zst, so these are real ClickHouse exports plus PVC tarballs, not incidental files.34.8 GB reclaimed.
LATESTremains at 17.4 GB as the rollback position.Action 2: idle non-k3s container images
Verified unused before acting, per relief path 4 ("remove only images proven unused by running workloads"):
Used
docker image prune -a, docker's own GC path, rather than thectr prunethe skill forbids. Docker reportedTotal reclaimed space: 18.7GB.Note this also explains the earlier
/var/lib/dockermeasurement of only 0.6 GB against 7.6 GB of listed images: this docker stores images through containerd, so the bytes were in/var/lib/containerd, which is now 0.0 GB.17.4 GB reclaimed.
Rollback caveat worth stating:
agentic-os:releaseis a mutable tag. Re-pulling later yields whateverreleasepoints at then, not this exact build.postgres:17andhello-worldare trivially re-pullable. Nothing was running on any of them.Left deliberately undone: the
dockerandcontainerddaemons are stillactive. Disabling them is a system configuration change rather than cleanup, and was not in scope for this authorization. Worth deciding separately, since running them costs memory and attack surface for no observed use since 2026-07-12.After-state checkpoint
Two independent sources agree:
The 48% vs 49.7% difference is the 41 GB of reserved blocks the MCP includes, consistent with the pre-relief readings.
345.8 GB until the 85% critical threshold, up from 297.2 GB. All SigNoz pods still Running, nothing disturbed.
Item 3, restic: deferred with a finding
Investigated far enough to answer whether it was worth pursuing for space. It is not, but the check surfaced something else. Filed separately rather than folded in here, because it is a backup-correctness question rather than a disk question.
Live check: ser8 root is at 44.9%, not the 54.7% in the title.
Roughly 10 points below where this was filed, with over 500 GB free. The reclaim case this issue was built on is weaker than when it was written, and there is no pressure to act against.
Recording it rather than closing, because the ClickHouse growth-vector observation is about a trajectory rather than a threshold, and that does not become wrong just because the current number improved. Whether ~70 GB of reclaimable space is worth collecting is a judgement call at 44.9% that it was not at 54.7%.
Related and worth reading together: the restic repo on this host was separately confirmed to be under an enforced retention policy, contrary to what #917 originally concluded.
restic-prune.timerruns weekly and its last run removed 6 snapshots and reclaimed 2.022 GiB, holding unused size at 0.89% of the repo. So the 208.5 GB repo here is managed rather than growing unbounded, which removes one candidate from the growth picture.Current reading, and this is now the standing ser8 capacity issue
Measured 2026-08-28:
47.3 percent, against the 54.7 percent this issue was filed on. Down 7.4 points, with 494.9 GB free.
#871 closed into this one
#871 asked "ser8 root filesystem climbing ~10 percent to ~54 percent over 30 days, attribute the growth." That question is partly answered by the reading itself: the trend reversed. The filesystem is lower than when the climb was reported, so whatever drove it either stopped or was reclaimed. Closed and pointed here, since a growth-attribution issue whose growth went away is not actionable as written.
What that does not tell us is why, and that matters because an unexplained reversal is as weak a signal as an unexplained climb. Neither direction has an attribution.
What stays live here
The reclaimable analysis in the body is not invalidated by a lower reading. ClickHouse as the growth vector is still the thing to watch, and it was not re-measured today. With 494.9 GB free there is no urgency, which is exactly when the retention question is cheapest to answer.
Related and still open: #808, ser8 gaming runner evicted for exceeding its 24Gi docker-lib EmptyDir. That is a per-workload bound rather than a whole-node one, and it can bite well before the filesystem does.