Одна из самых частых ситуаций в практике администрирования: базы данных начинают отдавать ошибки, веб-сервер перестает записывать сессии, а при попытке дополнить файл конфигурации терминал сыплет сообщениями No space left on device. Диск забит на 100%. Хуже всего, когда это происходит внезапно, и вам нужно прямо сейчас найти виновника, чтобы поднять упавшие сервисы.
Для быстрой диагностики дисковой подсистемы в Linux есть два базовых инструмента: df и du. Они выполняют принципиально разные задачи: один показывает общую картину по смонтированным разделам, а второй — детально препарирует вес конкретных папок и файлов. Сегодня разберем, как с их помощью за полминуты локализовать и устранить утечку дискового пространства.
Шаг 1: Оценка масштаба бедствия через df
Первым делом нужно понять, какой именно раздел диска переполнился. Для этого используется утилита df (Disk Free). Запускать её без флагов бессмысленно — она выведет размер в системных блоках, в которых сложно ориентироваться глазами. Всегда используем флаг -h (Human-readable), который переводит байты в понятные мегабайты и гигабайты:
df -h
Смотрим на колонку Use% (процент заполнения) и ищем корневой раздел / (или точку монтирования, где лежат ваши базы и сайты, например, /var). Если там красуется 99% или 100%, переходим к хирургическому поиску.
Нюанс для продвинутых — Иноды (Inodes):
Иногда бывает мистическая ситуация: df -h показывает, что свободного места еще навалом (например, занято всего 40%), но система все равно орет, что места нет. Это значит, что у вас закончились иноды — индексные дескрипторы файлов. В Linux количество файлов в системе ограничено при форматировании диска. Если какой-то скрипт наплодил миллионы мелких файлов сессий по 1 байту, место будет, а иноды кончатся. Проверяем их флагом -i:
df -hi
Шаг 2: Ищем виновника через du
Когда мы поняли, что забит корень, нам нужно узнать, какая именно директория сожрала гигабайты. Для этого берем утилиту du (Disk Usage). Если запустить её просто так в корне, она начнет сканировать абсолютно каждый файл, превратив терминал в бесконечную ленту.
Чтобы сканирование шло быстро и структурированно, используем правильную комбинацию флагов: -h (человеческий вид), -d 1 (Depth = 1, глубина сканирования только на один уровень вложенности, чтобы не проваливаться глубоко раньше времени):
sudo du -h -d 1 /
Команда выдаст вес каждой корневой папки (/var, /root, /home, /etc). Допустим, вы увидели, что папка /var весит 80 ГБ. Отлично, цель локализована. Проваливаемся на уровень глубже:
sudo du -h -d 1 /var/
Так, шаг за шагом (например, дойдя до /var/log/), вы упретесь в конкретную папку с тяжелым логом или разросшимся кэшем.
Ультимативный CLI-скрипт для быстрого поиска топ-10 тяжелых папок
Чтобы не ходить по папкам вручную, админы используют связку из du, сортировки sort и ограничителя строк head через системный конвейер. Одной строкой выводим топ-10 самых тяжелых объектов в текущей директории:
sudo du -sh * | sort -rh | head -n 10
Физика команды:
du -sh *— считает суммарный (summary) вес каждого объекта в текущей папке отдельно.sort -rh— сортирует полученный список по числовому значению в обратном порядке (от большего к меньшему), учитывая суффиксы G, M, K (флаг-h).head -n 10— отсекает всё лишнее, оставляя на экране только первые 10 строк.
Важная ловушка: Файлы-призраки (Deleted, но занято)
Бывает ситуация: вы нашли тяжелый лог через du, удалили его командой rm, но df продолжает утверждать, что диск забит на 100%.
Почему так происходит? В Linux файл физически удаляется с диска только тогда, когда закрываются все удерживающие его дескрипторы. Если веб-сервер или скрипт продолжал писать в этот лог в момент удаления, ядро пометило файл как (deleted), но не освободило место, пока процесс жив. Находим таких призраков командой:
sudo lsof +L1 | grep -i delete
Решение простое: перезапустить процесс, который держит дескриптор удаленного файла (например, sudo systemctl restart nginx), и место мгновенно вернется в систему.
Заключение
Понимание разницы между df и du, а также умение быстро отсортировать вывод через конвейер спасает сервер от долгих простоев. Используйте эти инструменты для регулярного контроля дисков, не дожидаясь критического заполнения системы.
