Сначала раздел, потом каталог: два разных вопроса
Когда система сообщает, что на диске не осталось места, полезно развести два вопроса. Первый: какой именно раздел заполнен. Второй: что внутри этого раздела занимает больше всего. На первый отвечает df, на второй du. Если сразу запустить du по всему корню, команда будет долго читать каталоги, заходить в чужие точки монтирования и в итоге выдаст цифры, по которым трудно понять картину.
Команда df -h выводит таблицу по смонтированным файловым системам: размер, занято, доступно, процент и точку монтирования. Ключ -h переводит байты в привычные единицы. Для домашнего компьютера обычно интересны строки с корнем / и, если домашний каталог вынесен отдельно, с /home. Строки tmpfs относятся к временным файловым системам в оперативной памяти, а строки с путями /snap/... и типом squashfs показывают смонтированные образы snap-пакетов: они обычно выглядят заполненными на 100%, это нормально для образов только для чтения.
Полезны два варианта запуска. df -h / сразу покажет раздел, на котором лежит корень. df -hT добавит столбец с типом файловой системы, что помогает отличить ext4 от tmpfs или от сетевых ресурсов. Как разделы выглядят на уровне устройств, показывает lsblk, он разобран в отдельной странице про разделы диска.
du: спуск по каталогам шаг за шагом
Команда du считает размер файлов внутри каталога. Для поиска крупных папок удобен приём с ограничением глубины: вывод получается коротким, и его легко отсортировать. Типичный вариант на Ubuntu и Debian:
- du -h --max-depth=1 /var | sort -h — размеры подкаталогов /var по возрастанию;
- du -xh --max-depth=1 / | sort -h — то же для корня, ключ -x не даёт заходить на другие файловые системы;
- du -sh ~/.cache — общий размер одного каталога;
- sudo du -xh --max-depth=1 /var/log | sort -h — каталоги, часть которых недоступна обычному пользователю.
Найдя крупный подкаталог, повторите команду уже для него и спускайтесь дальше. Если хочется интерактивного просмотра, в репозиториях есть пакет ncdu: он показывает дерево каталогов с сортировкой и позволяет удалять объекты прямо из интерфейса, но удалять стоит только то, что вы точно узнали.
Сообщения вида «Отказано в доступе» при запуске без sudo не означают ошибку: du просто не смог прочитать часть каталогов и не посчитал их, поэтому итог занижен.
Типичные крупные места в домашней системе
Ниже список мест, где чаще всего накапливается объём на настольной Ubuntu или Debian. Это ориентир для проверки, а не перечень того, что можно удалять.
| Каталог | Что там лежит | Можно ли чистить |
|---|---|---|
| /var/cache/apt | скачанные пакеты .deb | да, командой apt clean |
| /var/log и /var/log/journal | текстовые логи и журнал systemd | через ротацию и vacuum, не руками |
| ~/.cache | кэши браузера и приложений | в большинстве случаев безопасно, приложения пересоздадут |
| ~/.local/share/Trash | корзина | да, если файлы больше не нужны |
| /var/lib/snapd и ~/snap | snap-пакеты и их данные | через команды snap |
| ~/.var/app | данные Flatpak-приложений | через Flatpak, с оглядкой на настройки |
| /var/lib/docker | образы контейнеров, если Docker установлен | средствами самого Docker |
Каждая строка таблицы — отдельная тема. Кэш пакетов и журнал systemd разобраны в соседних страницах, а snap и Flatpak тоже имеют собственные механизмы очистки. Удалять файлы из /var/lib вручную не стоит: там хранится состояние системы, и пакетный менеджер потом может работать некорректно.
Почему df и du показывают разные цифры
Расхождение между df и du встречается часто и, как правило, имеет понятную причину. Работают они по-разному: df спрашивает у файловой системы, сколько блоков занято, а du просматривает видимые файлы и суммирует их размеры.
Наиболее частые причины такие:
- Файл удалили, но процесс всё ещё держит его открытым. Место освободится только после закрытия файла. Найти такие файлы можно командой sudo lsof +L1, а затем перезапустить соответствующую программу или службу.
- На ext4 по умолчанию часть блоков зарезервирована для root. Поэтому «Доступно» меньше, чем разница между размером и занятым. Резерв настраивается при создании файловой системы и через tune2fs, но на домашнем компьютере менять его обычно нет причин.
- du запущен не от root и не прочитал часть каталогов.
- Другая файловая система смонтирована поверх каталога с файлами: данные под точкой монтирования du не видит, а df считает.
- Закончились inode, а не байты. Это проверяется командой df -i: при стопроцентном заполнении inode новые файлы создавать нельзя, хотя места по df -h достаточно.
Если ни одна причина не подходит, посмотрите, не лежат ли данные в снимках файловой системы или в подключённых образах.
Порядок действий, когда место закончилось
Если система почти перестала работать, действуйте от безопасного к рискованному. Сначала узнайте раздел через df -h, затем найдите крупные каталоги через du. Начинайте с того, что пересоздаётся само: корзина, кэш пакетов, кэш приложений. Потом разберитесь с журналом и старыми версиями snap. Личные файлы вроде видео и архивов решайте перенести на другой диск, а не удалять наугад.
Перед удалением чего-либо вне корзины проверяйте путь глазами. Команда sudo rm -rf с ошибкой в пути способна стереть системные файлы без возможности возврата. Если сомневаетесь в команде, сначала запустите только du без удаления и проверьте, что путь указывает на нужное место.
Если раздел переполняется регулярно, возможно, ему просто мало размера. Тогда вопрос уже не в очистке, а в планировании: перенос /home на отдельный диск или расширение раздела. Для таких задач нужны резервные копии, и делать их стоит заранее.
Для повторяющихся задач полезно собрать себе небольшую шпаргалку из двух-трёх команд и запускать её время от времени. Например, df -h для общей картины, du -xh --max-depth=1 ~ | sort -h для домашнего каталога и df -i, если возникают странные ошибки при создании файлов. Если вы заметили, что объём растёт быстро, повторите замер через сутки и сравните значения: так видно, какой каталог растёт и какая программа в этом участвует.