Все об Arch Linux

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

linux-lts и модули: установка двух ядер

Сразу к делу: ставь два ядра, linux и linux-lts, вместе с заголовками linux-headers и linux-lts-headers. Основное ядро linux работает каждый день, а linux-lts держишь как запасное: если свежее обновление сломает загрузку, выбираешь LTS-ядро в меню GRUB и продолжаешь работать. Полный цикл обновления при этом не меняется: pacman -Syu обновляет оба ядра, а старые версии убираются отдельной командой.

Зачем ставить два ядра: linux и linux-lts?

Arch Linux обновляется часто, и ядро linux обновляется вместе со всей системой. Каждое обновление несёт риск: новая версия может не загрузиться на твоём железе, сломать модули или дать чёрный экран. Обычно такие проблемы решаются откатом, но откат требует времени и загрузки с live-USB.

linux-lts решает проблему заранее. Это ядро с долгосрочной поддержкой: оно обновляется реже, получает только исправления безопасности и стабильности, а его версия меняется нечасто. Пока свежее ядро linux ломается, LTS-версия продолжает работать. Ты просто выбираешь её в GRUB и загружаешься.

LTS-ядро особенно полезно на рабочей машине, где простой недопустим. Если ты занимаешься администрированием, разработкой или просто не хочешь разбираться с поломкой в неудачный момент, запасное ядро даёт спокойствие. Подробнее про выбор между ядрами читай в статье «Какое ядро выбрать: linux, linux-lts, linux-zen или linux-hardened».

Сценарий простой. Ты запускаешь pacman -Syu, обновление ставит новое ядро, и при следующей загрузке система зависает на логотипе или падает в чёрный экран. Без запасного ядра ты остаёшься с live-USB и chroot. С запасным ядром проблема решается одним пунктом меню: выбрал linux-lts, загрузился, а дальше разбираешься с причиной не спеша.

Что поставить для полного цикла обновления?

Полный цикл обновления ядра включает не только само ядро, но и заголовки, и модули. Минимальный набор для двух ядер:

  • linux: основное ядро.
  • linux-headers: заголовки для сборки модулей под основное ядро.
  • linux-lts: запасное ядро.
  • linux-lts-headers: заголовки для сборки модулей под LTS-ядро.

Заголовки нужны не для работы системы, а для DKMS-модулей: драйверов Wi-Fi (wl), сетевых карт, видеокарт NVIDIA. DKMS собирает модуль под каждое установленное ядро, и без заголовков сборка невозможна. Если у тебя проприетарный драйвер NVIDIA, ставь nvidia-dkms вместо обычного nvidia: тогда модуль соберётся под оба ядра автоматически. Пакет nvidia-lts тоже подходит, но только под LTS-ядро, и для основного ядра придётся ставить отдельный пакет.

Важно: версия модуля и версия ядра должны совпадать. Если ядро обновилось, а модуль остался старым, модуль не загрузится. DKMS решает это пересборкой при каждом обновлении ядра, поэтому связка linux + linux-lts + nvidia-dkms работает без ручной возни.

Тот же принцип работает для любых DKMS-модулей: драйверы Broadcom (broadcom-wl-dkms), модули для внешних сетевых карт, модули виртуализации. Если пакет собран через DKMS, он автоматически пересобирается под каждое ядро при его обновлении. Обычные модули, которые идут в составе ядра, пересобирать не нужно: они обновляются вместе с ядром.

Как установить linux-lts и заголовки?

Установка ничем не отличается от установки любого пакета:

pacman -S linux-lts linux-lts-headers

Если нужен драйвер NVIDIA под оба ядра:

pacman -S nvidia-dkms

После установки ядра перегенерируй конфиг загрузчика:

grub-mkconfig -o /boot/grub/grub.cfg

GRUB сам найдёт оба ядра и добавит их в меню. Ничего вручную прописывать не нужно.

Как проверить, какие ядра установлены?

Проверка занимает секунду:

pacman -Q linux linux-lts

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

uname -r

Сравни вывод uname -r с версиями из pacman -Q: если они совпадают, ты загрузился с последней версии. Если нет, значит, в GRUB выбрано другое ядро или обновление не завершилось.

Полезно также посмотреть, какие пакеты с ядром вообще стоят в системе:

pacman -Q | grep linux

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

Как обновлять систему с двумя ядрами?

Обновление работает как обычно:

pacman -Syu

Pacman обновит оба ядра и пересоберёт initramfs для каждого. Никаких дополнительных действий не нужно. Если обновление зависло или прервалось, разбор ситуации есть в статье «pacman -Syu завис: как прервать».

После обновления загляни в вывод pacman: он покажет, какие хуки отработали. Если в конце появилась ошибка про mkinitcpio или grub-mkconfig, значит, initramfs или конфиг загрузчика не обновились. Это надо чинить сразу, до перезагрузки, иначе система может не загрузиться.

После обновления старые версии ядер остаются в /boot и занимают место. paccache тут не поможет: он чистит кэш пакетов в /var/cache/pacman/pkg, а не установленные ядра. Чтобы снять старые ядра, переустанови все явно установленные пакеты:

pacman -Qqn | pacman -S -

Команда переустанавливает пакеты из кэша, и старые ядра, которые больше никому не нужны, удаляются. Про чистку кэша и старых ядер читай в статье «Чистка старых ядер и initramfs».

Если запасное ядро больше не нужно, удали его обычным способом:

pacman -R linux-lts linux-lts-headers

После удаления снова перегенерируй grub.cfg, чтобы убрать пункт меню.

Как переключиться на запасное ядро в GRUB?

При загрузке GRUB показывает меню со всеми ядрами. Обычно там два пункта для каждого ядра: обычная загрузка и fallback. Выбираешь нужный пункт стрелками и жмёшь Enter.

Чтобы LTS-ядро всегда было под рукой, но загружалось только по выбору, настрой GRUB на запоминание последнего выбора. В /etc/default/grub пропиши:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

После этого GRUB запоминает, какой пункт ты выбрал в прошлый раз, и загружает его по умолчанию. Свежее ядро linux остаётся основным, а linux-lts выбирается вручную, когда нужно. Про несколько ядер в меню GRUB есть отдельная статья «Несколько ядер в меню: linux, linux-lts, linux-hardened».

Если меню GRUB не появляется, а система грузится сразу, зажми Shift (для BIOS) или несколько раз нажми Esc (для UEFI) в момент старта. Меню появится, и ты сможешь выбрать ядро. Если пункты с ядрами не видны, проверь, что grub.cfg перегенерирован после установки linux-lts.

Зачем нужны linux-headers и DKMS-модули?

DKMS-модули собираются под конкретную версию ядра. Когда ядро обновляется, модуль нужно пересобрать, иначе он не загрузится. Заголовки ядра содержат заголовочные файлы, без которых компиляция невозможна.

Для каждого ядра нужны свои заголовки: linux-headers для linux, linux-lts-headers для linux-lts. Если поставить только linux-lts без заголовков, DKMS-модули под LTS-ядро не соберутся, и Wi-Fi или видеокарта не заработают при загрузке с запасного ядра.

DKMS сам следит за пересборкой: при обновлении ядра он запускает сборку модулей для новой версии. Проверить статус модулей можно командой:

dkms status

Если модуль не собран под какое-то ядро, он появится в списке с пометкой. Подробности в статье «DKMS: динамические модули».

Что делает mkinitcpio с двумя ядрами?

mkinitcpio собирает initramfs для каждого ядра отдельно. При установке или обновлении ядра pacman запускает хуки mkinitcpio, и для каждого ядра создаются два образа: обычный initramfs-linux.img и запасной initramfs-linux-fallback.img. Fallback содержит больше модулей и драйверов, поэтому загружается почти с любым железом, но медленнее.

Для LTS-ядра образы называются initramfs-linux-lts.img и initramfs-linux-lts-fallback.img. GRUB показывает их как отдельные пункты меню.

Если ты используешь UKI (единый образ ядра), mkinitcpio собирает один файл, который включает ядро, initramfs и параметры загрузки. Для двух ядер получится два UKI, и в меню загрузчика они тоже появятся отдельными пунктами.

UKI удобен тем, что ядро и initramfs лежат в одном файле, и их сложнее повредить по отдельности. Для загрузки UKI нужен загрузчик, который умеет их запускать: GRUB, systemd-boot или прямая загрузка через EFISTUB. Если переходишь на UKI, проверь, что оба ядра собираются в образы, иначе запасное ядро не появится в меню.

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

Нужно ли ставить linux-lts, если всё работает?

Да, если ты хочешь подстраховку. Пока всё работает, LTS-ядро просто лежит в системе и занимает немного места. Оно пригодится в тот момент, когда свежее ядро откажется загружаться. Один раз спасённая система окупает пару минут установки.

Что делать, если после обновления система не загружается с нового ядра?

Перезагрузись и в меню GRUB выбери пункт с linux-lts. Система загрузится с запасного ядра. После этого можно откатить проблемный пакет или дождаться исправления. Если пункта с LTS-ядром нет в меню, проверь, что пакет linux-lts установлен, и перегенерируй grub.cfg.

Удаляет ли paccache старые ядра?

Нет. paccache чистит кэш пакетов в /var/cache/pacman/pkg, а установленные ядра в /boot не трогает. Для удаления старых ядер используй pacman -Qqn | pacman -S - или удали пакет вручную через pacman -R.

Как проверить целостность пакетов после обновления ядра?

Если после обновления что-то работает странно, проверь целостность установленных пакетов:

pacman -Qkk

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

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

Заключение

Два ядра, linux и linux-lts, с заголовками и DKMS-модулями дают простую страховку: свежее ядро работает каждый день, а LTS-версия выручает, когда обновление ломает загрузку. Установка занимает пару команд, обновление не меняется, а переключение в GRUB занимает секунды. Главное, не забывай про заголовки и пересборку модулей, и тогда запасное ядро всегда будет готово к работе.



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

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

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

Комментарии

Загрузка…

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

Telegram Max