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 redomSystemMaxUse=500Mu/etc/systemd/journald.confi čisti jednom sajournalctl --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 cleanpovremeno 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.