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