Nestanak prostora najčešći je razlog zbog kojeg server prestane da radi bez ikakve zle namere u igri. Sajt vraća 500, baza ne upisuje, pošta ne izlazi — a df -h u međuvremenu prijavljuje nekoliko slobodnih gigabajta. Pređimo kroz sva tri slučaja u kojima se to dešava, i kroz ono što vredi znati o SMART-u.

Prvi slučaj: nestali su inode-ovi

Sistem fajlova drži dva ograničena resursa: prostor za sadržaj i zapise o fajlovima. Drugo se troši nezavisno od prvog:

df -h
df -i

Ako je IUse% u drugoj komandi 100, problem su inode-ovi. Prostora ima, ali se ne može kreirati nijedan fajl, čak ni prazan.

Krivci su uvek isti: milioni sićušnih fajlova. PHP sesije u /var/lib/php/sessions kojima se pokvarilo sakupljanje smeća. Keš aplikacije koji se nikada ne čisti. Zaglavljen red pošte. Direktorijum sličica. Možete ih pronaći ovako:

sudo find / -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -20

Komanda navodi direktorijume sa najviše fajlova. Na velikom sistemu radi minutima — to je normalno.

Drugi slučaj: fajl je obrisan a prostor se nije vratio

Još podmuklija situacija. Neko je pomoću rm uklonio prerastao dnevnik, ali ga proces koji u njega piše i dalje drži otvorenim. Fajl više nije u direktorijumu, prostor je i dalje zauzet i takav će ostati dok se proces ne pokrene ponovo.

sudo lsof +L1

Komanda prikazuje fajlove sa nula veza u sistemu fajlova ali koje proces i dalje drži. Lek je ponovno pokretanje ili nežno ponovno učitavanje tog procesa, a ne lov na „gde su otišli gigabajti".

Otuda pravilo: prerastao dnevnik se ne briše nego skraćuje, čime otvoreni deskriptor ostaje upotrebljiv:

sudo truncate -s 0 /var/log/huge.log

I odmah zatim podesite rotaciju — inače se sve ponavlja u roku od nedelju dana.

Treći slučaj: dnevnici su ga pojeli

Gde je tačno otišao prostor vidi se silaskom nivo po nivo:

sudo du -x -h --max-depth=1 / | sort -h
sudo du -x -h --max-depth=1 /var | sort -h

Zastavica -x sprečava lutanje po drugim sistemima fajlova; bez nje brojanje otpuzi u /proc i na mrežne priključke. Sve je to udobnije u ncdu, ako je dostupan.

Uobičajeni proždrljivci:

  • journald. Jedna komanda to rešava: journalctl --disk-usage. Ograničava se redom SystemMaxUse=500M u /etc/systemd/journald.conf i čisti jednom sa journalctl --vacuum-size=200M;
  • dnevnici bezbednosnih alata. Suricata sa podrazumevanom konfiguracijom upisuje tridesetak vrsta događaja i sebi ne podešava nikakvu rotaciju — na stvarnom serveru to je za dva dana proizvelo 15 GB. Isto se dešava sa audit.log i sa dnevnicima za otklanjanje grešaka u nginx-u;
  • rezervne kopije upisane na isti disk i nikada uklonjene;
  • apt kešapt clean povremeno vrati koji gigabajt.

Nekoliko reči o /boot

Mala particija koja se puni starim jezgrima. Sama po sebi ne obara sajt, ali potpuno zaustavlja ažuriranja: novo jezgro se neće instalirati i ceo red paketa zaglavi iza njega. Leči se sa apt autoremove --purge, a sprečava uključivanjem automatskog uklanjanja nekorišćenih jezgara u podešavanjima automatskih ažuriranja.

SMART: koji atributi su bitni

Prvo ograda: na virtuelnom serveru SMART obično nije dostupan — disk je virtuelan i ne vidite fizički ispod njega. To nije kvar, prosto nema podataka. Sve što sledi odnosi se na namenske servere i sopstveni hardver.

sudo smartctl -a /dev/sda

Red SMART overall-health self-assessment test result: PASSED nije razlog za opuštanje: ostaje zelen praktično do smrti diska. Gledati treba konkretne brojače:

  • 5, Reallocated_Sector_Ct — prealocirani sektori. Vrednost različita od nule znači da disk već propada; rast tokom vremena znači zamenite ga bez odlaganja;
  • 197, Current_Pending_Sector — sektori koji se ne mogu pročitati i čekaju odluku. Najuznemirujući od svih: obično znači da je deo podataka već nepovratan;
  • 198, Offline_Uncorrectable — isto to, potvrđeno proverom;
  • SSD: Percentage Used / Media_Wearout_Indicator — potrošena izdržljivost na upis. Predvidiva brojka, i ona po kojoj se planira zamena.

Temperatura i sati rada, nasuprot tome, sami po sebi ne govore ništa: disk sa pet godina rada i nultim brojačima grešaka pouzdaniji je od novog sa jedinicom u atributu 197.

Smisao praćenja

Sve gore navedeno je reakcija na nešto što se već dogodilo. A ipak su i disk koji se puni i habanje SSD-a spori, potpuno predvidivi procesi: grafik popunjenosti za dve nedelje pokazuje datum kada će prostora nestati mnogo pre nego što se to desi. Razlika između „sajt je pao od tri ujutru" i „u četvrtak treba počistiti dnevnike" nije ništa drugo do to da brojku imate pred sobom. Kako to izgleda sastavljeno pokazuje demo stranica ispod.