De app retourneert 500. SSH werkt nog steeds. df -h toont 100% op /. De reflex: rm -rf /var/log/*.log. Dat maakt 200 MB vrij - en de schijf is binnen twee uur vol omdat niemand zag dat MySQL binlog- of Docker-logs 40 GB in beslag namen.
Een volle schijf is een symptoom, geen diagnose.
Snel lezen df/du
df -hT: bestandssysteemtype, inodes (df -i). du -xh / --max-diepte=1 op mountpunt.
Vergelijk df versus totaal - gap = verwijderde geopende bestanden of verborgen mount.
Vaak voorkomende boosdoeners
| Bron | Waar te kijken |
|---|---|
| gejournaliseerd | journalctl --schijfgebruik |
| Dokwerker | docker-systeem df -v |
| MySQL-binlog | /var/lib/mysql |
| Applogs | /var/log, opslag/logboeken |
| Kernen | /var/crash, kerndumps |
| Lokale back-ups | /back-up, /tmp |
Tijdlijn: vind /var -mtime -1 -size +100M.
Verwijderd maar open
lsof +L1 | grep verwijderd — klassiek na mislukte rotatie of groot log verwijderd zonder HUP.
Oplossing: app opnieuw laden, php-fpm/mysql opnieuw opstarten, niet alleen rm.
Noodacties bevolen
- Identificeer de top 3 bestanden.
- Vacuümjournaal indien > 500 MB.
- Bekend logbestand afkappen (copytruncate) versus verwijderen.
- Docker pruim na lijstvolumes.
- Vergroot indien mogelijk het wolkenvolume vóór de operatie.
Duurzame preventie
Monitoring inode + ruimte. Logrotatie getest. SystemMaxUse= gejournaliseerd. Docker --log-opt max-size=10m. Waarschuwingsrunbook gekoppeld aan de juiste koppeling.
Runbook 15 minuten
Minuut 0–3: df -hT + df -i + du -xh / --max-diepte=1.
Minuut 3-6: journalctl --disk-usage, docker system df indien van toepassing.
Minuut 6–9: lsof +L1 | head als df/du gap.
Minuut 9–12: gerichte actie (vacuüm, houtroté inkorten, vermelde dockervolumes snoeien).
Minuut 12–15: df verificatie + monitoringbevestigingswaarschuwing + ticket voor de hoofdoorzaak.
Verboden: rm -rf zonder top 3 mappen geïdentificeerd. Verplicht: postmortemaantekening bij >80% productimpact.
Typisch post-mortem
Tijdlijn: waarschuwing 80% genegeerd → 95% → 100% → storing. Hoofdoorzaak: foutopsporingslogboek van toepassing vrijdag geactiveerd zonder rotatie. Actie: prod op logboekniveau + waarschuwing 85% + runbook.
Capaciteit: voorspelde groeilogboeken MB/dag × retentie.
Schijf automatisch schalen in de cloud, indien beschikbaar: script laat het bestandssysteem groeien na het wijzigen van de grootte.
Automatische dagelijkse cloud-snapshots zonder levenscyclus: accumulatie van snapshots = bovenliggende schijf indirect vol - beoordeling van beleidssnapshots.
Mail postfix/exim-wachtrij geblokkeerde schijf vol: enorme achterstand bij het herstellen - controleer de statistiek van de wachtrijlengte.
Voorspelbare groei
Toegangslogboeken ×10 tijdens promotie: rotatie vóór inrichting per uur tijdelijk of schijfupgrade voor campagne.
MySQL binlog vervaldatum: expire_logs_days of max_binlog_size — binlog vergeten = volledige schijf gegarandeerd onder schrijfzwaar.
ZFS/btrfs-snapshots tellen de ruimte — maak geen snapshots van een al volle schijf in een lus.
Operationele samenvatting
Volledige schijfproductie op Linux is bijna altijd voorspelbaar met 80/90 waarschuwingen, geteste logrotatie en kennis van de consument (journaal, Docker, binlog, lokale back-ups). In noodgevallen: diagnose met df, du, lsof vóór rm.
Cloud: vergroot het volume veiliger dan blind zuiveren als er sprake is van legitieme groei. Verplichte post-mortem als impact op de klant – vaak vergeten foutopsporingslogboek geactiveerd.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Post-mortem
Debug log vrijdag zonder rotatie. De kortstondige opslag van K8 doodt pods voordat het knooppunt vol is.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.
Beslis en ga vooruit zonder blinde vlek
- Runbook 15 minuten —
df -hT,df -i,dutopniveau, journalctl --disk-usage, docker-systeem df. - Zoeken naar geopende verwijderde bestanden —
lsof +L1als verschil df/du. - Gerichte actie — vacuümlogboek, logboek roté afkappen, vermelde dockervolumes snoeien; nooit rm -rf zonder top 3 dirs.
- Waarschuwing over het derivaat — groei in GB/dag, niet slechts een drempel van 90%.
- Post-mortem indien impact op product — hoofdoorzaak dezelfde week gedocumenteerd.
Monitor schijf en inode op VPS via de vergelijker en de overzicht.
Veelgestelde vragen
df zegt 100% maar kan niets vinden?
Verwijderde bestanden zijn nog steeds geopend door een proces (verwijderd maar open). lsof +L1 of start de betreffende dienst opnieuw.
Wat moet u als eerste zuiveren in een noodgeval?
journalctl --vacuum, oude verrotte logs, /tmp — nooit /var/lib zonder identificatie (DB, docker).
Docker vult vaak waar?
/var/lib/docker/overlay2, json-bestandslogboeken niet beperkt, verweesde volumes.
Hoe voorkomen?
80/90% waarschuwingen, logroteren, journald-limiet, docker-logboek kiest voor maximale grootte.
Volgende 100% schijf: voer du en lsof +L1 uit vóór elke rm - uw toekomst zal u dankbaar zijn.
