Когда свободное место на диске заканчивается, df -h показывает только раздел, а du выдаёт простыню из сотен строк, в которой легко потеряться. Для быстрой диагностики удобнее два инструмента: ncdu с интерактивным браузером каталогов и dust с наглядным деревом и цветными полосами. Оба работают в терминале, не требуют графической сессии и одинаково полезны на домашнем компьютере и на сервере по SSH. Ниже — установка, повседневные сценарии, экспорт снимка файловой системы и осторожная уборка без риска удалить нужное.
Чем ncdu и dust отличаются от du
du рекурсивно обходит дерево и печатает размер каждого каталога. Формат неудобен: чтобы найти виновника, приходится вручную сужать путь и снова запускать команду. ncdu сразу строит интерактивную модель дерева, позволяет переключаться между каталогами стрелками и показывает долю каждого элемента. dust решает другую задачу: выводит отсортированный список крупнейших каталогов с процентными полосами, без полноэкранного интерфейса.
Оба считают занятые блоки, а не только длину файлов. Это важно: миллион мелких файлов может занимать гигабайты из-за размера блока, хотя суммарный размер по ls будет скромным. Ключ --apparent-size (у dust — -s) переключает расчёт на логический размер, если нужно понять структуру, а не физическое потребление.
Установка
ncdu входит в репозитории большинства дистрибутивов. dust в Debian и Ubuntu называется du-dust, в Fedora и Arch — dust; сборка из исходников через cargo тоже работает, но требует Rust.
sudo apt install ncdu du-dust
sudo dnf install ncdu dust
cargo install du-dust
ncdu --version; dust --version
На сервере без компилятора и лишних пакетов достаточно ncdu: минимум зависимостей, скромные требования и предсказуемое поведение. dust удобнее для разового обзора, когда не хочется входить в полноэкранный режим.
ncdu: навигация и удаление
Запускайте утилиту от root только при необходимости: она умеет удалять файлы прямо из интерфейса. Для начала хватит домашнего каталога, затем можно перейти к корню с ограничением одной файловой системой.
ncdu ~
sudo ncdu -x /
sudo ncdu -x --exclude='/proc' --exclude='/sys' /
ncdu -x -o /var/tmp/root-scan.json /
Ключ -x не переходит через точки монтирования, поэтому в скан не попадут сетевые ресурсы и чужие разделы. Для домашних каталогов полезен --exclude-caches: он не считает содержимое каталогов с меткой CACHEDIR.TAG, которые приложения объявили кэшем. Внутри интерфейса стрелки перемещают курсор, Enter открывает каталог, ? показывает справку. Клавиша d удаляет выбранный элемент после подтверждения, g рисует график, s сортирует по размеру, n — по имени, M — по времени изменения в режиме -e. В верхней строке виден текущий путь, а внизу — общий объём и число элементов.
Не удаляйте каталоги наугад. Сначала нажмите i и посмотрите владельца, права и время: часто «мусор» оказывается базой пакета, кэшем сборки или каталогом контейнера. Если файл открыт процессом, место не освободится до перезапуска службы. Проверить это можно через lsof.
Снимок и разбор с другого компьютера
Экспорт полезен на продакшене: тяжёлое сканирование выполняется один раз, а изучать результат можно локально, не нагружая сервер повторными проходами. Формат JSON, поэтому снимок открывается только совместимой версией ncdu; после крупного обновления проверьте чтение на тестовом файле.
ssh admin@server 'sudo ncdu -0 -o - -x /' > server-scan.json
ncdu -f server-scan.json
ncdu -o- /home | ncdu -f-
du -xhd1 /var | sort -h | tail -20
При импорте ncdu отключает обновление, удаление и запуск оболочки: снимок может не совпадать с текущим состоянием диска. Это защита от ошибок, а не ограничение. Для регулярного аудита удобно хранить сжатые снимки и сравнивать их между собой; ключ -c включает сжатие Zstandard, но совместимость с конкретной сборкой стоит проверить заранее.
dust: дерево за одну команду
dust не требует полноэкранного режима и хорошо подходит для быстрых проверок. Глубину и число строк можно ограничить, чтобы вывод оставался читаемым даже в узком терминале.
dust -d 2 -n 20 /var
dust -r -n 15 ~/Downloads
dust -s -d 1 /home
dust -i -x -d 3 /
Ключ -d задаёт глубину, -n — количество строк, -r переворачивает список, чтобы крупнейшие элементы оказались вверху, -s считает логический размер, -i скрывает скрытые файлы, -x не выходит за пределы файловой системы. Ключ -D показывает только каталоги, -F — только файлы, -z отсекает элементы меньше заданного размера, например -z 500M. Для поиска самых больших файлов удобно сочетание -F и -n.
Цветные полосы показывают вклад элемента в общий объём. Если терминал не поддерживает цвет, добавьте -c; для скриптов и журналов лучше -b, который убирает проценты и псевдографику. Вывод dust не является точной бухгалтерией: жёсткие ссылки могут учитываться иначе, чем в du, поэтому для строгих отчётов используйте du или ncdu.
Что ещё занимает место
Большие каталоги — не единственная причина переполнения. Журналы systemd, кэш пакетов, образы контейнеров и удалённые, но открытые файлы часто остаются незамеченными.
journalctl --disk-usage
sudo journalctl --vacuum-size=500M
docker system df
sudo lsof +L1 | head -20
df -i /
journalctl --vacuum-sizeуменьшает журнал до заданного размера, не удаляя активные записи;docker system dfпоказывает образы, контейнеры и тома, но очистку нужно планировать отдельно;lsof +L1находит файлы, удалённые с диска, но всё ещё открытые процессом;df -iвыявляет исчерпание inode, когда свободное место ещё есть.
Чек-лист перед удалением
- Проверьте, какому пакету принадлежит файл:
dpkg -S путьилиrpm -qf путь. - Убедитесь, что каталог не является точкой монтирования и не входит в резервную копию.
- Посмотрите открытые файлы через
lsofи активные службы черезsystemctl. - Для журналов используйте vacuum или logrotate, а не удаление открытого файла.
- Сначала освободите место на тестовой машине и только потом повторяйте на сервере.
Итог
ncdu лучше подходит для вдумчивого разбора и удаления внутри дерева, dust — для быстрого обзора и поиска крупнейших каталогов одной командой. Связка df, ncdu, dust и проверка открытых файлов закрывает большинство случаев переполнения диска. Главное правило: сначала выясните, что занимает место и кому принадлежит, и только затем удаляйте. Экспорт снимка позволяет безопасно анализировать сервер с локальной машины и возвращаться к результатам позже.