Если после обновления ядра система зависает или тормозит, загрузись со старым ядром из меню GRUB, откати пакет через pacman -U и пересобери модули dkms. Чаще всего проблема в том, что модули ядра не пересобрались под новую версию, либо в регрессии самого ядра. Обе причины лечатся за пару минут.
Обновление ядра в Arch Linux ставит новый пакет linux и пересобирает initramfs. А вот внешние модули, собранные через dkms, живут своей жизнью. Если они не пересобрались под новую версию ядра, модуль не загрузится или загрузится криво. Типичные примеры: драйвер NVIDIA, модули VirtualBox, zfs.
Пакет linux-headers должен обновиться вместе с ядром. Если он остался старой версии, dkms не соберёт модули под новое ядро. Проверить это можно командой dkms status: если в выводе нет строки с текущей версией ядра, модуль под неё не собран. Подробнее про устройство dkms читай в статье «DKMS: динамические модули ядра».
Новое ядро может просто сломаться на твоём железе. Особенно часто это случается на свежих процессорах и новых видеокартах, где драйверы и ядро развиваются параллельно. Стабильная ветка linux в Arch обновляется часто, и не каждый релиз одинаково хорош. Поэтому в системе всегда держат LTS-ядро как запасной вариант.
Иногда ядро не виновато. Параметр, который раньше работал, в новой версии меняет поведение или перестаёт поддерживаться. Например, устаревший параметр для драйвера видеокарты может вызывать зависание при старте Xorg или Wayland. Разбор параметров ядра есть в статье «Параметры ядра в командной строке».
Отдельная история, это битый initramfs. Если при обновлении что-то пошло не так и образ не собрался, ядро загрузится, но не найдёт корневой раздел или нужные модули. Симптомы похожи: зависание на раннем этапе загрузки или падение в emergency mode. Лечится пересборкой образа:
sudo mkinitcpio -P
Команда пересоберёт initramfs для всех установленных ядер. Часто этого достаточно, чтобы система снова загрузилась нормально.
Самый быстрый способ вернуть рабочую систему, не трогая пакеты. Перезагрузись, в меню GRUB выбери пункт «Advanced options for Arch Linux» и загрузи предыдущую версию ядра. Если у тебя установлено LTS-ядро, там же будет пункт с linux-lts.
Меню GRUB показывается пару секунд при каждой загрузке. Если ты его не видишь, зажми Shift (на BIOS) или несколько раз нажми Esc (на UEFI) сразу после включения питания. В подменю будут все установленные ядра: обычное, LTS и предыдущие версии. Выбирай пункт без суффикса fallback, если только обычный вариант не падает.
После загрузки система работает как раньше. Теперь можно спокойно разбираться: откатывать пакет, пересобирать модули или просто подождать следующего обновления ядра.
Если старое ядро загрузилось и работает, откати пакет до предыдущей версии. Свежие пакеты Arch хранит в кеше /var/cache/pacman/pkg. Найди там предыдущий пакет ядра:
ls /var/cache/pacman/pkg/linux-*
И установи его вручную вместе с заголовками:
sudo pacman -U \
/var/cache/pacman/pkg/linux-6.12.10.arch1-1-x86_64.pkg.tar.zst \
/var/cache/pacman/pkg/linux-headers-6.12.10.arch1-1-x86_64.pkg.tar.zst
linux-headers откатывают не просто так. DKMS компилирует модули против заголовков, и версии ядра с заголовками обязаны совпадать. Поставив новое ядро со старыми linux-headers (или наоборот), получишь отказ сборки и те же зависания. Поэтому откатывай оба пакета одной командой. После отката пересобери initramfs:
sudo mkinitcpio -P
Общая методика отката пакетов после неудачного обновления разобрана в статье «Сломалось после обновления: откат». А когда система снова заработает, почисти старые ядра, чтобы /boot не переполнился: «Чистка старых ядер и initramfs».
DKMS (Dynamic Kernel Module Support) собирает внешние модули из исходников прямо на твоей машине и подстраивает их под установленное ядро. Пакет хранит исходники и скрипт сборки, а не готовый бинарник. Когда ядро обновляется, старая сборка привязана к точной версии из uname -r и в новую версию не встаёт. Файлы модуля никуда не делись, просто ядро их не грузит, отсюда ощущение, что модули исчезли после перезагрузки.
Если причина в модулях, откат ядра не поможет надолго: следующее обновление снова сломает систему. Нужно пересобрать модули под текущее ядро.
dkms status
Пример вывода:
vboxhost/7.1.4, 6.12.9-arch1-1, x86_64: installed
nvidia/570.133.07, 6.12.9-arch1-1, x86_64: installed
nvidia/570.133.07, 6.12.10-arch1-1, x86_64: added
Первая строка в порядке, для нового ядра модуль NVIDIA числится added, но не installed: заголовки скомпилированы, готового модуля нет. Каждая строка показывает модуль, версию и статус сборки. Если для текущего ядра нет строки installed, модуль не собрался.
sudo dkms autoinstall
Команда соберёт и установит все модули dkms для всех установленных ядер. Прогони dkms status ещё раз, перезагрузись и проверь, исчезло ли зависание.
Если сборка падает и мешает обновлениям, отвяжи модуль от конкретной версии:
sudo dkms remove nvidia/570.133.07 -k 6.12.10-arch1-1
Синтаксис: имя модуля, его версия и точная версия ядра. После этого пакет можно переустановить свежим или удалить совсем.
Проприетарный драйвер ставь через nvidia-dkms, а не через монолитный nvidia: dkms-пакет хранит исходники и после каждого обновления ядра собирает модуль заново. Если остался старый nvidia, жёстко привязанный к прошлой версии, новое ядро его не примет: чёрный экран или зависание на старте графики. Пересобери и проверь:
sudo dkms autoinstall
dkms status | grep nvidia
Готовая строка со статусом installed для текущего ядра означает, что драйвер в строю.
Если модуль не собирается или собирается, но валит систему, отключи его. Например, для VirtualBox:
sudo systemctl disable vboxservice
Или удали пакет с модулем, если он не нужен. Официальная документация по dkms есть в разделе «Полезные ресурсы» в конце статьи.
Если зависание не воспроизводится сразу, посмотри логи последней загрузки:
journalctl -b -p err
Флаг -b ограничивает вывод текущей загрузкой, -p err показывает только ошибки. Ищи строки с упоминанием твоего оборудования: видеокарты, сетевого адаптера, звука. Часто виновник виден сразу.
Найди время, когда пакет ядра встал в систему:
stat /var/cache/pacman/pkg/linux-*.pkg.tar.zst
По дате Modify станет ясно, когда обновление произошло. Теперь вырежи из лога этот период:
journalctl --since "3 hours ago" -p warning
Флаг --since понимает и абсолютное время: --since "2026-09-20 14:00:00". В окне обновления лови повторяющиеся строки: циклические сообщения, которые идут каждый раз, когда система подвисает.
Вывод ядра дополняет картину:
dmesg --level=err,warn | tail -50
На эти маркеры смотри в первую очередь:
soft lockup, hard LOCKUP: ядро залипло в цикле, обычно из-за конкретного модуля;Call Trace, BUG:, RIP:: стек вызовов, верхняя строка указывает на драйвер-виновник;Out of memory: Killed process: сработал OOM-killer и убил процесс из-за нехватки памяти, это другая история, а не зависание;segfault в journalctl: упавшая программа, ядро тут ни при чём.Если система не зависает, а просто тормозит, посмотри, какие службы грузят процессор:
systemd-analyze blame
Список служб с временем запуска покажет, что тормозит загрузку. На системах без systemd (например, с OpenRC) логи лежат в /var/log, а не в journald, но порядок действий тот же: ищи ошибки в момент старта.
Если система зависает намертво и логи не успевают записаться, добавь в параметры загрузки sysrq_always_enabled=1. Тогда при зависании можно вызвать магическую комбинацию SysRq и хотя бы снять журнал. Параметры ядра задаются в GRUB через пункт «e» в меню загрузки.
Главная защита, это второе ядро в системе. Установи linux-lts рядом с обычным:
sudo pacman -S linux-lts linux-lts-headers
GRUB сам добавит пункт загрузки. Если новое ядро сломается, загрузишься с LTS и спокойно откатишь проблемный пакет. Подробно про два ядра в одной системе: «linux-lts и модули: установка двух ядер».
linux это свежая стабильная ветка: новые драйверы и исправления, но и риск регрессий. linux-lts обновляется реже, поддерживается дольше и реже ломает рабочее железо. Переходи на LTS на постоянной основе, если зависания после обновлений уже повторялись или если машине важнее покой, чем свежие фичи ядра.
Можно сделать LTS загрузкой по умолчанию, оставив обычное ядро для экспериментов:
sudo grub-set-default "Advanced options for Arch Linux>Arch Linux, with Linux lts"
Строка должна совпадать с записью в grub.cfg точь в точь. Посмотреть сохранённый выбор: grub-editenv list. Вернуть прежний дефолт можно той же командой, подставив имя обычного ядра.
Второй уровень защиты, это аккуратность с обновлениями. Не обновляйся по частям и не игнорируй предупреждения pacman. Если после обновления ядра система не загрузилась вовсе, а не просто зависла, смотри статью «Чёрный экран после pacman -Syu».
Симптомы: после pacman -Syu встало ядро 6.12.10. Через несколько минут работы зависает плеер, экран замирает вместе со звуком, мышь не двигается. Перед обновлением всё работало.
Порядок действий такой. Перезагрузка, в GRUB выбираем предыдущее ядро: система работает, плеер тоже. Значит, проблема в новом ядре или его модулях.
uname -r # текущее ядро, например 6.12.10-arch1-1
dkms status
В выводе для 6.12.10 нет строк со статусом installed: модули не пересобрались, потому что linux-headers остался прошлой версии. Откатываем пару пакетов:
sudo pacman -U \
/var/cache/pacman/pkg/linux-6.12.9.arch1-1-x86_64.pkg.tar.zst \
/var/cache/pacman/pkg/linux-headers-6.12.9.arch1-1-x86_64.pkg.tar.zst
sudo mkinitcpio -P
Перезагрузка, зависаний больше нет. Следующее обновление ядра делай с прицелом: сразу после pacman -Syu выполняй sudo dkms autoinstall и сверяй dkms status.
Загрузись со старым ядром из GRUB и проверь dkms status. Если модули не пересобраны, выполни sudo dkms autoinstall. Если модули в порядке, откати ядро через pacman -U и подожди следующего обновления.
Да. Без заголовков, совпадающих с версией ядра, dkms не соберёт модули. Откатывай оба пакета одной командой.
Скорее всего, модуль nvidia не пересобрался под новое ядро. Проверь dkms status, пересобери через sudo dkms autoinstall. Если не помогло, откати ядро и дождись обновления драйвера.
Можно, но это плохая идея: без обновлений останешься без исправлений безопасности. Лучше держать LTS-ядро как запасной вариант и обновляться спокойно.
Загрузись со старым ядром. Если проблема исчезла, виновато новое ядро или его модули. Если зависание осталось, ищи причину в программах и службах через journalctl -b -p err.
Зависание после обновления ядра почти всегда лечится за десять минут: загрузись со старым ядром, проверь dkms status, пересобери модули или откати пакет через pacman -U. Чтобы не попадать в эту ситуацию, держи в системе LTS-ядро и не забывай про linux-headers. Тогда любое неудачное обновление превращается в одну перезагрузку, а не в вечер отладки.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии