Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Чистка пакетов и кэша: 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 — не мусор, а локальная страховка для отката и офлайн-переустановки. Чисти его точечно: paccache -rk1 после обновлений, paccache -ruk0 для версий удалённых пакетов, pacman -Scc — только в крайнем случае. Отдельно раз в месяц убирай сироты через pacman -Qtdq | pacman -Rns -. Так диск останется свободным, а возможность отката — на месте.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max