Все об Arch Linux

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

pacman -Syu завис: как безопасно прервать

Сразу к делу: если pacman -Syu завис, сначала подожди пять-десять минут и посмотри, движется ли вывод. Если обновление ещё только скачивает пакеты, Ctrl+C безопасен. Если pacman уже начал устанавливать пакеты, не прерывай его, дождись конца. Если pacman умер сам и оставил блокировку, сними её командой rm /var/lib/pacman/db.lck, но только после проверки, что ни один процесс pacman не запущен.

Почему pacman -Syu «висит»

Обновление Arch Linux выглядит как зависание по нескольким причинам. Разберём самые частые.

Медленные зеркала

pacman качает пакеты с зеркал из /etc/pacman.d/mirrorlist. Если зеркало медленное или перегружено, прогресс-бар стоит на месте, а скорость падает до десятков килобайт в секунду. Большое обновление, например ядро, браузер или среда рабочего стола, качается очень долго. Это не зависание, а медленная загрузка. Порядок зеркал в списке решает, откуда pacman качает: если в начале стоят медленные серверы, обновление тянется часами.

Большой объём скачивания

После долгого перерыва между обновлениями pacman тянет сотни мегабайт. На слабом канале это занимает десятки минут. Вывод при этом обновляется, но медленно, и со стороны кажется, что процесс стоит. В самом начале обновления pacman показывает, сколько предстоит скачать: строки Total Download Size и Total Installed Size. Если объём большой, долгое ожидание ожидаемо.

Зависший D-Bus

Часть хуков pacman обращается к systemd через D-Bus. Если системная шина подвисла, хук не завершается, и обновление стоит на месте без вывода. Проверить состояние можно командой systemctl --failed: если в списке есть юниты, связанные с D-Bus, это подозрительно.

Блокировка базы данных

Файл /var/lib/pacman/db.lck создаётся на время работы pacman. Если второй экземпляр pacman уже запущен, например из другого терминала, новый завершится с ошибкой unable to lock database. А если первый процесс завис, блокировка висит, и все попытки обновить систему упираются в неё.

Вопросы и конфликты файлов

Иногда pacman останавливается и ждёт ответа. Например, если пакет хочет записать файл, который уже существует и не принадлежит ни одному пакету, pacman спросит, что делать. Вывод при этом стоит, но это не зависание: pacman ждёт ввода с клавиатуры. Посмотри внимательно на экран, возможно, там вопрос. А файлы .pacnew появляются после обновления, когда pacman не перезаписывает изменённый конфиг. К зависанию они отношения не имеют.

Прогрев ключей

После свежей установки или долгого простоя pacman обновляет ключи GPG через pacman-key. Этот этап занимает несколько минут, особенно на слабом железе. Вывод при этом скудный, поэтому легко принять прогрев за зависание.

Хуки после установки

После установки пакетов pacman запускает хуки: пересборку initramfs через mkinitcpio, обновление кэша шрифтов, перезапуск служб. Некоторые хуки работают долго, особенно пересборка initramfs после обновления ядра. Вывод при этом есть, но редкий. Это тоже не зависание, а работа.

Как понять, что это не настоящий завис

Прежде чем жать Ctrl+C, убедись, что pacman вообще работает.

Какие этапы проходит обновление

pacman -Syu работает по шагам. Сначала синхронизирует базы пакетов, потом скачивает обновления, затем проверяет ключи, распаковывает и устанавливает пакеты и в конце запускает хуки. На каждом этапе вывод выглядит по-разному. Если ты знаешь, на каком шаге pacman, проще решить, ждать или вмешиваться. Скачивание можно прервать, установку нет.

Посмотри на вывод

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

Проверь процесс

Открой второй терминал и посмотри:

ps aux | grep pacman

Если pacman в списке и тратит CPU или читает диск, он работает. Нагрузку на диск можно посмотреть через iotop.

Проверь D-Bus

Если вывод стоит, а pacman не тратит ресурсы, посмотри на состояние шины:

systemctl status dbus

Если юнит в состоянии failed или слишком долго в activating, хук, который обращается к D-Bus, не сможет завершиться. Тогда сначала чини шину, а потом повторяй обновление.

Запусти pacman в другом терминале

pacman -Syu

Если получишь unable to lock database, значит, первый pacman держит блокировку и жив. Это хороший признак: обновление идёт, просто медленно.

Проверь сеть

curl -o /dev/null -w "%{speed_download}\n" https://mirror.yandex.ru/archlinux/core/os/x86_64/core.db

Если скорость низкая, дело в зеркале, а не в pacman.

Что делать, если обновление зависло

Порядок действий такой.

Подожди пять-десять минут

Сначала просто подожди. Многие «зависания» на самом деле медленные зеркала или прогрев ключей. Дай pacman время.

Проверь сеть и зеркала

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

Проверь место на диске

Полный корневой раздел тоже останавливает обновление. pacman не может распаковать пакеты и молча ждёт. Проверь:

df -h /

Если раздел заполнен, освободи место и повтори pacman -Syu.

Нажми Ctrl+C, если идёт скачивание

Если pacman на этапе скачивания, до строк checking keyring и installing, Ctrl+C безопасен. Скачанные пакеты останутся в кэше /var/cache/pacman/pkg, и при следующем запуске pacman продолжит с того же места.

Не прерывай установку пакетов

Как только в выводе появились строки installing, не трогай pacman. Прерывание посреди транзакции оставляет систему с частично обновлёнными пакетами: часть пакетов новая, часть старая. Это прямой путь к поломке зависимостей. Если очень хочется вмешаться, лучше дождаться конца и разобраться с последствиями, чем получить систему с наполовину обновлёнными библиотеками.

Что делать, если ты уже прервал обновление посреди установки

Если Ctrl+C всё-таки случился на этапе установки, не паникуй. Сначала просто повтори обновление:

pacman -Syu

pacman доустановит то, что не успел. Если обновление завершилось с ошибками, проверь целостность пакетов:

pacman -Qkk

Команда проверит файлы установленных пакетов и покажет повреждённые. Подробный разбор есть в статье «Проверка целостности пакетов: pacman -Qkk».

Если после повторного pacman -Syu система не загружается или программы падают, загружайся с live-USB и чини систему из chroot. Но в большинстве случаев повторное обновление решает проблему.

Как снять блокировку /var/lib/pacman/db.lck

Если pacman умер, например ты убил его через kill -9 или терминал закрылся, файл блокировки остаётся. Любая следующая команда pacman завершится с ошибкой unable to lock database.

Сначала убедись, что pacman точно не запущен:

pgrep -a pacman

Если вывод пустой, можно удалять блокировку:

rm /var/lib/pacman/db.lck

Удаляй блокировку только если ни один pacman не работает. Если удалить файл, пока pacman обновляет базу, можно повредить её. Проверь также, не висит ли pacman-key:

pgrep -a pacman-key

Как избежать зависаний в будущем

Ускорь зеркала

Настрой зеркала через reflector или вручную. Быстрые зеркала убирают главную причину «зависаний». Подробности в статье «Медленные зеркала: настройка reflector». После настройки проверь, что в начале списка стоят действительно быстрые серверы, иначе pacman снова упрётся в медленный.

Обновляйся в tmux

Запусти обновление в tmux, чтобы закрытие терминала не убивало pacman:

tmux new -s update
pacman -Syu

Отключиться можно через Ctrl+B, D, вернуться через tmux attach -t update.

Обновляйся регулярно

Чем реже обновляешься, тем больше пакетов качает pacman и тем дольше идёт обновление. Еженедельное обновление проходит быстрее и спокойнее, чем раз в полгода.

Включи параллельную загрузку

В /etc/pacman.conf в секции [options] добавь:

ParallelDownloads = 5

pacman будет качать несколько пакетов одновременно.

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

Можно ли нажать Ctrl+C в любой момент?

Нет. На этапе скачивания можно, на этапе установки пакетов нельзя. Прерывание установки оставляет частично обновлённую систему.

Что значит unable to lock database?

Значит, файл /var/lib/pacman/db.lck существует. Либо работает другой pacman, либо предыдущий умер и оставил блокировку. Проверь pgrep -a pacman и при необходимости удали файл.

Сколько ждать, прежде чем считать обновление зависшим?

Минут десять. За это время pacman успевает скачать заметную часть пакетов или закончить прогрев ключей. Если за десять минут не изменилось ничего, включая скорость и имена пакетов, пора проверять сеть, место на диске и процессы.

Зависание повредит систему?

Само по себе нет. Опасен только Ctrl+C посреди установки пакетов. Если такое случилось, повтори pacman -Syu и проверь pacman -Qkk.

Почему после обновления появились файлы .pacnew?

Это нормально. pacman не перезаписывает изменённые конфиги, а кладёт новые рядом с суффиксом .pacnew. Разбираться с ними нужно вручную, к зависанию они отношения не имеют.

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

Заключение

Зависший pacman -Syu в большинстве случаев не зависание, а медленное зеркало или долгий этап. Сначала подожди и проверь, движется ли вывод. Ctrl+C безопасен только до начала установки пакетов. Если pacman умер и оставил блокировку, сними её через rm /var/lib/pacman/db.lck, предварительно проверив процессы. А чтобы не попадать в эту ситуацию, настрой быстрые зеркала и запускай обновления в tmux. Тогда даже самое долгое обновление пройдёт спокойно.



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

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

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

Комментарии

Загрузка…

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

Telegram Max