Когда df показывает 95%, а du не находит виновника, нужен инструмент, который покажет картину целиком. K4DirStat рисует дерево каталогов и карту прямоугольников, где площадь пропорциональна размеру. Разберём, как читать эту карту, чистить диск без риска и почему цифры иногда расходятся с du.
Что такое K4DirStat
K4DirStat — графический анализатор дискового пространства из мира KDE. Это продолжение KDirStat: программа читает дерево каталогов, считает размер каждого файла и показывает результат двумя способами — таблицей и картой прямоугольников (treemap). Актуальная версия — 3.4.x, сборки есть в Debian, Ubuntu, Fedora и Arch.
Главное отличие от Filelight и Baobab — подробное дерево с колонками: количество файлов, дата изменения, владелец, группа, доля от общего размера. Карта здесь не самостоятельный экран, а дополнение к таблице, поэтому инструмент удобен, когда нужно не просто «посмотреть красиво», а найти конкретный файл и что-то с ним сделать.
Установка и запуск
sudo apt install k4dirstat
sudo dnf install k4dirstat
В Arch готового пакета в официальных репозиториях нет, его собирают из AUR. В GNOME программа тоже работает, но подтянет библиотеки KDE. Запуск выполняется из меню или командой с указанием каталога:
k4dirstat /home
k4dirstat /var
Как читать дерево
После сканирования в верхней панели появляется список каталогов. Колонка Percent показывает долю от родителя, Size — суммарный размер с учётом вложенности. Разверните самый крупный узел и повторяйте, пока не дойдёте до файлов. Строка состояния внизу показывает итог по выбранному каталогу и время чтения.
В дереве показывается логический размер файла, а для разреженных файлов рядом выводится занятое место. Поэтому образ на 10 ГБ, который физически занимает пару мегабайт, будет выглядеть крупным, но в скобках вы увидите фактический объём. Жёсткие ссылки учитываются один раз, иначе итог был бы завышен.
Для анализа системных каталогов нужны права root, но запускать графическую программу целиком от root не стоит: созданные при очистке файлы получат владельца root. Разумнее смотреть /var через sudo -E k4dirstat /var, а удаление выполнять осознанно и выборочно.
Карта прямоугольников
Нижняя панель — treemap. Площадь каждого прямоугольника пропорциональна размеру, цвет зависит от типа файла. Крупные блоки сразу показывают, что занимает место: архивы, образы виртуальных машин, кэш браузера. Наведение мыши выводит имя и размер, клик выделяет объект, двойной клик приближает область.
Практический приём: начинайте с корня, находите самый большой блок, входите в него и повторяйте. Обычно хватает трёх-четырёх уровней, чтобы добраться до виновника. Контекстное меню позволяет открыть каталог в файловом менеджере или терминале, не покидая программу.
Очистка диска без ошибок
Меню Cleanup содержит стандартные действия: переместить в корзину, удалить, сжать в tar.bz2, открыть терминал, выполнить make clean, удалить типичный мусор вроде *.o и core. Список расширяется своими командами с подстановкой пути.
Безопасные кандидаты на удаление: кэш пакетного менеджера, старые журналы, ~/.cache, остатки сборок, устаревшие ядра. Опасные: /var/lib/libvirt/images, /var/lib/docker, /home, /etc, /usr — здесь сначала разберитесь, что именно занимает место.
sudo apt clean
sudo journalctl --vacuum-time=14d
docker system df
du -xh --max-depth=1 /var | sort -h
Правило простое: сначала анализ, потом удаление. Если непонятно, зачем нужен каталог, не удаляйте его — освободите место в другом месте.
Кэш и исключения
Чтение большого каталога на сетевом хранилище может занять часы. K4DirStat умеет сохранять результат в файл кэша и открывать его позже; формат совместим с KDirStat и QDirStat. Это удобно, когда слепок снимают на сервере, а разбирают на рабочей машине.
В настройках есть правила исключения: шаблоны путей, которые не нужно обходить. Добавьте туда /proc, /sys, /run, каталоги снапшотов и node_modules, если они вам не интересны. Меньше файлов — быстрее сканирование и меньше шума в отчёте.
k4dirstat ~/projects
k4dirstat -v
Почему цифры расходятся с df
Причины разные: снапшоты и сабволюмы btrfs, сжатие, жёсткие ссылки, разреженные файлы, зарезервированные под root блоки, удалённые, но всё ещё открытые файлы. Последние не видны в дереве, но занимают место, пока процесс держит дескриптор.
df -h /
sudo lsof +L1 | head
sudo btrfs filesystem df /
Если df показывает 100%, а du — вдвое меньше, ищите именно открытые удалённые файлы: перезапуск службы обычно возвращает место.
Практический сценарий
Сервер с корнем на 40 ГБ, из них 30 ГБ в /var. Открываем /var, видим два крупных блока: журналы и каталог контейнеров. Проверяем journalctl, настраиваем ограничение размера, чистим неиспользуемые образы штатной командой. Через неделю повторяем обход — если картина та же, причина не в разовом мусоре, а в отсутствии ротации.
Ограничения инструмента
У программы есть ограничения, о которых стоит знать заранее. Она не показывает историю изменений и не заменяет систему квот. При сканировании по NFS или SMB скорость зависит от сети, а не от диска, поэтому большой каталог может читаться очень долго. Прерывание сканирования оставляет неполное дерево — его лучше начать заново, чем анализировать частичные цифры.
Ещё один нюанс — права. Без root вы не увидите содержимое чужих домашних каталогов и части /var, а итоговый размер будет занижен. K4DirStat честно показывает то, что прочитал, но не предупреждает о пропущенных файлах, поэтому расхождение с df на сервере — нормальный повод проверить права.
du -sh /var/lib/docker/overlay2 /var/log /home
sudo -E k4dirstat /var
K4DirStat или QDirStat
QDirStat — независимый проект от автора исходного KDirStat. Он умеет показывать пакеты, гистограммы и типы файлов, лучше работает с btrfs и активнее развивается. K4DirStat выигрывает в интеграции с KDE и привычном интерфейсе, но по возможностям анализа уступает. Если нужна максимальная функциональность, смотрите в сторону QDirStat; если достаточно дерева и карты — K4DirStat проще.
Чек-лист
- Сканирование начато с нужного раздела, а не со всего /.
- Понятно, где логический размер, а где занятое место.
- Найдены три крупнейших каталога и понятно их назначение.
- Для системных путей используются штатные средства дистрибутива.
- Настроены исключения для псевдофайловых систем.
- После очистки проверено, что сервисы работают.
Итог
K4DirStat — удобный компромисс между наглядностью и точностью. Карта помогает увидеть проблему, дерево — понять её причину, а встроенные действия позволяют сразу убрать лишнее. Для рабочей станции и небольшого сервера этого достаточно, чтобы держать диск под контролем без запоминания десятка ключей du.