Чистка пакетов и кэша: pacman cache не враг
Кэш pacman не враг, а страховка. Он лежит в /var/cache/pacman/pkg и хранит скачанные версии пакетов, поэтому позволяет откатить обновление или переустановить пакет без интернета. Чистить его нужно точечно: paccache -rk1 оставляет по одной свежей версии каждого пакета и освобождает почти весь объём, а pacman -Scc вычищает всё под ноль и лишает тебя возможности отката. Правильная чистка это paccache, а не полное стирание кэша.
Где pacman хранит кэш и почему он растёт?
Кэш живёт в /var/cache/pacman/pkg. Каждый раз при установке или обновлении pacman кладёт туда архив .pkg.tar.zst. Старые версии при этом не удаляются автоматически, они копятся рядом со свежими. После пары крупных обновлений ядра, браузера и офисного пакета кэш легко разрастается до нескольких гигабайт.
Проверь текущий размер:
du -sh /var/cache/pacman/pkg
Загляни внутрь: там лежат архивы всех версий, которые pacman когда-либо скачивал:
ls /var/cache/pacman/pkg | wc -l
Число покажет, сколько архивов накопилось. У одного пакета может быть три-четыре версии: свежая, пара старых и версия, которая уже не установлена. Формат архивов: .pkg.tar.zst, сжатый tar с файлами пакета и метаданными. Именно эти файлы pacman распаковывает при установке, поэтому они и нужны для переустановки без сети.
Если корневой раздел маленький, кэш один из первых кандидатов на раздувание. Вместе с ним место съедают логи, снапшоты и старые ядра. Про заполнение корня подробнее в статье «Корневой раздел заполняется».
Почему не стоит вычищать кэш под ноль?
Кэш это локальная копия того, что ты уже скачал. Три сценария, где он спасает:
- Откат версии. Обновил пакет, а он сломался. Старая версия лежит в кэше, ставишь её за минуту, без интернета и без поисков в архиве. Как именно это делается, в статье «Установка конкретной версии из кэша».
- Переустановка без сети. Удалил пакет, а потом понял, что он нужен. Если версия ещё в кэше,
pacman -U /var/cache/pacman/pkg/имя-пакета.pkg.tar.zstпоставит её офлайн. - Восстановление после сбоя. Повреждённый пакет переустанавливается из кэша без повторного скачивания.
Сценарий с офлайн-переустановкой особенно актуален на ноутбуке, который не всегда подключён к сети: кэш единственный источник пакетов, когда интернета нет.
Если вычистить кэш полностью, откат превращается в скачивание старой версии из архива Arch Linux, медленно и не всегда возможно. Поэтому кэш не враг, а инструмент. Вопрос только в том, сколько версий хранить.
Обновления в Arch выходят часто, и редкий, но реальный сценарий: битая свежая версия пакета. Кэш на этот случай дешёвая страховка: пара гигабайт на диске против часов на восстановление системы. Поэтому вопрос не «чистить или нет», а «сколько версий оставить».
Как чистить кэш с помощью paccache?
paccache входит в пакет pacman-contrib. Проверь, что он установлен:
pacman -Q pacman-contrib
Если пакета нет, поставь его:
sudo pacman -S pacman-contrib
paccache удаляет старые версии пакетов, оставляя выбранное число свежих. Как это работает: paccache смотрит на установленные пакеты, находит в кэше все их версии и удаляет лишние, оставляя -k самых свежих. Важная деталь: по умолчанию он работает только с версиями установленных пакетов. Архивы удалённых пакетов он не трогает, для них есть отдельный флаг.
paccache -rk1: оставить одну версию
sudo paccache -rk1
Оставляет одну самую свежую версию каждого установленного пакета. Освобождает максимум места, но окно отката сужается до одной версии. Хороший вариант для регулярной чистки после обновлений.
paccache -rk2: безопасный вариант
sudo paccache -rk2
Держит две последние версии. Если свежая версия окажется битой, у тебя остаётся предыдущая. Экономия чуть меньше, зато спокойнее. Подходит, если ты часто обновляешься и хочешь подстраховаться.
paccache -ruk0: удалить версии неустановленных пакетов
sudo paccache -ruk0
Удаляет все версии пакетов, которых уже нет в системе. Это первое, что стоит сделать при чистке: такие архивы занимают кучу места и никогда не понадобятся. Флаг u: uninstalled, k0: хранить ноль версий.
Есть и промежуточный вариант paccache -a: он сохраняет все версии установленных пакетов и удаляет только архивы удалённых. Максимальная страховка, если место позволяет.
Две команды удобно запускать подряд: сначала paccache -ruk0 убирает архивы удалённых пакетов, потом paccache -rk1 сжимает версии установленных. Вместе они освобождают максимум места, сохраняя одну свежую версию каждого пакета.
Сухой прогон перед чисткой
paccache -dv
Показывает, что было бы удалено, ничего не трогая. Флаг -d: dry-run, -v: подробный вывод. Вывод перечисляет пакеты и объём, который освободится. Полезно запустить перед первой чисткой, чтобы понять масштаб и убедиться, что paccache не собирается удалять лишнее.
Что делают pacman -Sc и pacman -Scc?
pacman -Sc удаляет из кэша версии, которых больше нет ни в одном репозитории, то есть старее текущей. Текущие установленные версии остаются на месте. Команда безопасная, но экономит меньше, чем paccache: она не трогает свежие версии, которые занимают основную часть объёма.
pacman -Sc полезно запускать после долгого перерыва в обновлениях: в кэше накопится много версий, которых уже нет в репозиториях, и команда уберёт их, оставив актуальные. Но если ты обновляешься регулярно, -Sc почти ничего не удалит, свежие версии и так совпадают с репозиторными.
pacman -Scc вычищает кэш почти полностью: удаляет все архивы, включая версии установленных пакетов. Затем откат невозможен без повторного скачивания. Применяй только когда место критично, и помни: кэш страховка, а -Scc её сжигает. Разница между двумя командами: одна буква, а последствия разные.
Как удалить осиротевшие пакеты?
Сироты: пакеты, установленные когда-то как зависимости, но больше не нужные ни одному установленному пакету. Они занимают место в системе, но не в кэше. Чистка сирот освобождает место в корневом разделе, а не в кэше, это два разных источника мусора. Список:
pacman -Qtdq
Удаление вместе с ненужными зависимостями и конфигами:
sudo pacman -Qtdq | sudo pacman -Rns -
Откуда берутся сироты? Пакет перестаёт зависеть от другой библиотеки после обновления, или ты удаляешь программу, а её зависимости остаются. pacman не трогает их автоматически, он не знает, не понадобятся ли они тебе.
Команда pacman -Qtd покажет тот же список с описаниями пакетов, удобно, чтобы понять, что именно удаляешь. pacman -Qtdq выводит только имена, готовые для передачи в pacman -Rns.
Перед удалением просмотри список: иногда сироты оказываются нужными. Например, пакет, который ты ставил вручную, а потом забыл. Если сомневаешься, оставь его. И учти: флаг -n в pacman -Rns удаляет и конфигурационные файлы. Если планируешь когда-нибудь вернуть пакет и хочешь сохранить настройки, убери -n из команды.
Когда и как часто чистить кэш?
Простой график без фанатизма:
- После каждого крупного обновления:
sudo paccache -rk1. Занимает секунды и не даёт кэшу разрастись. - Раз в месяц:
sudo paccache -rk1, затемsudo paccache -ruk0и чистка сирот черезpacman -Qtdq | pacman -Rns -.
Кэш локальный, на обновления он не влияет. Чистка не ускоряет и не замедляет pacman, она только освобождает диск. Если место не поджимает, можно вообще не чистить: полный кэш сам по себе ничего не ломает.
После чистки проверь результат:
du -sh /var/cache/pacman/pkg
Сравни с числом до чистки, так увидишь, сколько места освободилось. Если кэш снова разросся через неделю, значит, ты обновляешься часто. Это нормально, просто прогоняй paccache -rk1 почаще. Для большинства систем месячной рутины хватает: кэш не успевает разрастись, а сироты не накапливаются. Автоматизировать чистку можно через systemd-таймер, но для разовой команды это избыточно, проще держать под рукой одну строку и запускать её после обновлений.
Отдельная тема: старые ядра и initramfs, они тоже копятся и занимают место. Их чистка описана в статье «Чистка старых ядер и initramfs». А если хочешь понять, какие пакеты съедают больше всего места, смотри статью «Какие пакеты занимают место».
Частые вопросы
paccache не найден: что делать?
Установи pacman-contrib: sudo pacman -S pacman-contrib. paccache входит именно в этот пакет.
paccache -rk1 удалит версию, которая сейчас установлена?
Нет. paccache всегда оставляет как минимум одну версию каждого установленного пакета. С -rk1 это самая свежая. Даже если в кэше лежит только одна версия, она останется нетронутой.
Чем paccache отличается от pacman -Sc?
paccache гибче: ты сам выбираешь, сколько версий хранить. pacman -Sc просто убирает версии, которых нет в репозиториях. Обе команды безопасны для текущих установленных пакетов.
Можно ли отключить кэш совсем?
Можно, но не стоит: потеряешь возможность отката и офлайн-переустановки. В /etc/pacman.conf есть опция CleanMethod, она меняет поведение pacman -Sc, но не отключает кэш целиком. Лучше регулярная чистка paccache, она даёт почти тот же эффект по месту, но сохраняет страховку.
Сироты это то же самое, что кэш?
Нет. Сироты: установленные пакеты, которые занимают место в системе. Кэш: архивы в /var/cache/pacman/pkg. Чистятся они по-разному: сироты через pacman -Rns, кэш через paccache.
Полезные ресурсы
- Pacman/Tips and tricks (ArchWiki): раздел про paccache и обслуживание кэша.
- Pacman (ArchWiki): полная документация по менеджеру пакетов.
Заключение
Кэш pacman не мусор, а локальная страховка для отката и офлайн-переустановки. Чисти его точечно: paccache -rk1 после обновлений, paccache -ruk0 для версий удалённых пакетов, pacman -Scc только в крайнем случае. Отдельно раз в месяц убирай сироты через pacman -Qtdq | pacman -Rns -. Так диск останется свободным, а возможность отката на месте.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии