Linux How-to

Как найти большие файлы и освободить место на Linux

Диск заполнился на 100%. Разбираем, чем он занят, находим крупные файлы и освобождаем место — без риска удалить лишнее.

Проверено: Ubuntu 24.04, Debian 12 Версия: coreutils 9.x Нужно знать: Базовый Linux, SSH
Как найти большие файлы и освободить место на Linux

Сервер встал с ошибкой No space left on device. Первая задача — понять, что именно съело диск, и только потом что-то удалять.

Что решает эта инструкция

Пошаговый разбор: сколько места занято, какие каталоги самые тяжёлые, какие файлы можно безопасно удалить. Отдельно — частая ловушка, когда место занято, но файлов нет.

Когда это нужно

  • Сервис перестал писать логи или БД ушла в read-only
  • Мониторинг прислал алерт о заполнении диска
  • Плановая уборка перед добавлением новых сервисов

Шаг 1: посмотреть общую картину

df -h

Ключ -h выводит размеры в человекочитаемом виде. Смотрите на колонку Use% и на точку монтирования — часто заполняется не корень, а отдельный раздел вроде /var.

Отдельно проверьте inode. Их можно исчерпать при нормальном свободном месте — тогда система тоже откажется создавать файлы:

df -i

Шаг 2: найти тяжёлые каталоги

du -h --max-depth=1 / 2>/dev/null | sort -rh | head -20

Что происходит:

  • --max-depth=1 — не углубляться дальше первого уровня, иначе вывод будет бесконечным
  • 2>/dev/null — убрать ошибки доступа к /proc и /sys
  • sort -rh — сортировка по убыванию с учётом суффиксов K/M/G

Дальше спускайтесь в самый тяжёлый каталог и повторяйте:

du -h --max-depth=1 /var 2>/dev/null | sort -rh | head -10

Шаг 3: найти конкретные файлы

find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}'

Ключ -xdev запрещает find уходить на другие файловые системы — без него команда полезет в сетевые монтирования и будет работать очень долго.

Совет. Если доступен ncdu, он удобнее: интерактивная навигация по дереву с размерами. Ставится одной командой apt install ncdu, запускается как ncdu -x /.

Шаг 4: типовые источники мусора

Журналы systemd. Часто занимают гигабайты:

journalctl --disk-usage
journalctl --vacuum-time=7d

Кэш пакетного менеджера:

apt clean

Старые ядра в /boot:

apt autoremove --purge

Ротация логов в /var/log — файлы с суффиксами .1, .gz. Если их много, стоит пересмотреть настройки logrotate, а не удалять вручную каждый раз.

Проверка результата

df -h /

Свободное место должно вырасти. Если нет — переходите к разделу ниже.

Возможные проблемы

Файлы удалены, но место не освободилось

Классика. Процесс держит открытым дескриптор удалённого файла — место вернётся только после его перезапуска. Найти такие файлы:

lsof +L1 2>/dev/null | grep -v '^COMMAND'

Колонка NLINK будет равна нулю. Перезапустите указанный сервис — место освободится сразу.

du показывает меньше, чем df

Та же причина: du считает файлы в каталогах, df — реально занятые блоки. Разница как раз и есть удалённые, но ещё открытые файлы.

Осторожно. Не удаляйте файлы в /var/lib — там лежат данные баз, пакетного менеджера и Docker. Прежде чем удалять что-то в /var, выясните, какой сервис это создал.

Итог

Порядок действий: df -hdu --max-depth=1 по подозрительному каталогу → find -size +100M для точечного поиска. Если после удаления место не вернулось — ищите процессы с открытыми дескрипторами через lsof +L1.