Брак місця — найчастіша причина, з якої сервер перестає працювати без жодного злого наміру. Сайт віддає 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 — повільні, цілком передбачувані процеси: графік заповнення за два тижні показує дату, коли місце закінчиться, задовго до самої події. Різниця між «сайт лежить із третьої ночі» і «в четвер треба почистити журнали» — лише в тому, що цифра перед очима. Який вигляд це має зібраним, показує демосторінка нижче.