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 Хостинг, ядрото също управлява колко ефективно гостуващата ОС взаимодейства с хипервайзора — което означава, че актуалното ядро с актуални virtio драйвери и поддръжка на паравиртуализация се превежда директно в по-ниска латентност и по-добра I/O пропускателна способност.

Преди да започнете: Контролен списък преди актуализацията

Независимо от дистрибуцията, изпълнете тези стъпки преди да докоснете ядрото:

  1. Направете снимка или резервно копие на вашата система. Ако вашият доставчик поддържа снимки, направете такава сега. На bare metal се уверете, че резервното ви копие е актуално.
  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. Ако използвате systemd-boot вместо GRUB (обичайно при 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 Хостинг, процесът на актуализиране на ядрото има допълнително съображение: актуализирате ядрото на госта, а не ядрото на хипервайзора на хоста. Това е стандартно и очаквано — гостуващата ОС изпълнява собственото си ядро в паравиртуализиран или напълно виртуализиран контекст.

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

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

За работни натоварвания, изискващи максимална сурова I/O производителност — като сървъри за бази данни или ML inference тръбопроводи — помислете за съчетаване на актуализации на ядрото с среда за Dedicated Servers, където имате пълен контрол върху хардуера и без overhead от хипервайзора.

Разширено: Инсталиране на mainline или персонализирани ядра

За потребители, които се нуждаят от функции на ядрото, все още непренесени към стабилното ядро на тяхната дистрибуция, mainline ядрата могат да бъдат инсталирани от изходен код или чрез инструменти, специфични за дистрибуцията.

Ubuntu Mainline Kernel Installer:

# 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 Хостинг, където може да се изискват персонализирани параметри на ядрото за съвместимост с 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 за модули на ядрото надвишават достъпа до най-новите функции. Ако изпълнявате стекове за Имейл Хостинг или Споделен Уеб Хостинг, LTS е правилният избор.
  • Среди за разработка, GPU изчислителни възли, edge мрежи: Използвайте най-новото стабилно ядро, за да получите достъп до нови eBPF възможности, актуализирани алгоритми на планировчика и текуща поддръжка на хардуера.
  • Среди, критични за сигурността: Помислете за linux-hardened (Arch) или RHEL с live patching на ядрото (kpatch), за да прилагате корекции на CVE без рестартиране.

За среди, където SSL/TLS терминирането и управлението на сертификати са част от стека, имайте предвид, че поддръжката на TLS на ниво ядро (ktls) — налична в ядра 4.13+ — може да прехвърли криптирането на TLS записи към ядрото, намалявайки натоварването на CPU. Съчетайте това с правилно управлявани SSL Сертификати за пълна позиция на сигурността.

ЧЗВ

В: Ще наруши ли актуализацията на ядрото работата на изпълняваните ми приложения?

О: Самата актуализация на ядрото не засяга изпълняваните процеси — те продължават да използват старото ядро до рестартиране. След рестартиране в новото ядро, приложенията, които зависят от модули на ядрото, компилирани спрямо старата версия (напр. 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
За начало