Куда делось место на диске
Классика: df говорит, что диск занят на 100%, а du по всем каталогам насчитывает едва половину. Я столько раз разбирал это заново, что записал порядок действий.
1. Кто занимает место — по-честному
df -h
du -xh --max-depth=1 / 2>/dev/null | sort -h
Ключ -x не даёт du уйти на другие файловые системы — иначе в подсчёт попадут сетевые шары и /proc. Дальше спускаемся в самый толстый каталог и повторяем. Удобнее то же самое делать в ncdu -x /, он ставится из стандартного репозитория.
2. Удалённые, но открытые файлы
Если du и df расходятся, почти всегда виноват файл, который удалили, пока процесс держал его открытым. Имени у файла уже нет, поэтому du его не видит, а место освободится только когда процесс закроет дескриптор.
lsof +L1
Чаще всего это лог, удалённый руками вместо ротации. Правильное решение — перезапустить процесс. Если перезапускать нельзя, файл можно обрезать через дескриптор (PID и номер fd берём из вывода lsof):
: > /proc/1234/fd/7
А чтобы не повторялось — настроить ротацию.
3. Кончились не байты, а иноды
Ошибка «No space left on device» при свободных гигабайтах — смотрим иноды:
df -i
Виновник обычно — каталог с миллионами мелких файлов: сессии PHP, кэш, очередь почты. Найти его помогает du --inodes -x --max-depth=1 / | sort -n.
4. Обычные подозреваемые
- Журнал systemd:
journalctl --disk-usage. Ограничить сразу —journalctl --vacuum-size=200M, навсегда —SystemMaxUse=200Mв/etc/systemd/journald.conf. - Docker:
docker system dfпокажет образы, остановленные контейнеры и тома. Логи контейнеров по умолчанию не ротируются — лимит задаётся черезlog-optsвdaemon.json. - Старые ядра в
/boot—apt autoremove. - Кэш пакетов —
apt clean.
5. Зарезервированные блоки
На ext4 по умолчанию 5% места зарезервировано за root, поэтому обычный пользователь упирается в «полный» диск раньше, чем df покажет 100%. На большом диске с данными резерв можно уменьшить:
tune2fs -l /dev/sdb1 | grep -i "reserved block count"
tune2fs -m 1 /dev/sdb1
На системном разделе я резерв не трогаю — он нужен, чтобы при заполненном диске root мог зайти и навести порядок.