linux-labs

Вики / Хранилище и ФС

Место на диске (df, du, inode)

Куда делось место и inode — df, du, поиск крупных файлов, ловушки.

Две независимые причины «диск полон»:

  • кончилось место (байты) — смотрит df -h;
  • кончились inode (числовые «слоты» файлов) — смотрит df -i. Бывает при миллионах мелких файлов; место есть, а создать файл нельзя.

Алгоритм: df -h и df -i → найти раздел → du/ncdu сверху вниз до виновника.

df -h                             # свободное место по разделам (человекочитаемо)
df -i                             # свободные inode по разделам
df -h /var                        # конкретный путь (в каком он разделе)
df -hT                            # + тип ФС

du -sh /var/*                     # размер каждого подкаталога /var
du -h --max-depth=1 / | sort -h   # топ «тяжёлых» каталогов первого уровня
du -xh --max-depth=1 /            # -x: не выходить за пределы ФС (без /proc, монтирований)
du -sh /var/log                   # сколько занимают логи
ncdu /                            # интерактивный обзор (удобнее всего; apt install ncdu)

ls -lhS | head                    # крупнейшие файлы в каталоге
find / -xdev -type f -size +500M -exec ls -lh {} + 2>/dev/null   # файлы >500 МБ

-x/-xdev — ключ к чистому результату: считать только текущую ФС, не уходя в смонтированные и виртуальные (/proc, /sys).

sudo journalctl --vacuum-time=7d  # урезать системный журнал до 7 дней
sudo journalctl --disk-usage      # сколько занимает журнал
sudo apt clean                    # кэш скачанных пакетов
sudo apt autoremove --purge       # старые ядра и зависимости
docker system df ; docker system prune -af   # образы/слои docker (часто гиганты)
du -sh ~/.cache/*                 # пользовательские кэши

df говорит «полно», а du не находит столько

Файл удалён, но открыт процессом — место не освобождается до закрытия:

sudo lsof +L1                     # файлы с 0 ссылок, но открытые (см. lsof)

Перезапусти держащий процесс (часто это лог, «ротированный» неправильно).

No space left on device, хотя df -h показывает свободное

Кончились inode: df -i. Найди каталог с тьмой мелких файлов и чисти:

for d in /*; do printf '%8s %s\n' "$(find "$d" -xdev 2>/dev/null | wc -l)" "$d"; done | sort -rn

Диск забили логи

du -sh /var/log/*; настрой ротацию (logrotate) и журнал (journalctl --vacuum-time=, см. journalctl).

Удалил файлы, а место не вернулось

Либо удалённый-но-открытый файл (см. выше lsof +L1), либо это другой раздел — проверь df -h путь.

df -h ; df -i                     # место / inode
du -xh --max-depth=1 / | sort -h  # топ каталогов (в пределах ФС)
ncdu /                            # интерактивный обзор
sudo lsof +L1                     # удалённые-но-открытые файлы
sudo journalctl --vacuum-time=7d ; sudo apt clean   # быстро освободить

См. также