15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
26.12.2023

Обновление ядра Linux: полное руководство по дистрибутивам

Ядро Linux — это фундаментальный слой между вашим оборудованием и каждым процессом, запущенным в системе. Оно управляет планированием CPU, распределением памяти, драйверами устройств, системными вызовами и применением политик безопасности. Поддержание его в актуальном состоянии не является опциональным для производственных систем — устаревшие ядра подвергают серверы эксплойтам повышения привилегий, уязвимостям повреждения памяти и регрессиям производительности, которые устраняются в более новых версиях.

Это руководство содержит исчерпывающие, технически точные инструкции по обновлению ядра Linux в Ubuntu, Debian, CentOS, RHEL и Arch Linux — включая настройку загрузчика, регенерацию initramfs, закрепление версий и процедуры отката, которые большинство руководств полностью упускают.

Почему обновления ядра являются критически важной задачей обслуживания

Каждый выпуск ядра включает комбинацию патчей безопасности (CVE), улучшений совместимости с оборудованием, оптимизаций планировщика, а также новых возможностей файловой системы и сети. Последствия использования устаревшего ядра включают:

  • Незакрытые CVE: Уязвимости, такие как Dirty COW (CVE-2016-5195), меры защиты от Spectre/Meltdown и более поздние ошибки повышения привилегий, являются проблемами уровня ядра, которые ни один инструмент безопасности прикладного уровня не может полностью компенсировать.
  • Деградация производительности: В старых ядрах отсутствуют улучшения планировщика CFS, уплотнения памяти и обработки глубины очереди NVMe, которые напрямую влияют на пропускную способность сервера.
  • Несовместимость драйверов: Новое оборудование, включая современные контроллеры NVMe и сетевые адаптеры, может требовать версий ядра, предоставляющих обновлённые интерфейсы драйверов.
  • Отсутствие поддержки системных вызовов: Среды выполнения контейнеров (Docker, Podman, containerd) и фреймворки безопасности (eBPF, seccomp) зависят от функций ядра, введённых в конкретных версиях.

В среде VPS Hosting ядро также определяет эффективность взаимодействия гостевой ОС с гипервизором — это означает, что актуальное ядро с современными драйверами virtio и поддержкой паравиртуализации напрямую обеспечивает меньшую задержку и лучшую пропускную способность I/O.

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

Независимо от дистрибутива, выполните следующие шаги перед изменением ядра:

  1. Создайте снимок или резервную копию системы. Если ваш провайдер поддерживает снимки, создайте его сейчас. На физическом оборудовании убедитесь, что резервная копия актуальна.
  2. Проверьте текущую версию ядра: uname -r
  3. Проверьте доступное дисковое пространство в /boot: df -h /boot — заполненный раздел /boot приведёт к скрытому сбою установки ядра в системах на базе Debian.
  4. Определите ваш загрузчик: ls /boot | grep -E 'grub|efi' — знание того, используете ли вы GRUB2, systemd-boot или GRUB legacy, изменяет шаги после установки.
  5. Проверьте удерживаемые или закреплённые пакеты: В Debian/Ubuntu выполните apt-mark showhold. В RHEL/CentOS проверьте /etc/yum.conf на наличие exclude=kernel*.
  6. Подготовьте доступ к консоли. Если новое ядро не загрузится, SSH будет недоступен. Убедитесь, что у вас есть внеполосный доступ (VNC, IPMI или аварийная консоль вашего провайдера) перед перезагрузкой.

Обновление ядра в Ubuntu и Debian

Ubuntu и Debian используют менеджер пакетов APT и поставляют образы ядра как стандартные пакеты по соглашению об именовании linux-image-*. Ядро, его модули и initramfs управляются через эту систему, что делает обновления относительно простыми — однако есть важные нюансы.

Шаг 1: Синхронизация репозиториев пакетов

sudo apt update

Это обновляет локальный индекс пакетов из всех настроенных репозиториев. Не пропускайте этот шаг — выполнение apt upgrade без предварительного apt update может привести к установке устаревших версий пакетов.

Шаг 2: Применение полного обновления системы

sudo apt upgrade

Это обновляет установленные пакеты, но не установит новое ядро, если это требует удаления существующих пакетов. Для переходов между версиями ядра (например, с 5.15 на 6.1) используйте:

sudo apt full-upgrade

Устаревшая команда dist-upgrade функционально эквивалентна full-upgrade и по-прежнему доступна, но full-upgrade является текущей канонической формой.

Шаг 3: Установка метапакета ядра

sudo apt install linux-image-generic linux-headers-generic

Метапакет (linux-image-generic) всегда отслеживает последнее рекомендуемое ядро для вашей архитектуры. Его явная установка гарантирует, что менеджер пакетов знает о вашем желании получать обновления ядра в дальнейшем. Пакет linux-headers-generic необходим, если вы компилируете внешние модули ядра (например, драйверы под управлением DKMS, такие как ZFS или проприетарные драйверы GPU).

Для систем Ubuntu вы также можете установить ядра HWE (Hardware Enablement), которые переносят более новые ядра в LTS-релизы:

sudo apt install linux-generic-hwe-22.04

Шаг 4: Проверка подготовки нового ядра

dpkg --list | grep linux-image

Вы должны увидеть новую версию ядра со статусом ii (установлено). Старое ядро остаётся установленным в качестве резервного варианта — это сделано намеренно.

Шаг 5: Перезагрузка и подтверждение

sudo reboot

После повторного подключения:

uname -r

Убедитесь, что вывод отражает новую версию ядра.

Очистка старых ядер в Debian/Ubuntu

Старые ядра накапливаются в /boot и занимают дисковое пространство. Безопасно удалите их с помощью:

sudo apt autoremove --purge

APT автоматически определяет устаревшие пакеты ядра и удаляет их, но только если они не являются текущим работающим ядром или последним резервным вариантом.

Критическая ошибка: Никогда не удаляйте вручную пакет текущего работающего ядра. Всегда сначала перезагрузитесь в новое ядро, а затем выполните autoremove.

Обновление ядра в CentOS и RHEL

CentOS и RHEL используют управление пакетами на основе RPM — либо yum (CentOS 7, RHEL 7), либо dnf (CentOS 8+, RHEL 8+, AlmaLinux, Rocky Linux). Процесс обновления ядра отличается от систем на базе Debian в одном важном аспекте: системы RPM по умолчанию сохраняют несколько версий ядра одновременно, что контролируется директивой installonly_limit в /etc/yum.conf или /etc/dnf/dnf.conf.

Шаг 1: Обновление всех пакетов, включая ядро

# CentOS 7 / RHEL 7
sudo yum update

# CentOS 8+ / RHEL 8+ / AlmaLinux / Rocky Linux
sudo dnf update

Эта единственная команда в большинстве случаев обрабатывает обновление ядра. В отличие от Debian, здесь нет отдельного эквивалента dist-upgradeyum update / dnf update автоматически обрабатывает разрешение зависимостей при переходах между версиями ядра.

Шаг 2: Установка конкретной версии ядра (необязательно)

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

sudo yum install kernel-<version>
# Example:
sudo yum install kernel-5.14.0-284.30.1.el9_2

Шаг 3: Регенерация конфигурации GRUB2

В системах RHEL/CentOS конфигурацию загрузчика необходимо явно регенерировать для включения записи нового ядра. Правильная команда зависит от того, использует ли ваша система BIOS или UEFI:

Системы на основе BIOS:

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

Системы на основе UEFI:

sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# or for CentOS/AlmaLinux/Rocky:
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Важно: В RHEL 8+ и производных шаг grub2-mkconfig часто выполняется автоматически скриптлетами пакета kernel-core через grubby. Вы можете проверить запись загрузки по умолчанию с помощью:

sudo grubby --default-kernel

Чтобы вручную установить ядро по умолчанию:

sudo grubby --set-default /boot/vmlinuz-<new-version>

Шаг 4: Перезагрузка и проверка

sudo reboot
uname -r

Управление хранением ядер в RHEL/CentOS

По умолчанию installonly_limit=3 в /etc/dnf/dnf.conf сохраняет три последних ядра. Измените это значение, если дисковое пространство в /boot ограничено:

sudo sed -i 's/installonly_limit=3/installonly_limit=2/' /etc/dnf/dnf.conf

Чтобы вывести список всех установленных ядер:

rpm -q kernel

Обновление ядра в Arch Linux

Arch Linux следует модели скользящего выпуска, что означает непрерывное обновление ядра по мере выхода новых версий upstream. Здесь нет дискретных версий выпуска — система всегда движется к последнему стабильному ядру. Это делает Arch идеальным для разработчиков, которым нужны передовые функции ядра, но требует более внимательного обслуживания.

Шаг 1: Полная синхронизация системы и обновление

sudo pacman -Syu

Флаг -S синхронизирует пакеты, -y обновляет базу данных, а -u обновляет все установленные пакеты. В Arch следует всегда выполнять полное обновление системы, а не обновлять отдельные пакеты изолированно — частичные обновления явно не поддерживаются и могут вызвать нарушение зависимостей библиотек.

Шаг 2: Установка или переустановка пакета ядра

Если ядро не было обновлено командой pacman -Syu (например, вы переключаете варианты ядра), установите его явно:

sudo pacman -S linux linux-headers

Arch Linux предлагает несколько официальных вариантов ядра:

Пакет ядраОписание
linuxСтабильное ядро, последний upstream-релиз
linux-ltsЯдро с долгосрочной поддержкой, консервативные обновления
linux-hardenedЯдро с усиленной безопасностью и дополнительными патчами
linux-zenОптимизировано для рабочих нагрузок рабочего стола/интерактивных задач

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

Шаг 3: Регенерация initramfs

sudo mkinitcpio -p linux

Это регенерирует начальную файловую систему RAM с использованием пресета, определённого в /etc/mkinitcpio.d/linux.preset. initramfs содержит минимальную среду, необходимую для монтирования корневой файловой системы до того, как полная ОС возьмёт управление. Пропуск этого шага после обновления ядра может привести к тому, что система не загрузится, если корневая файловая система требует модуля (например, ext4, btrfs или зашифрованный том через dm-crypt).

Если вы установили linux-lts, используйте соответствующий пресет:

sudo mkinitcpio -p linux-lts

Шаг 4: Обновление конфигурации загрузчика GRUB

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

Обратите внимание, что в Arch команда называется grub-mkconfig (без суффикса 2), в отличие от RHEL/CentOS. Если вместо GRUB вы используете systemd-boot (распространено на UEFI-установках Arch), обновите запись загрузки вручную или выполните:

sudo bootctl update

Шаг 5: Перезагрузка

sudo reboot
uname -r

Сравнение дистрибутивов: механизмы обновления ядра

ФункцияUbuntu/DebianCentOS/RHELArch Linux
Менеджер пакетовAPT (apt)YUM / DNFPacman
Модель выпускаФиксированные выпуски (LTS/стандартные)Фиксированные выпуски (мажорные версии)Скользящий выпуск
Метапакет ядраlinux-image-generickernellinux, linux-lts
Требуется обновление загрузчикаАвтоматически (через скрипты postinst)Вручную (grub2-mkconfig или grubby)Вручную (grub-mkconfig)
Регенерация initramfsАвтоматически (update-initramfs)Автоматически (через dracut)Вручную (mkinitcpio)
Сохранение нескольких ядерДа (autoremove очищает старые)Да (контролируется installonly_limit)Да (все установленные варианты сохраняются)
Опция LTS-ядраДа (стек HWE)Да (каналы EUS в RHEL)Да (пакет linux-lts)
Механизм откатаМеню GRUB при загрузкеМеню GRUB при загрузкеМеню GRUB при загрузке

Откат ядра: что делать, когда новое ядро нарушает работу системы

Обновление ядра, вызывающее сбои загрузки или несовместимость оборудования, является реальным операционным риском. Вот процедура восстановления:

Шаг 1: Получите доступ к меню GRUB при загрузке. Если GRUB скрыт (что характерно для VPS-сред), удерживайте или многократно нажимайте Shift (BIOS) или Esc (UEFI) во время загрузки, или установите GRUB_TIMEOUT в /etc/default/grub в ненулевое значение перед обновлением.

Шаг 2: Выберите «Дополнительные параметры» и выберите предыдущую версию ядра из списка.

Шаг 3: После загрузки в рабочее ядро выполните одно из следующих действий:

  • Закрепите рабочее ядро, чтобы предотвратить его удаление (Debian/Ubuntu: sudo apt-mark hold linux-image-<version>)
  • Установите его как запись загрузки по умолчанию (RHEL: sudo grubby --set-default /boot/vmlinuz-<version>)
  • Удалите проблемное ядро (Arch: sudo pacman -R linux с последующей переустановкой варианта LTS)

Шаг 4: Сообщите об ошибке команде разработчиков ядра вашего дистрибутива или проверьте трекеры ошибок upstream-ядра перед повторной попыткой обновления.

Обновления ядра в контейнеризованных и виртуализированных средах

В среде VPS Hosting процесс обновления ядра имеет дополнительное соображение: вы обновляете ядро гостевой системы, а не ядро хост-гипервизора. Это стандартно и ожидаемо — гостевая ОС запускает собственное ядро в паравиртуализированном или полностью виртуализированном контексте.

Однако на VPS-платформах на основе контейнеров (OpenVZ, LXC без пространств имён ядра) гостевая система может разделять ядро хоста. В таких случаях uname -r отражает версию ядра хоста, и попытка установить новый пакет ядра внутри контейнера не изменит работающее ядро — хотя сама установка пакета безвредна.

На VPS-инфраструктуре на основе KVM (которая является стандартом для современных провайдеров) у вас есть полный контроль над ядром. Убедитесь, что обновлённое ядро включает драйверы virtio, скомпилированные в ядро или доступные как модули — в частности virtio_net, virtio_blk и virtio_scsi — для поддержания сетевого и дискового подключения после перезагрузки.

Для рабочих нагрузок, требующих максимальной производительности сырого I/O — таких как серверы баз данных или конвейеры вывода ML — рассмотрите сочетание обновлений ядра со средой Dedicated Servers, где у вас есть полный контроль над оборудованием и отсутствуют накладные расходы гипервизора.

Дополнительно: установка основных или пользовательских ядер

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

Установщик основного ядра Ubuntu:

# Using the mainline tool (third-party PPA)
sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update
sudo apt install mainline
mainline install-latest

Компиляция из исходного кода (все дистрибутивы):

# Download from kernel.org
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.x.y.tar.xz
tar -xf linux-6.x.y.tar.xz
cd linux-6.x.y
cp /boot/config-$(uname -r) .config
make olddefconfig
make -j$(nproc)
sudo make modules_install
sudo make install

Компиляция из исходного кода даёт вам точный контроль над конфигурацией ядра — включение или отключение конкретных подсистем, применение пользовательских патчей или включение экспериментальных функций. Это особенно актуально для рабочих нагрузок GPU Hosting, где могут потребоваться пользовательские параметры ядра для совместимости драйверов NVIDIA или настройки IOMMU.

Безопасная автоматизация обновлений ядра

Автоматические обновления ядра — это возможность с двойным эффектом. Они сокращают окно уязвимости к известным CVE, но создают риск автоматической перезагрузки в неработающее состояние ядра.

Ubuntu/Debian — unattended-upgrades:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

Отредактируйте /etc/apt/apt.conf.d/50unattended-upgrades для включения или исключения пакетов ядра:

Unattended-Upgrade::Package-Blacklist {
    // "linux-image";  // Uncomment to exclude kernel updates
};

RHEL/CentOS — dnf-automatic:

sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer

Настройте /etc/dnf/automatic.conf для установки apply_updates = yes только после проверки вашей стратегии отката.

Лучшая практика для производственных сред: Применяйте обновления безопасности ядра автоматически, но управляйте перезагрузками через окно обслуживания с помощью таких инструментов, как needrestart или kured (Kubernetes Reboot Daemon для контейнеризованных рабочих нагрузок).

Матрица решений и ключевые выводы

Используйте этот контрольный список до и после каждого обновления ядра:

  • Снимок или резервная копия созданы перед началом
  • Текущая версия ядра задокументирована (uname -r)
  • Раздел /boot имеет достаточно свободного места (df -h /boot)
  • Доступ к консоли/внеполосный доступ подтверждён и протестирован
  • Тайм-аут GRUB установлен в ненулевое значение для возможности восстановительной загрузки
  • Новое ядро установлено и проверено в менеджере пакетов
  • initramfs регенерирован (критично для Arch; проверьте на всех дистрибутивах)
  • Конфигурация GRUB регенерирована там, где это необходимо (RHEL, Arch)
  • Система перезагружена и новая версия ядра подтверждена (uname -r)
  • Старые пакеты ядра очищены после подтверждения стабильности
  • Версия ядра задокументирована в журнале изменений или системе мониторинга
  • Для модулей DKMS (ZFS, проприетарные драйверы): модули пересобраны и проверены

Когда использовать LTS-ядра, а когда последнее стабильное:

  • Производственные серверы баз данных, веб-серверы, почтовая инфраструктура: Используйте LTS-ядра. Стабильность и предсказуемый ABI для модулей ядра важнее доступа к новейшим функциям. Если вы используете стеки Email Hosting или Shared Web Hosting, LTS является правильным выбором.
  • Среды разработки, узлы GPU-вычислений, граничные сети: Используйте последнее стабильное ядро для доступа к новым возможностям eBPF, обновлённым алгоритмам планировщика и актуальной поддержке оборудования.
  • Среды с критическими требованиями к безопасности: Рассмотрите linux-hardened (Arch) или RHEL с живым патчингом ядра (kpatch) для применения исправлений CVE без перезагрузки.

Для сред, где SSL/TLS-терминация и управление сертификатами являются частью стека, имейте в виду, что поддержка TLS на уровне ядра (ktls) — доступная в ядрах версии 4.13+ — может перенести шифрование TLS-записей на ядро, снижая нагрузку на CPU. Сочетайте это с правильно управляемыми SSL Certificates для полноценной защиты.

Часто задаваемые вопросы

В: Нарушит ли обновление ядра работу моих запущенных приложений?

О: Само обновление ядра не влияет на запущенные процессы — они продолжают использовать старое ядро до перезагрузки. После перезагрузки в новое ядро приложения, зависящие от модулей ядра, скомпилированных под старую версию (например, модули DKMS, такие как ZFS или VirtualBox), могут не загрузиться. Всегда проверяйте статус модулей DKMS с помощью dkms status перед перезагрузкой.

В: Как проверить, какая версия ядра доступна перед установкой?

О: В Debian/Ubuntu: apt-cache show linux-image-generic | grep Version. В RHEL/CentOS: dnf info kernel. В Arch: pacman -Si linux | grep Version. Это позволяет оценить обновление перед его применением.

В: Можно ли обновить ядро на VPS без доступа к консоли?

О: Технически да, но это крайне не рекомендуется. Если новое ядро не загрузится, вы потеряете доступ по SSH без возможности восстановления. Всегда убедитесь, что ваш VPS-провайдер предоставляет аварийную консоль (VNC или последовательную) перед выполнением удалённых обновлений ядра.

В: В чём разница между apt upgrade и apt full-upgrade для обновлений ядра?

О: apt upgrade не установит новое ядро, если это требует удаления какого-либо установленного пакета. apt full-upgrade (ранее dist-upgrade) разрешает эти конфликты, допуская удаление пакетов по мере необходимости — это обычно требуется при переходе между мажорными версиями ядра в Debian/Ubuntu.

В: Как предотвратить автоматическое обновление конкретной версии ядра?

О: В Debian/Ubuntu используйте sudo apt-mark hold linux-image-<version>. В RHEL/CentOS добавьте exclude=kernel-<version> в /etc/dnf/dnf.conf или используйте dnf versionlock add kernel-<version> после установки пакета python3-dnf-plugin-versionlock. В Arch добавьте пакет в IgnorePkg в /etc/pacman.conf.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать