15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
26.12.2023

Aktualizacja jądra Linux: Kompletny przewodnik dla każdej dystrybucji

Jądro Linux jest fundamentalną warstwą między sprzętem a każdym procesem działającym w systemie. Zarządza harmonogramowaniem CPU, alokacją pamięci, sterownikami urządzeń, wywołaniami systemowymi i egzekwowaniem zabezpieczeń. Utrzymywanie go w aktualnym stanie nie jest opcjonalne dla systemów produkcyjnych — przestarzałe jądra narażają serwery na exploity eskalacji uprawnień, luki w zabezpieczeniach związane z uszkodzeniem pamięci oraz regresje wydajności, które nowsze wersje rozwiązują.

Ten przewodnik zawiera wyczerpujące, technicznie precyzyjne instrukcje aktualizacji jądra Linux w systemach Ubuntu, Debian, CentOS, RHEL i Arch Linux — w tym konfigurację bootloadera, regenerację initramfs, przypinanie wersji i procedury wycofywania zmian, które większość przewodników całkowicie pomija.

Dlaczego aktualizacje jądra są krytycznym zadaniem konserwacyjnym

Każde wydanie jądra zawiera kombinację poprawek bezpieczeństwa (CVE), ulepszeń kompatybilności sprzętowej, optymalizacji harmonogramowania oraz nowych możliwości systemu plików lub sieci. Konsekwencje używania przestarzałego jądra obejmują:

  • Niezałatane CVE: Luki w zabezpieczeniach, takie jak Dirty COW (CVE-2016-5195), zabezpieczenia Spectre/Meltdown i nowsze błędy eskalacji uprawnień, to problemy na poziomie jądra, których żadne narzędzie bezpieczeństwa na poziomie aplikacji nie może w pełni zrekompensować.
  • Degradacja wydajności: Starsze jądra nie posiadają ulepszeń harmonogramera CFS, kompaktowania pamięci i obsługi głębokości kolejki NVMe, które bezpośrednio wpływają na przepustowość serwera.
  • Niekompatybilność sterowników: Nowy sprzęt, w tym nowoczesne kontrolery NVMe i karty sieciowe, może wymagać wersji jądra udostępniających zaktualizowane interfejsy sterowników.
  • Brak obsługi wywołań systemowych: Środowiska uruchomieniowe konteneryzacji (Docker, Podman, containerd) i frameworki bezpieczeństwa (eBPF, seccomp) zależą od funkcji jądra wprowadzonych w określonych wersjach.

W środowisku VPS Hosting jądro reguluje również efektywność interakcji systemu operacyjnego gościa z hiperwizorem — co oznacza, że aktualne jądro z aktualnymi sterownikami virtio i obsługą parawirtualizacji przekłada się bezpośrednio na mniejsze opóźnienia i lepszą przepustowość I/O.

Przed rozpoczęciem: lista kontrolna przed aktualizacją

Niezależnie od dystrybucji, wykonaj te kroki przed dotknięciem jądra:

  1. Wykonaj migawkę lub kopię zapasową systemu. Jeśli Twój dostawca obsługuje migawki, zrób ją teraz. Na sprzęcie fizycznym upewnij się, że kopia zapasowa jest aktualna.
  2. Sprawdź aktualną wersję jądra: uname -r
  3. Sprawdź dostępne miejsce na dysku w /boot: df -h /boot — pełna partycja /boot spowoduje ciche niepowodzenie instalacji jądra w systemach opartych na Debianie.
  4. Potwierdź swój bootloader: ls /boot | grep -E 'grub|efi' — wiedza o tym, czy używasz GRUB2, systemd-boot czy GRUB legacy, zmienia kroki po instalacji.
  5. Sprawdź wstrzymane lub przypięte pakiety: W Debianie/Ubuntu uruchom apt-mark showhold. W RHEL/CentOS sprawdź /etc/yum.conf dla exclude=kernel*.
  6. Przygotuj dostęp do konsoli. Jeśli nowe jądro nie uruchomi się, SSH będzie niedostępne. Upewnij się, że masz dostęp pozapasmowy (VNC, IPMI lub konsola awaryjna dostawcy) przed ponownym uruchomieniem.

Aktualizacja jądra w Ubuntu i Debianie

Ubuntu i Debian używają menedżera pakietów APT i dostarczają obrazy jądra jako standardowe pakiety zgodnie z konwencją nazewnictwa linux-image-*. Jądro, jego moduły i initramfs są zarządzane przez ten system, co sprawia, że aktualizacje są stosunkowo proste — ale istnieją ważne niuanse.

Krok 1: Synchronizacja repozytoriów pakietów

sudo apt update

Odświeża to lokalny indeks pakietów względem wszystkich skonfigurowanych repozytoriów. Nie pomijaj tego kroku — uruchomienie apt upgrade bez wcześniejszego apt update może zainstalować przestarzałe wersje pakietów.

Krok 2: Zastosowanie pełnej aktualizacji systemu

sudo apt upgrade

Aktualizuje zainstalowane pakiety, ale nie zainstaluje nowego jądra, jeśli wymaga to usunięcia istniejących pakietów. W przypadku przejść między wersjami jądra (np. z 5.15 na 6.1) użyj:

sudo apt full-upgrade

Starsze polecenie dist-upgrade jest funkcjonalnie równoważne full-upgrade i pozostaje dostępne, ale full-upgrade jest aktualną kanoniczną formą.

Krok 3: Instalacja metapakietu jądra

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

Metapakiet (linux-image-generic) zawsze śledzi najnowsze zalecane jądro dla Twojej architektury. Jawna instalacja go zapewnia, że menedżer pakietów wie, że chcesz aktualizacji jądra w przyszłości. Pakiet linux-headers-generic jest wymagany, jeśli kompilujesz zewnętrzne moduły jądra (np. sterowniki zarządzane przez DKMS, takie jak ZFS lub własnościowe sterowniki GPU).

W systemach Ubuntu możesz również instalować jądra HWE (Hardware Enablement), które backportują nowsze jądra do wydań LTS:

sudo apt install linux-generic-hwe-22.04

Krok 4: Weryfikacja przygotowania nowego jądra

dpkg --list | grep linux-image

Powinieneś zobaczyć nową wersję jądra wymienioną ze statusem ii (zainstalowane). Stare jądro pozostaje zainstalowane jako zapasowe — jest to zamierzone.

Krok 5: Ponowne uruchomienie i potwierdzenie

sudo reboot

Po ponownym połączeniu:

uname -r

Potwierdź, że wynik odzwierciedla nową wersję jądra.

Czyszczenie starych jąder w Debianie/Ubuntu

Stare jądra gromadzą się w /boot i zajmują miejsce na dysku. Usuń je bezpiecznie za pomocą:

sudo apt autoremove --purge

APT automatycznie identyfikuje zastąpione pakiety jądra i usuwa je, ale tylko jeśli nie są aktualnie uruchomionym jądrem lub najnowszym zapasowym.

Krytyczna pułapka: Nigdy ręcznie nie usuwaj aktualnie uruchomionego pakietu jądra. Zawsze najpierw uruchom ponownie system z nowym jądrem, a następnie uruchom autoremove.

Aktualizacja jądra w CentOS i RHEL

CentOS i RHEL używają zarządzania pakietami opartego na RPM — albo yum (CentOS 7, RHEL 7) albo dnf (CentOS 8+, RHEL 8+, AlmaLinux, Rocky Linux). Proces aktualizacji jądra różni się od systemów opartych na Debianie w jednym ważnym aspekcie: systemy RPM domyślnie zachowują jednocześnie wiele wersji jądra, kontrolowanych przez dyrektywę installonly_limit w /etc/yum.conf lub /etc/dnf/dnf.conf.

Krok 1: Aktualizacja wszystkich pakietów łącznie z jądrem

# CentOS 7 / RHEL 7
sudo yum update

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

To pojedyncze polecenie obsługuje aktualizację jądra w większości przypadków. W przeciwieństwie do Debiana, nie ma oddzielnego odpowiednika dist-upgradeyum update / dnf update automatycznie obsługuje rozwiązywanie zależności dla przejść między wersjami jądra.

Krok 2: Instalacja określonej wersji jądra (opcjonalnie)

Jeśli potrzebujesz określonej wersji jądra zamiast najnowszej dostępnej:

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

Krok 3: Regeneracja konfiguracji GRUB2

W systemach RHEL/CentOS konfiguracja bootloadera musi być jawnie zregenerowana, aby uwzględnić nowy wpis jądra. Prawidłowe polecenie zależy od tego, czy system używa BIOS czy UEFI:

Systemy oparte na BIOS:

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

Systemy oparte na 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

Ważne: W RHEL 8+ i pochodnych, krok grub2-mkconfig jest często obsługiwany automatycznie przez skrypty pakietu kernel-core za pośrednictwem grubby. Możesz zweryfikować domyślny wpis rozruchowy za pomocą:

sudo grubby --default-kernel

Aby ręcznie ustawić domyślne jądro:

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

Krok 4: Ponowne uruchomienie i weryfikacja

sudo reboot
uname -r

Zarządzanie przechowywaniem jąder w RHEL/CentOS

Domyślnie installonly_limit=3 w /etc/dnf/dnf.conf zachowuje trzy najnowsze jądra. Dostosuj tę wartość, jeśli miejsce na dysku w /boot jest ograniczone:

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

Aby wyświetlić listę wszystkich zainstalowanych jąder:

rpm -q kernel

Aktualizacja jądra w Arch Linux

Arch Linux stosuje model wydań kroczących, co oznacza, że jądro jest aktualizowane w sposób ciągły w miarę wydawania nowych wersji upstream. Nie ma dyskretnych wersji wydań — system zawsze zmierza w kierunku najnowszego stabilnego jądra. Sprawia to, że Arch jest idealny dla deweloperów potrzebujących najnowszych funkcji jądra, ale wymaga bardziej uważnej konserwacji.

Krok 1: Pełna synchronizacja systemu i aktualizacja

sudo pacman -Syu

Flaga -S synchronizuje pakiety, -y odświeża bazę danych, a -u aktualizuje wszystkie zainstalowane pakiety. W Arch zawsze powinieneś wykonywać pełną aktualizację systemu zamiast aktualizować poszczególne pakiety w izolacji — częściowe aktualizacje są jawnie nieobsługiwane i mogą powodować uszkodzenie zależności bibliotek.

Krok 2: Instalacja lub ponowna instalacja pakietu jądra

Jeśli jądro nie zostało zaktualizowane przez pacman -Syu (np. przełączasz warianty jądra), zainstaluj je jawnie:

sudo pacman -S linux linux-headers

Arch Linux oferuje wiele oficjalnych wariantów jądra:

Pakiet jądraOpis
linuxStabilne jądro, najnowsze wydanie upstream
linux-ltsJądro z długoterminowym wsparciem, konserwatywne aktualizacje
linux-hardenedJądro wzmocnione pod kątem bezpieczeństwa z dodatkowymi łatkami
linux-zenZoptymalizowane pod kątem obciążeń desktopowych/interaktywnych

W środowiskach serwerowych linux-lts jest generalnie preferowane — zapewnia stabilne ABI dla modułów DKMS i zmniejsza częstotliwość ponownych uruchomień wymaganych przez aktualizacje jądra.

Krok 3: Regeneracja initramfs

sudo mkinitcpio -p linux

Regeneruje to początkowy system plików RAM przy użyciu presetu zdefiniowanego w /etc/mkinitcpio.d/linux.preset. initramfs zawiera minimalne środowisko potrzebne do zamontowania głównego systemu plików przed przejęciem kontroli przez pełny system operacyjny. Pominięcie tego kroku po aktualizacji jądra może skutkować systemem, który nie uruchamia się, jeśli główny system plików wymaga modułu (np. ext4, btrfs lub zaszyfrowanego woluminu przez dm-crypt).

Jeśli zainstalowałeś linux-lts, użyj odpowiedniego presetu:

sudo mkinitcpio -p linux-lts

Krok 4: Aktualizacja konfiguracji bootloadera GRUB

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

Zauważ, że w Arch polecenie to grub-mkconfig (bez przyrostka 2), w przeciwieństwie do RHEL/CentOS. Jeśli używasz systemd-boot zamiast GRUB (powszechne w instalacjach Arch z UEFI), zaktualizuj wpis rozruchowy ręcznie lub uruchom:

sudo bootctl update

Krok 5: Ponowne uruchomienie

sudo reboot
uname -r

Porównanie dystrybucji: mechanizmy aktualizacji jądra

FunkcjaUbuntu/DebianCentOS/RHELArch Linux
Menedżer pakietówAPT (apt)YUM / DNFPacman
Model wydańStałe wydania (LTS/standardowe)Stałe wydania (wersje główne)Wydania kroczące
Metapakiet jądralinux-image-generickernellinux, linux-lts
Wymagana aktualizacja bootloaderaAutomatyczna (przez skrypty postinst)Ręczna (grub2-mkconfig lub grubby)Ręczna (grub-mkconfig)
Regeneracja initramfsAutomatyczna (update-initramfs)Automatyczna (przez dracut)Ręczna (mkinitcpio)
Zachowywanie wielu jąderTak (autoremove czyści stare)Tak (kontrolowane przez installonly_limit)Tak (wszystkie zainstalowane warianty są zachowywane)
Opcja jądra LTSTak (stos HWE)Tak (kanały EUS w RHEL)Tak (pakiet linux-lts)
Mechanizm wycofywaniaMenu GRUB przy rozruchuMenu GRUB przy rozruchuMenu GRUB przy rozruchu

Wycofywanie jądra: co zrobić, gdy nowe jądro psuje system

Aktualizacja jądra powodująca awarie rozruchu lub niekompatybilność sprzętową jest realnym ryzykiem operacyjnym. Oto procedura odzyskiwania:

Krok 1: Uzyskaj dostęp do menu GRUB przy rozruchu. Jeśli GRUB jest ukryty (powszechne w środowiskach VPS), przytrzymaj lub wielokrotnie naciskaj Shift (BIOS) lub Esc (UEFI) podczas rozruchu, lub skonfiguruj GRUB_TIMEOUT w /etc/default/grub na wartość niezerową przed aktualizacją.

Krok 2: Wybierz „Opcje zaawansowane” i wybierz poprzednią wersję jądra z listy.

Krok 3: Po uruchomieniu z działającym jądrem, albo:

  • Przypnij działające jądro, aby zapobiec jego usunięciu (Debian/Ubuntu: sudo apt-mark hold linux-image-<version>)
  • Ustaw je jako domyślny wpis rozruchowy (RHEL: sudo grubby --set-default /boot/vmlinuz-<version>)
  • Usuń problematyczne jądro (Arch: sudo pacman -R linux a następnie ponowna instalacja wariantu LTS)

Krok 4: Zgłoś błąd do zespołu jądra swojej dystrybucji lub sprawdź upstream’owe narzędzia do śledzenia błędów jądra przed ponowną próbą aktualizacji.

Aktualizacje jądra w środowiskach konteneryzowanych i zwirtualizowanych

W środowisku VPS Hosting proces aktualizacji jądra ma dodatkowe zagadnienie: aktualizujesz jądro gościa, a nie jądro hiperwizora hosta. Jest to standardowe i oczekiwane — system operacyjny gościa uruchamia własne jądro w kontekście parawirtualizowanym lub w pełni zwirtualizowanym.

Jednak na platformach VPS opartych na kontenerach (OpenVZ, LXC bez przestrzeni nazw jądra), gość może współdzielić jądro hosta. W takich przypadkach uname -r odzwierciedla wersję jądra hosta, a próba zainstalowania nowego pakietu jądra wewnątrz kontenera nie zmieni uruchomionego jądra — choć sama instalacja pakietu jest nieszkodliwa.

W infrastrukturze VPS opartej na KVM (która jest standardem dla nowoczesnych dostawców) masz pełną kontrolę nad jądrem. Upewnij się, że zaktualizowane jądro zawiera sterowniki virtio skompilowane wewnętrznie lub dostępne jako moduły — konkretnie virtio_net, virtio_blk i virtio_scsi — aby utrzymać łączność sieciową i pamięci masowej po ponownym uruchomieniu.

W przypadku obciążeń wymagających maksymalnej surowej wydajności I/O — takich jak serwery baz danych lub potoki wnioskowania ML — rozważ połączenie aktualizacji jądra ze środowiskiem Serwerów Dedykowanych, gdzie masz pełną kontrolę nad sprzętem i brak narzutu hiperwizora.

Zaawansowane: instalowanie jąder mainline lub niestandardowych

Dla użytkowników potrzebujących funkcji jądra, które nie zostały jeszcze backportowane do stabilnego jądra ich dystrybucji, jądra mainline można instalować ze źródeł lub za pomocą narzędzi specyficznych dla dystrybucji.

Instalator jądra 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

Kompilacja ze źródeł (wszystkie dystrybucje):

# 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

Kompilacja ze źródeł daje precyzyjną kontrolę nad konfiguracją jądra — włączanie lub wyłączanie określonych podsystemów, stosowanie niestandardowych łatek lub włączanie eksperymentalnych funkcji. Jest to szczególnie istotne w przypadku obciążeń GPU Hosting, gdzie mogą być wymagane niestandardowe parametry jądra dla kompatybilności sterowników NVIDIA lub konfiguracji IOMMU.

Bezpieczna automatyzacja aktualizacji jądra

Nienadzorowane aktualizacje jądra to możliwość o podwójnym charakterze. Zmniejszają okno narażenia na znane CVE, ale wprowadzają ryzyko nienadzorowanego ponownego uruchomienia w uszkodzonym stanie jądra.

Ubuntu/Debian — unattended-upgrades:

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

Edytuj /etc/apt/apt.conf.d/50unattended-upgrades, aby uwzględnić lub wykluczyć pakiety jądra:

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

Skonfiguruj /etc/dnf/automatic.conf, aby ustawić apply_updates = yes tylko po zweryfikowaniu strategii wycofywania zmian.

Najlepsza praktyka dla produkcji: Stosuj aktualizacje bezpieczeństwa jądra automatycznie, ale bramkuj ponowne uruchomienia przez okno konserwacji używając narzędzi takich jak needrestart lub kured (Kubernetes Reboot Daemon dla obciążeń konteneryzowanych).

Macierz decyzyjna i kluczowe wnioski

Użyj tej listy kontrolnej przed i po każdej aktualizacji jądra:

  • Migawka lub kopia zapasowa ukończona przed rozpoczęciem
  • Aktualna wersja jądra udokumentowana (uname -r)
  • Partycja /boot ma wystarczająco wolnego miejsca (df -h /boot)
  • Dostęp do konsoli/pozapasmowy potwierdzony i przetestowany
  • Limit czasu GRUB ustawiony na wartość niezerową, aby umożliwić rozruch odzyskiwania
  • Nowe jądro zainstalowane i zweryfikowane w menedżerze pakietów
  • initramfs zregenerowany (krytyczne w Arch; zweryfikuj we wszystkich dystrybucjach)
  • Konfiguracja GRUB zregenerowana tam, gdzie jest to wymagane (RHEL, Arch)
  • System uruchomiony ponownie i nowa wersja jądra potwierdzona (uname -r)
  • Stare pakiety jądra wyczyszczone po potwierdzeniu stabilności
  • Wersja jądra udokumentowana w dzienniku zmian lub systemie monitorowania
  • Dla modułów DKMS (ZFS, własnościowe sterowniki): moduły przebudowane i zweryfikowane

Kiedy używać jąder LTS vs. najnowszych stabilnych:

  • Produkcyjne serwery baz danych, serwery WWW, infrastruktura poczty e-mail: Używaj jąder LTS. Stabilność i przewidywalne ABI dla modułów jądra przeważają nad dostępem do najnowszych funkcji. Jeśli prowadzisz stosy Email Hosting lub Shared Web Hosting, LTS jest właściwym wyborem.
  • Środowiska deweloperskie, węzły obliczeniowe GPU, sieci brzegowe: Używaj najnowszego stabilnego jądra, aby uzyskać dostęp do nowych możliwości eBPF, zaktualizowanych algorytmów harmonogramowania i aktualnej obsługi sprzętu.
  • Środowiska krytyczne dla bezpieczeństwa: Rozważ linux-hardened (Arch) lub RHEL z live patchingiem jądra (kpatch), aby stosować poprawki CVE bez ponownego uruchamiania.

W środowiskach, gdzie terminacja SSL/TLS i zarządzanie certyfikatami są częścią stosu, pamiętaj, że obsługa TLS na poziomie jądra (ktls) — dostępna w jądrach 4.13+ — może odciążyć szyfrowanie rekordów TLS do jądra, zmniejszając obciążenie CPU. Połącz to z właściwie zarządzanymi Certyfikatami SSL dla kompletnej postawy bezpieczeństwa.

FAQ

P: Czy aktualizacja jądra zepsuje moje działające aplikacje?

O: Sama aktualizacja jądra nie wpływa na działające procesy — nadal używają starego jądra do momentu ponownego uruchomienia. Po uruchomieniu z nowym jądrem aplikacje zależne od modułów jądra skompilowanych względem starej wersji (np. moduły DKMS takie jak ZFS lub VirtualBox) mogą nie załadować się. Zawsze weryfikuj status modułów DKMS za pomocą dkms status przed ponownym uruchomieniem.

P: Jak sprawdzić, która wersja jądra jest dostępna przed jej instalacją?

O: W Debianie/Ubuntu: apt-cache show linux-image-generic | grep Version. W RHEL/CentOS: dnf info kernel. W Arch: pacman -Si linux | grep Version. Pozwala to ocenić aktualizację przed jej zatwierdzeniem.

P: Czy mogę zaktualizować jądro na VPS bez dostępu do konsoli?

O: Technicznie tak, ale jest to zdecydowanie odradzane. Jeśli nowe jądro nie uruchomi się, utracisz dostęp SSH bez możliwości odzyskania. Zawsze upewnij się, że Twój dostawca VPS oferuje konsolę awaryjną (VNC lub szeregową) przed wykonywaniem zdalnych aktualizacji jądra.

P: Jaka jest różnica między apt upgrade a apt full-upgrade dla aktualizacji jądra?

O: apt upgrade nie zainstaluje nowego jądra, jeśli wymaga to usunięcia jakiegokolwiek aktualnie zainstalowanego pakietu. apt full-upgrade (dawniej dist-upgrade) rozwiązuje te konflikty, zezwalając na usunięcie pakietów w razie potrzeby — jest to zazwyczaj wymagane przy przejściu między głównymi wersjami jądra w Debianie/Ubuntu.

P: Jak zapobiec automatycznej aktualizacji określonej wersji jądra?

O: W Debianie/Ubuntu użyj sudo apt-mark hold linux-image-<version>. W RHEL/CentOS dodaj exclude=kernel-<version> do /etc/dnf/dnf.conf lub użyj dnf versionlock add kernel-<version> po zainstalowaniu pakietu python3-dnf-plugin-versionlock. W Arch dodaj pakiet do IgnorePkg w /etc/pacman.conf.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij