services disk filled to 100% (2026-10-18): follow-ups, incl. revisit the CI cache reset #285

Open
opened 2026-10-18 21:35:22 -04:00 by jfraeys · 0 comments
Owner

On 2026-10-18 the services root disk (25 GB, Linode) hit 100%. The warning alert (HostDiskSpaceWarning, <20% free) had been in range since the disk passed about 80%; it was 84% earlier the same day. Whether that alert reached the operator is unconfirmed.

What used the space (before cleanup, approx.)

  • Docker overlay2 7.9 GB (about 3.4 GB were unused old images, removed with docker image prune -a)
  • /opt/forgejo-runner-cache/data 4.5 GB (CI cache server, unbounded)
  • Trivy databases about 1.6 GB twice (/tmp/trivy and under /root/.cache)
  • /var/lib/infra-backups 1.4 GB, journal 450 MB (vacuumed 268 MB), unused Docker volumes about 620 MB
  • Result: 3.7 GB freed by image and journal cleanup, then 80% / 4.7 GB free.

Done / in flight

  • Old images and journal cleaned by hand (operator).
  • PR #284: weekly reset of the CI cache data (ci_cache_host_reset_*), with a path guard and tests.

Follow-ups

  • Clear the CI cache by hand once (stop forgejo-runner-cache, empty /opt/forgejo-runner-cache/data, start) until #284 is deployed.
  • Revisit #284 after the OVH move / any disk resize. It is a stopgap against unbounded cache growth, not the fix: it has no size limit and the growth rate was never measured. Options then: stretch the interval, switch to a size trigger, or turn it off with ci_cache_host_reset_enabled: false (the role removes the units). Re-check if a future forgejo-runner makes cache retention configurable, or if the cache moves off services.
  • Add a size trigger (daily check, reset when over a limit, e.g. 2 GB) and export the cache size as a textfile metric with an alert, so growth is visible.
  • One Trivy cache location (two copies of about 1.6 GB each) and cleanup after the weekly scan.
  • Cap the journal (SystemMaxUse), and limit how many dumps /var/lib/infra-backups keeps (it also holds a stale moodle directory from Sep 11).
  • backup.sh (/tmp/restic-env.$$, line about 573): a trap so an interrupted remote restore does not leave a credentials file behind (two old ones were found on services).
  • Decide on the unused Docker volumes (app_postgres_data, app_redis_data, many anonymous ones; about 620 MB): they may hold data, so not pruned.
  • Verify nothing was damaged while the disk was full: ./manage health check --host services, ./manage backup status (was the 00:03 full snapshot taken?), Forgejo and Vaultwarden logs for no space left.
  • The disk is too small. 25 GB for this host went from 78% to 100% in under two weeks. Either resize the Linode services node (g6-standard-2 has 80 GB; deferred until after the migration) or move to OVH d2-4 (50 GB). Decision for the operator.
  • Check the disk alert path: did HostDiskSpaceWarning (<20% free for 10 min) reach the operator? Consider a higher bar (for example <30% on a small disk) while the disk is this size.

Related: #187 (OVH migration), #220.

On 2026-10-18 the `services` root disk (25 GB, Linode) hit 100%. The warning alert (`HostDiskSpaceWarning`, <20% free) had been in range since the disk passed about 80%; it was 84% earlier the same day. Whether that alert reached the operator is unconfirmed. ## What used the space (before cleanup, approx.) - Docker `overlay2` 7.9 GB (about 3.4 GB were unused old images, removed with `docker image prune -a`) - `/opt/forgejo-runner-cache/data` 4.5 GB (CI cache server, unbounded) - Trivy databases about 1.6 GB twice (`/tmp/trivy` and under `/root/.cache`) - `/var/lib/infra-backups` 1.4 GB, journal 450 MB (vacuumed 268 MB), unused Docker volumes about 620 MB - Result: 3.7 GB freed by image and journal cleanup, then 80% / 4.7 GB free. ## Done / in flight - [x] Old images and journal cleaned by hand (operator). - [ ] PR #284: weekly reset of the CI cache data (`ci_cache_host_reset_*`), with a path guard and tests. ## Follow-ups - [ ] **Clear the CI cache by hand once** (stop `forgejo-runner-cache`, empty `/opt/forgejo-runner-cache/data`, start) until #284 is deployed. - [ ] **Revisit #284 after the OVH move / any disk resize.** It is a stopgap against unbounded cache growth, not the fix: it has no size limit and the growth rate was never measured. Options then: stretch the interval, switch to a size trigger, or turn it off with `ci_cache_host_reset_enabled: false` (the role removes the units). Re-check if a future forgejo-runner makes cache retention configurable, or if the cache moves off `services`. - [ ] Add a size trigger (daily check, reset when over a limit, e.g. 2 GB) and export the cache size as a textfile metric with an alert, so growth is visible. - [ ] One Trivy cache location (two copies of about 1.6 GB each) and cleanup after the weekly scan. - [ ] Cap the journal (`SystemMaxUse`), and limit how many dumps `/var/lib/infra-backups` keeps (it also holds a stale `moodle` directory from Sep 11). - [ ] `backup.sh` (`/tmp/restic-env.$$`, line about 573): a `trap` so an interrupted remote restore does not leave a credentials file behind (two old ones were found on `services`). - [ ] Decide on the unused Docker volumes (`app_postgres_data`, `app_redis_data`, many anonymous ones; about 620 MB): they may hold data, so not pruned. - [ ] Verify nothing was damaged while the disk was full: `./manage health check --host services`, `./manage backup status` (was the 00:03 full snapshot taken?), Forgejo and Vaultwarden logs for `no space left`. - [ ] **The disk is too small.** 25 GB for this host went from 78% to 100% in under two weeks. Either resize the Linode `services` node (`g6-standard-2` has 80 GB; deferred until after the migration) or move to OVH `d2-4` (50 GB). Decision for the operator. - [ ] Check the disk alert path: did `HostDiskSpaceWarning` (<20% free for 10 min) reach the operator? Consider a higher bar (for example <30% on a small disk) while the disk is this size. Related: #187 (OVH migration), #220.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jfraeys/infra#285
No description provided.