Vyčerpané miesto je najčastejšia príčina toho, prečo server prestane fungovať bez akéhokoľvek zlého úmyslu. Web vracia 500, databáza nezapisuje, pošta neodchádza — a df -h pritom ukazuje niekoľko voľných gigabajtov. Prejdime si tri prípady, keď k tomu dochádza, a pri tej príležitosti aj to, čo je dobré vedieť o SMART.
Prípad prvý: došli i-uzly
Súborový systém drží dva obmedzené zdroje: miesto pre obsah a záznamy o súboroch. Druhý dochádza nezávisle od prvého:
df -h
df -i
Ak je pri druhom príkaze IUse% rovné 100, ide o i-uzly. Miesto je, ale nedá sa vytvoriť ani jeden súbor, ani prázdny.
Vinníci sú vždy tí istí: milióny drobných súborov. PHP relácie v /var/lib/php/sessions, ktorým sa pokazilo upratovanie. Cache aplikácie bez čistenia. Zaseknutý poštový rad. Adresár s náhľadmi. Nájdu sa takto:
sudo find / -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -20
Príkaz vypíše adresáre s najväčším počtom súborov. Na veľkom systéme beží niekoľko minút — to je normálne.
Prípad druhý: súbor zmazaný, ale miesto sa nevrátilo
Zákernejšia situácia. Niekto zmazal príkazom rm nabobtnaný log, ale proces, ktorý doň zapisoval, ho stále drží otvorený. Súbor už v adresári nie je, miesto zostáva obsadené, a tak to bude až do reštartu procesu.
sudo lsof +L1
Príkaz ukáže súbory bez odkazov v súborovom systéme, ktoré napriek tomu drží nejaký proces. Lieči sa to reštartom alebo mäkkým znovunačítaním onoho procesu, nie hľadaním „kam sa podeli gigabajty“.
Odtiaľ pravidlo: nabobtnaný log sa nemaže, ale nuluje — otvorený deskriptor potom zostane funkčný:
sudo truncate -s 0 /var/log/huge.log
A hneď potom sa nastaví rotácia, inak sa o týždeň všetko zopakuje.
Prípad tretí: zožrali to logy
Kam presne miesto išlo, je vidieť pri zostupe po úrovniach:
sudo du -x -h --max-depth=1 / | sort -h
sudo du -x -h --max-depth=1 /var | sort -h
Prepínač -x nedovolí zostúpiť do iných súborových systémov; bez neho sa počítanie zavŕta do /proc a do pripojených sieťových prostriedkov. Pohodlnejšie je to všetko robiť v ncdu, ak je k dispozícii.
Obvyklí žrúti:
- journald. Rozhodne jediný príkaz:
journalctl --disk-usage. Obmedzuje sa riadkomSystemMaxUse=500Mv/etc/systemd/journald.conf, jednorazovo čistíjournalctl --vacuum-size=200M; - logy bezpečnostných nástrojov. Suricata s predvolenou konfiguráciou zapisuje tridsať typov udalostí a rotáciu po sebe nenastavuje — na skutočnom serveri z toho bolo 15 GB za dva dni. To isté sa stáva s audit.log a s ladiacimi logmi nginxu;
- zálohy ukladané na ten istý disk a nikdy nemazané;
- cache aptu —
apt cleanobčas vráti pár gigabajtov.
Zvlášť o /boot
Malý oddiel, ktorý zapĺňajú staré jadrá. Sám osebe web nepoloží, zato úplne zastaví aktualizácie: nové jadro sa nenainštaluje a za ním stojí celý rad balíkov. Lieči sa to príkazom apt autoremove --purge a predchádza zapnutím automatického mazania nepoužívaných jadier v nastavení automatických aktualizácií.
SMART: ktoré atribúty majú význam
Hneď výhrada: na virtuálnom serveri býva SMART nedostupný — disk je virtuálny a fyzický pod ním nie je vidieť. Nie je to porucha, jednoducho nie sú dáta. Všetko nasledujúce sa týka dedikovaných serverov a vlastného hardvéru.
sudo smartctl -a /dev/sda
Riadok SMART overall-health self-assessment test result: PASSED nie je dôvod na pokoj: zostáva zelený prakticky až do poruchy. Pozerať sa treba na konkrétne počítadlá:
- 5, Reallocated_Sector_Ct — premapované sektory. Nenulová hodnota znamená, že disk sa už sype; ak rastie v čase — vymeniť bez odkladu;
- 197, Current_Pending_Sector — nečitateľné sektory čakajúce na rozhodnutie. Najznepokojivejší zo všetkých: obvykle znamená, že časť dát sa už zachrániť nedá;
- 198, Offline_Uncorrectable — to isté, potvrdené kontrolou;
- SSD: Percentage Used / Media_Wearout_Indicator — vyčerpaná zápisová životnosť. Predvídateľná veličina, podľa ktorej sa plánuje výmena.
Naopak teplota a hodiny prevádzky samy osebe nehovoria nič: disk s piatimi rokmi prevádzky a nulovými počítadlami chýb je spoľahlivejší než nový s jednotkou v atribúte 197.
Zmysel sledovania
Všetko vyššie uvedené je reakcia na to, čo sa už stalo. Pritom aj zapĺňanie disku, aj opotrebenie SSD sú pomalé a úplne predvídateľné procesy: graf obsadenosti za dva týždne ukáže dátum, keď miesto dôjde, dávno predtým, než sa to stane. Rozdiel medzi „web leží od tretej ráno“ a „vo štvrtok treba vyčistiť logy“ je len v tom, mať číslo pred očami. Ako to vyzerá ako celok, ukazuje ukážková stránka nižšie.