# Диск сервера Linux заполнен: как найти, что занимает место

У заполненного диска обычно одна-две очевидные причины. Действуйте сверху вниз, сначала смотрите, потом удаляйте, и никогда не удаляйте файлы в /var/lib вручную, если не знаете, какой службе они принадлежат.

## 1. Определите, какая файловая система заполнена

Выполните df -h. Посмотрите на столбцы Use% и Mounted on: заполненной может оказаться файловая система / или отдельная точка монтирования /var, /home или /data, а очистка не той ничего не изменит.
Выполните также df -i. В файловой системе может быть свободное место, но не остаться свободных inodes — так бывает, когда накапливаются миллионы мелких файлов (сессии, почтовые очереди, файлы кэша). Если IUse% близок к 100%, нужно искать множество мелких файлов, а не несколько больших.

## 2. Найдите самые большие каталоги

Выполните sudo du -xh --max-depth=1 / | sort -h и прочитайте последние строки. Параметр -x ограничивает поиск одной файловой системой, поэтому смонтированные диски и виртуальные файловые системы не искажают результат. Повторите то же внутри самого большого каталога, например sudo du -xh --max-depth=1 /var | sort -h.
Если установлен ncdu (sudo apt install ncdu в Debian и Ubuntu), команда sudo ncdu -x / позволяет интерактивно просматривать те же данные.

## 3. Проверьте удалённые, но всё ещё открытые файлы

Если du показывает намного меньше, чем df, возможно, какой-то процесс всё ещё держит открытым удалённый файл, часто это большой журнал. Команда sudo lsof +L1 выводит открытые файлы с нулевым числом ссылок. Место освободится, когда процесс закроет файл, а для этого обычно нужно перезапустить службу, которой он принадлежит. Делайте это в спокойный момент, а не в пик запросов.

## 4. Просмотрите обычных подозреваемых

Журналы: загляните в /var/log и проверьте журнал командой journalctl --disk-usage. Если он большой, см. наше руководство по ограничению размера journald.
Пакеты: sudo apt clean удаляет загруженные файлы пакетов; sudo apt autoremove перечисляет ненужные пакеты и старые ядра и показывает, что будет удалено, до вашего подтверждения. Оставьте работающее ядро и одну предыдущую версию.
Docker: docker system df показывает образы, контейнеры, тома и кэш сборки. docker system prune удаляет остановленные контейнеры, неиспользуемые сети и «висячие» образы; тома он не удаляет, если не добавить --volumes, поэтому внимательно читайте запрос, прежде чем отвечать.
Snap: snap list --all показывает старые ревизии отключённых snap-пакетов, которые можно удалять по одной командой snap remove NAME --revision=NUMBER.

## 5. После освобождения места

Снова выполните df -h и убедитесь, что службы, остановившиеся из-за заполненного диска, работают (systemctl --failed). Базу данных, столкнувшуюся с заполненным диском, может потребоваться перезапустить или проверить, прежде чем ей доверять.
Затем задайте ограничение, чтобы ситуация не повторилась: ротация журналов, лимит journald и оповещение до того, как диск заполнится на 90%.

## FAQ

**Безопасно ли удалять файлы в /var/log?**

Ротированные и сжатые журналы (например, syslog.1 или файлы .gz) обычно можно удалить, когда они вам больше не нужны. Не удаляйте текущий файл журнала работающей службы: аккуратно обрежьте его или поручите это logrotate, предварительно выяснив, чего ожидает служба.

**Почему df показывает заполненный диск, а суммы по du не сходятся?**

Обычно удалённый файл всё ещё удерживается открытым работающим процессом (см. lsof +L1), либо числа относятся к разным файловым системам. Используйте du -x и сравнивайте с df для той же точки монтирования.

**Стоит ли выполнять docker system prune на рабочем сервере?**

Только после docker system df и проверки того, что не используется. Команда может удалить образы, которые вы всё ещё собираетесь запускать. Тома по умолчанию сохраняются, но убедитесь, что у вас есть резервные копии всего важного.

Source: https://raincleaner.eu/ru/guides/linux-server-disk-full-find-what-is-using-space