Все об Arch Linux

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

Сломалось после обновления: единый гайд по откату

Сломалось после обновления? Не паникуй: почти любая поломка в Arch Linux лечится откатом. Сначала оцени масштаб: один пакет или много. Один пакет откатывается командой pacman -U из кэша /var/cache/pacman/pkg, несколько пакетов возвращаются к нужному моменту по логу /var/log/pacman.log, а если система не грузится, поможет chroot с live-USB или снапшот btrfs. Ниже единый алгоритм на все случаи.

Что делать в первую очередь, когда что-то сломалось?

Правило номер один: не паникуй и не переустанавливай систему. В Arch Linux почти любая поломка после обновления обратима. pacman хранит старые версии пакетов в кэше, а журнал обновлений лежит в /var/log/pacman.log. По этим двум источникам систему можно вернуть в рабочее состояние за несколько минут.

Сначала оцени объём бедствия. Задай себе два вопроса.

Один пакет или много? Если сломался один пакет, например перестал запускаться редактор или пропал звук, достаточно откатить его одного. Если после pacman -Syu не грузится система или ошибки сыплются от десятка программ, проблема глубже: скорее всего, конфликт версий библиотек.

Что именно сломалось? Загляни в журнал загрузки:

journalctl -b -p 3

Ошибки уровня error и выше покажут, какой компонент падает. Сопоставь его с недавними обновлениями из лога pacman:

tail -100 /var/log/pacman.log

Если журнал пуст или система не успевает записать ошибки, смотри вывод dmesg сразу после загрузки. Он покажет, какие модули ядра не загрузились и какие устройства не определились.

Ещё один полезный приём: вспомни, когда всё работало, и найди в логе последнюю запись до этого момента. Пакеты из этой записи и есть подозреваемые. Обычно поломку вызывает не одно обновление, а связка из двух-трёх пакетов, которые обновились одновременно.

Дальше действуй по масштабу: один пакет, много пакетов или чёрный экран. Для каждого случая ниже свой раздел.

Как откатить один пакет из кэша pacman?

Самый простой случай. pacman по умолчанию хранит скачанные пакеты в /var/cache/pacman/pkg и не удаляет их сразу. Проверь, есть ли там старая версия:

ls /var/cache/pacman/pkg/ | grep <имя-пакета>

Если нужная версия на месте, установи её напрямую:

sudo pacman -U /var/cache/pacman/pkg/<пакет>-<старая-версия>.pkg.tar.zst

pacman переустановит пакет и при необходимости откатит зависимости. После этого перезапусти сломанную программу. Подробный разбор установки конкретной версии из кэша есть в статье «Установка конкретной версии из кэша».

Имя файла в кэше выглядит так: firefox-131.0-1-x86_64.pkg.tar.zst. Версия в имени обязана совпадать с той, что стояла до обновления. Если сомневаешься, сравни даты файлов в кэше с датами в логе pacman.

Если вместе с пакетом обновились его зависимости, откати и их. pacman сам подскажет, какие версии требуются, и предложит установить их из кэша.

Что делать, если старой версии нет в кэше?

Кэш чистят утилиты вроде paccache, да и сам pacman удаляет старые версии при переполнении. Тогда два пути.

Первый: утилита downgrade из AUR. Она показывает список доступных версий из кэша и из архива пакетов Arch Linux:

downgrade <пакет>

Выбери версию из списка и подтверди установку. Утилита сама скачает пакет и вызовет pacman -U. Про архив пакетов Arch Linux и откат через него читай в статье «Архив пакетов Arch Linux: откат пакетов».

Второй: скачать нужную версию вручную с archive.archlinux.org и установить тем же pacman -U. Флаг --ala-url у downgrade подставляет адрес архива автоматически, так что ручной способ нужен редко.

Как откатить несколько пакетов до нужного момента?

Когда сломалось много всего, откатывать по одному пакету долго и бессмысленно. Лучше вернуть систему к состоянию до проблемного обновления.

Найди в логе момент, когда всё работало:

grep "upgraded" /var/log/pacman.log | tail -50

Каждая строка вида [2026-09-19T12:00:00+0300] [ALPM] upgraded firefox (130.0-1 -> 131.0-1) показывает, что и когда обновилось. Определи последнее удачное обновление и собери список пакетов, которые менялись после него.

Собрать список пакетов из лога можно так:

grep "upgraded" /var/log/pacman.log | awk '{print $4}' | sort -u

Вывод покажет все пакеты, которые когда-либо обновлялись. Сверь его с датой проблемного обновления и откатывай только те, что менялись после неё.

Дальше два варианта. Если кэш полный, откатывай пакеты по одному через pacman -U, начиная с самых свежих изменений. Если пакетов много, проще переустановить всё из кэша одной командой:

sudo pacman -U /var/cache/pacman/pkg/*.pkg.tar.zst

Эта команда установит все версии из кэша, то есть вернёт систему к состоянию последней синхронизации. Минус: если кэш давно чистили, версии будут старыми. Зато это быстро и безопасно.

Важно: откатывай пакеты в обратном порядке обновления, от самых свежих к старым. Так pacman не будет ругаться на конфликты версий зависимостей.

Что делать при чёрном экране или зависании?

Чёрный экран после pacman -Syu почти всегда связан с ядром, видеодрайвером или микрокодом. Отдельный разбор этой ситуации есть в статье «Чёрный экран после pacman -Syu».

Если система ещё грузится, но падает на этапе инициализации, перезагрузись и выбери в меню GRUB предыдущее ядро. Arch по умолчанию хранит несколько ядер: linux, linux-lts, а также резервные образы в /boot. Пункт «Advanced options for Arch Linux» в меню GRUB покажет список ядер, включая старые версии. Загрузись с предыдущим ядром и проверь, работает ли система.

Если работает, откати новое ядро из кэша:

sudo pacman -U /var/cache/pacman/pkg/linux-<старая-версия>.pkg.tar.zst

Заодно откати linux-headers, если ставил. После этого перегенерируй initramfs:

sudo mkinitcpio -P

Если в меню GRUB нет старого ядра, значит, оно уже удалено при очистке /boot. Тогда загрузись с live-USB и откати ядро через chroot, как описано ниже.

Зависание после обновления ядра, когда система грузится, но виснет через минуту, разобрано в статье «Зависание после обновления ядра».

Как восстановить систему через chroot с live-USB?

Если система не грузится вообще, откатывать придётся извне. Загрузись с live-USB (тот же образ, с которого ставил Arch), подключи интернет и смонтируй разделы:

lsblk
mount /dev/nvme0n1p2 /mnt          # корень, подставь свой раздел
mount /dev/nvme0n1p1 /mnt/boot     # ESP, если есть отдельный /boot

Войди в свою систему:

arch-chroot /mnt

Теперь ты внутри установленной системы, и pacman работает как обычно. Откати проблемный пакет из кэша:

pacman -U /var/cache/pacman/pkg/<пакет>-<старая-версия>.pkg.tar.zst

Если кэш пуст, а интернет есть, скачай нужную версию с archive.archlinux.org и установи её. Если внутри chroot нужна сеть для скачивания, проверь её:

ping -c 3 archlinux.org

В live-окружении сеть обычно уже настроена, а arch-chroot пробрасывает её в систему автоматически. После отката выйди из chroot и перезагрузись:

exit
umount -R /mnt
reboot

chroot спасает в большинстве случаев: от сломанного ядра до битых библиотек. Главное, чтобы корневой раздел монтировался без ошибок.

Как откатиться со снапшотами btrfs?

Самый надёжный способ отката: снапшоты. Если корневой раздел на btrfs, ты можешь вернуть систему в состояние до обновления за минуту.

Снапшоты делают до обновления, а не после поломки. Поэтому правило простое: настроил снапшоты один раз, и дальше они работают сами.

Популярный вариант: snapper. Он хранит снимки в скрытом подтоме .snapshots и умеет откатываться:

sudo snapper list
sudo snapper rollback <номер-снапшота>

После rollback перезагрузись. Система вернётся к состоянию снапшота, включая версии пакетов.

Перед крупным обновлением можно сделать снапшот вручную:

sudo snapper create --description "before update"

Альтернатива: Timeshift. Он умеет работать и с btrfs, и с ext4, делает снапшоты по расписанию. Интерфейс проще, чем у snapper, но на btrfs он использует те же подтома. Настраивается за пару минут: укажи раздел с системой, выбери расписание и тип снимков. Дальше он делает их сам, а откат занимает один пункт меню. Оба инструмента подробно описаны в ArchWiki.

Что делать после отката?

Откат вернул систему в рабочее состояние, но это не конец. Проблема никуда не делась: обновление, которое всё сломало, рано или поздно придёт снова.

Зафиксируй версию проблемного пакета, чтобы pacman не обновлял её до выхода фикса. Добавь в /etc/pacman.conf:

IgnorePkg = linux

Теперь pacman -Syu будет пропускать этот пакет. Когда выйдет исправленная версия, убери строку и обнови. Про заморозку версий через IgnorePkg читай в статье «Pin: заморозка версий через IgnorePkg».

Важно: не откатывай пакеты по одному «на всякий случай» и не держи систему в смешанном состоянии долго. Частичное обновление, когда часть пакетов старая, а часть новая, само по себе ломает зависимости. Почему это опасно, объясняется в статье «Обновление по частям опасно».

Если сломался пакет из AUR, после отката пересобери его под новые версии библиотек:

yay -S <пакет> --rebuild

Если сломанный пакет тянет за собой зависимости, заморозь и их. Иначе pacman обновит библиотеку, а пакет останется старым, и конфликт вернётся.

И подожди: фиксы в Arch приходят быстро, обычно в течение пары дней. Следи за новостями на сайте archlinux.org и в ленте обновлений.

Когда фикс выйдет, сними заморозку и обнови пакет обычным способом:

sudo pacman -Syu

Перед этим полезно проверить новости проекта: крупные изменения, например смена формата конфигов или перенос файлов, всегда анонсируются заранее.

Частые вопросы

Можно ли откатить пакет, если кэш пуст?

Да. Скачай нужную версию с archive.archlinux.org и установи через pacman -U. Утилита downgrade делает это автоматически, включая поиск по архиву через --ala-url.

Откат удалит мои настройки?

Нет. pacman -U меняет только файлы пакета, а конфиги в /etc pacman не трогает, если они не входят в пакет. Снапшоты btrfs тоже не затрагивают домашний каталог, если он в отдельном подтоме.

Что делать, если после отката pacman ругается на конфликт версий?

Откати зависимости проблемного пакета до тех же версий. Смотри в логе pacman, какие пакеты обновлялись вместе с ним, и откатывай их в обратном порядке.

Стоит ли откатываться, если система работает, но что-то мелкое сломалось?

Да, если поломка мешает работе. Мелкий баг в новой версии программы лечится откатом за минуту. Если же всё работает, откатываться не нужно: следующее обновление, скорее всего, всё починит.

Почему после отката pacman снова предлагает обновить пакет?

Потому что в репозитории лежит новая версия. Откат не запрещает обновление, он лишь возвращает установленную версию. Чтобы pacman не тянул её обратно при каждом pacman -Syu, зафиксируй версию через IgnorePkg.

Полезные ресурсы

Заключение

Откат после обновления это стандартная процедура, а не крайняя мера. Один пакет откатывается из кэша через pacman -U, несколько пакетов по логу /var/log/pacman.log, не грузящаяся система лечится через chroot с live-USB, а снапшоты btrfs возвращают всё состояние целиком. После отката зафиксируй версию через IgnorePkg и дождись фикса. Главное: не паниковать и действовать по порядку. И записывай, какие пакеты и когда ты откатывал: через месяц такая заметка сэкономит час разбирательств.



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

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

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

Комментарии

Загрузка…

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

Telegram Max