Оновлення ядра 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.
Перед початком: контрольний список перед оновленням
Незалежно від дистрибутива, виконайте ці кроки перед будь-якими змінами ядра:
- Зробіть знімок або резервну копію системи. Якщо ваш провайдер підтримує знімки, зробіть його зараз. На фізичному обладнанні переконайтеся, що резервна копія актуальна.
- Перевірте поточну версію ядра:
uname -r - Перевірте наявний дисковий простір у /boot:
df -h /boot— повний розділ /boot призведе до мовчазного збою встановлення ядра в системах на основі Debian. - Підтвердіть ваш завантажувач:
ls /boot | grep -E 'grub|efi'— знання того, чи використовуєте ви GRUB2, systemd-boot або GRUB legacy, змінює кроки після встановлення. - Перевірте утримувані або закріплені пакети: У Debian/Ubuntu виконайте
apt-mark showhold. У RHEL/CentOS перевірте/etc/yum.confна наявністьexclude=kernel*. - Підготуйте доступ до консолі. Якщо нове ядро не завантажиться, 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 --purgeAPT автоматично визначає застарілі пакети ядра та видаляє їх, але лише якщо вони не є поточним запущеним ядром або найновішим резервним варіантом.
Критична пастка: Ніколи не видаляйте вручну пакет поточного запущеного ядра. Завжди спочатку перезавантажтеся в нове ядро, а потім виконайте 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-upgrade — yum 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 дотримується моделі rolling release, тобто ядро оновлюється безперервно в міру виходу нових версій upstream. Немає окремих версій випусків — система завжди рухається до останнього стабільного ядра. Це робить Arch ідеальним для розробників, яким потрібні найновіші функції ядра, але це вимагає більш уважного обслуговування.
Крок 1: Повна синхронізація системи та оновлення
sudo pacman -SyuПрапор -S синхронізує пакети, -y оновлює базу даних, а -u оновлює всі встановлені пакети. На Arch слід завжди виконувати повне оновлення системи, а не оновлювати окремі пакети ізольовано — часткові оновлення явно не підтримуються і можуть спричинити порушення залежностей бібліотек.
Крок 2: Встановлення або перевстановлення пакету ядра
Якщо ядро не було оновлено командою pacman -Syu (наприклад, ви переходите на інший варіант ядра), встановіть його явно:
sudo pacman -S linux linux-headersArch 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. Якщо ви використовуєте systemd-boot замість GRUB (поширено на UEFI-установках Arch), оновіть запис завантаження вручну або виконайте:
sudo bootctl updateКрок 5: Перезавантаження
sudo reboot
uname -rПорівняння дистрибутивів: механізми оновлення ядра
| Функція | Ubuntu/Debian | CentOS/RHEL | Arch Linux |
|---|---|---|---|
| Менеджер пакетів | APT (apt) | YUM / DNF | Pacman |
| Модель випусків | Фіксовані випуски (LTS/стандартні) | Фіксовані випуски (основні версії) | Rolling release |
| Метапакет ядра | linux-image-generic | kernel | linux, 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, де ви маєте повний контроль над апаратним забезпеченням і відсутні накладні витрати гіпервізора.
Розширено: встановлення mainline або кастомних ядер
Для користувачів, яким потрібні функції ядра, ще не перенесені до стабільного ядра їхнього дистрибутива, mainline-ядра можна встановити з вихідного коду або за допомогою інструментів, специфічних для дистрибутива.
Інсталятор mainline-ядра 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 та керування сертифікатами є частиною стека, майте на увазі, що підтримка kernel-level TLS (ktls) — доступна в ядрах 4.13+ — може перекласти шифрування TLS-записів на ядро, зменшуючи навантаження на CPU. Поєднайте це з належно керованими SSL Certificates для повноцінного рівня безпеки.
FAQ
П: Чи зламає оновлення ядра мої запущені застосунки?
В: Саме оновлення ядра не впливає на запущені процеси — вони продовжують використовувати старе ядро до перезавантаження. Після перезавантаження в нове ядро застосунки, що залежать від модулів ядра, скомпільованих під стару версію (наприклад, модулі 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.
