Manglende diskplads er den hyppigste grund til, at en server holder op med at virke, uden at nogen har villet noget ondt. Hjemmesiden svarer 500, databasen skriver ikke, posten går ikke ud — og df -h viser samtidig nogle ledige gigabyte. Lad os gennemgå tre tilfælde, hvor det sker, og samtidig det, du bør vide om SMART.
Tilfælde et: inoderne slap op
Et filsystem har to begrænsede ressourcer: plads til indhold og poster om filer. Den anden slipper op uafhængigt af den første:
df -h
df -i
Er IUse% i den anden kommando 100, drejer det sig om inoder. Pladsen findes, men det er umuligt at oprette en eneste fil, ikke engang en tom.
De skyldige er altid de samme: millioner af bittesmå filer. PHP-sessioner i /var/lib/php/sessions, hvor oprydningen er gået i stykker. En applikationscache uden rensning. En låst mailkø. En mappe med miniaturebilleder. Sådan finder du dem:
sudo find / -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -20
Kommandoen udskriver mapperne med flest filer. På et stort system tager den nogle minutter — det er normalt.
Tilfælde to: filen er slettet, men pladsen kom ikke tilbage
En mere lumsk situation. Nogen slettede en oppustet logfil med rm, men processen, der skrev til den, holder den stadig åben. Filen findes ikke længere i mappen, pladsen forbliver optaget, og sådan er det, indtil processen genstartes.
sudo lsof +L1
Kommandoen viser filer uden referencer i filsystemet, som alligevel holdes af en proces. Det afhjælpes med en genstart eller en blød genindlæsning af den proces, ikke med at lede efter »hvor blev gigabytene af«.
Deraf reglen: en oppustet logfil slettes ikke, men nulstilles — så forbliver det åbne filhåndtag brugbart:
sudo truncate -s 0 /var/log/huge.log
Og lige derefter sætter man rotation op, ellers gentager alt sig om en uge.
Tilfælde tre: logfilerne åd det
Hvor pladsen præcis blev af, ses, når man går niveau for niveau:
sudo du -x -h --max-depth=1 / | sort -h
sudo du -x -h --max-depth=1 /var | sort -h
Flaget -x forhindrer nedstigning i andre filsystemer; uden det kryber optællingen ind i /proc og i monterede netværksressourcer. Nemmere er det at gøre alt dette i ncdu, hvis det er tilgængeligt.
De sædvanlige slugere:
- journald. Én kommando afgør:
journalctl --disk-usage. Begrænses med linjenSystemMaxUse=500Mi/etc/systemd/journald.conf, engangsrensning medjournalctl --vacuum-size=200M; - sikkerhedsværktøjernes logfiler. Suricata skriver med standardopsætningen tredive typer hændelser og sætter ikke rotation op efter sig — på en virkelig server blev det 15 GB på to døgn. Det samme sker med audit.log og med nginx' fejlsøgningslogfiler;
- sikkerhedskopier lagt på samme disk og aldrig slettet;
- apt-cachen —
apt cleangiver undertiden et par gigabyte tilbage.
Særskilt om /boot
En lille partition, der fyldes af gamle kerner. I sig selv vælter den ikke hjemmesiden, men den standser opdateringerne helt: den nye kerne installeres ikke, og bag den står hele pakkekøen stille. Det afhjælpes med apt autoremove --purge og forebygges ved at slå automatisk fjernelse af ubrugte kerner til i indstillingerne for automatiske opdateringer.
SMART: hvilke attributter der betyder noget
Først et forbehold: på en virtuel server er SMART som regel utilgængelig — disken er virtuel, og den fysiske ses ikke under den. Det er ikke en fejl, der findes bare ingen data. Alt nedenfor gælder dedikerede servere og eget hardware.
sudo smartctl -a /dev/sda
Linjen SMART overall-health self-assessment test result: PASSED er ingen grund til ro: den forbliver grøn praktisk talt helt frem til nedbruddet. Det, man skal se på, er de enkelte tællere:
- 5, Reallocated_Sector_Ct — omplacerede sektorer. En værdi, der ikke er nul, betyder, at disken allerede er på vej i stykker; vokser den over tid — udskift uden tøven;
- 197, Current_Pending_Sector — ulæselige sektorer, der afventer en afgørelse. Den mest foruroligende af alle: den betyder som regel, at nogle data allerede ikke kan reddes;
- 198, Offline_Uncorrectable — det samme, bekræftet af en kontrol;
- SSD: Percentage Used / Media_Wearout_Indicator — opbrugt skrivekapacitet. En forudsigelig størrelse, man planlægger udskiftningen efter.
Temperatur og driftstimer siger derimod ingenting i sig selv: en disk med fem års drift og nulstillede fejltællere er sikrere end en ny med et ettal i attribut 197.
Pointen med at holde øje
Alt ovenstående er reaktion på det, der allerede er sket. Samtidig er både diskens opfyldning og SSD'ens slid langsomme og fuldstændig forudsigelige forløb: en kurve over pladsen de sidste to uger viser datoen, hvor pladsen slipper op, længe før det sker. Forskellen mellem »hjemmesiden har ligget nede siden tre om natten« og »på torsdag skal logfilerne ryddes« er blot at have et tal foran øjnene. Hvordan det ser ud i sin helhed, viser demonstrationssiden nedenfor.