Изчерпаното място е най-честата причина сървърът да спре да работи без никакъв зъл умисъл. Сайтът връща 500, базата не пише, пощата не излиза — а df -h при това показва няколко свободни гигабайта. Да разгледаме три случая, в които става така, и покрай това какво е добре да се знае за SMART.
Първи случай: свършили са inode
Файловата система държи два ограничени ресурса: място за съдържание и записи за файловете. Вторият свършва независимо от първия:
df -h
df -i
Ако при втората команда IUse% е 100, става дума за inode. Място има, но не може да се създаде нито един файл, дори празен.
Виновниците са винаги едни и същи: милиони мънички файлове. PHP сесии в /var/lib/php/sessions, на които се е счупило почистването. Кеш на приложението без изчистване. Заседнала пощенска опашка. Директория с миниатюри. Намират се така:
sudo find / -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -20
Командата извежда директориите с най-много файлове. На голяма система работи няколко минути — това е нормално.
Втори случай: файлът е изтрит, но мястото не се е върнало
По-коварна ситуация. Някой е изтрил с rm подут журнал, но процесът, който е писал в него, все още го държи отворен. Файлът вече го няма в директорията, мястото остава заето, и така ще е до рестарта на процеса.
sudo lsof +L1
Командата показва файлове без препратки във файловата система, които все пак се държат от процес. Лекува се с рестарт или меко презареждане на този процес, а не с търсене „къде отидоха гигабайтите“.
Оттук правилото: подут журнал не се изтрива, а се занулява — тогава отвореният дескриптор остава работещ:
sudo truncate -s 0 /var/log/huge.log
И веднага след това се настройва ротация, иначе след седмица всичко ще се повтори.
Трети случай: изяли са го журналите
Къде точно е отишло мястото, се вижда при слизане ниво по ниво:
sudo du -x -h --max-depth=1 / | sort -h
sudo du -x -h --max-depth=1 /var | sort -h
Ключът -x не позволява слизане в други файлови системи; без него броенето се заравя в /proc и в монтирани мрежови ресурси. По-удобно е всичко това да се прави в ncdu, ако е налично.
Обичайните лакомци:
- journald. Решава една команда:
journalctl --disk-usage. Ограничава се с редаSystemMaxUse=500Mв/etc/systemd/journald.conf, еднократно се чисти сjournalctl --vacuum-size=200M; - журналите на инструментите за сигурност. Suricata със стандартната конфигурация записва тридесет вида събития и не настройва ротация след себе си — на реален сървър това даде 15 ГБ за две денонощия. Същото става с audit.log и с журналите за отстраняване на грешки на nginx;
- резервни копия, слагани на същия диск и никога изтривани;
- кешът на apt —
apt cleanпонякога връща няколко гигабайта.
Отделно за /boot
Малък дял, който се запълва от старите ядра. Сам по себе си не поваля сайта, но напълно спира обновяванията: новото ядро не се инсталира, а зад него стои цялата опашка от пакети. Лекува се с apt autoremove --purge и се предотвратява с включване на автоматичното изтриване на неизползваните ядра в настройките на автоматичните обновявания.
SMART: кои атрибути имат значение
Веднага уговорка: на виртуален сървър SMART обикновено е недостъпен — дискът е виртуален, физическият под него не се вижда. Това не е повреда, просто няма данни. Всичко по-нататък се отнася за отделни сървъри и собствен хардуер.
sudo smartctl -a /dev/sda
Редът SMART overall-health self-assessment test result: PASSED не е повод за спокойствие: остава зелен практически до самата повреда. Гледат се конкретните броячи:
- 5, Reallocated_Sector_Ct — преместени сектори. Ненулева стойност означава, че дискът вече се разпада; ако расте с времето — сменяйте без отлагане;
- 197, Current_Pending_Sector — нечетими сектори, чакащи решение. Най-тревожният от всички: обикновено означава, че част от данните вече не може да се спаси;
- 198, Offline_Uncorrectable — същото, потвърдено с проверка;
- SSD: Percentage Used / Media_Wearout_Indicator — изчерпан ресурс за запис. Предвидима величина, по която се планира смяната.
А температурата и часовете работа сами по себе си не казват нищо: диск с пет години стаж и нулеви броячи на грешки е по-надежден от нов с единица в атрибут 197.
Смисълът на наблюдението
Всичко по-горе е реакция на вече случилото се. А запълването на диска и износването на SSD са бавни и напълно предвидими процеси: графиката на заетостта за две седмици показва датата, на която мястото ще свърши, много преди това да стане. Разликата между „сайтът лежи от три през нощта“ и „в четвъртък трябва да се почистят журналите“ е само в наличието на число пред очите. Как изглежда това в цялост, показва демонстрационната страница по-долу.