Boot je cesta od stisku tlačítka po přihlašovací obrazovku — řetěz kroků, kde každý předá štafetu tomu dalšímu: firmware najde disk, bootloader vybere jádro, jádro rozjede hardware, initramfs najde a připojí tvůj kořenový oddíl a nakonec systemd nastartuje služby. Když počítač „nenaběhne", neselhal magicky celý — praskl jeden konkrétní článek toho řetězu. A přesně proto se vyplatí ho znát: pak neřešíš paniku, ale hledáš, který krok spadl a proč.
Pár pojmů na úvod
- Firmware = program zadrátovaný v základní desce, který se spustí jako úplně první (dnes UEFI, dřív BIOS). Jeho úkol: rozběhnout hardware a najít, odkud bootovat.
- UEFI vs BIOS = dvě generace firmwaru. UEFI je novější, rozumí souborovému systému a spouští soubory z tzv. ESP. BIOS je starý, čte jen prvních 512 bajtů disku (MBR).
- ESP (EFI System Partition) = malý FAT oddíl (obvykle
/boot/efi), kde leží bootloadery jako soubory.efi. UEFI si odsud vybere, co spustit. - Bootloader = program (typicky GRUB), který nabídne menu, vybere jádro a předá mu řízení.
- Kernel (jádro) = to samotné srdce z minulé kapitoly. Při bootu se načte do paměti a převezme hardware.
- initramfs = dočasný mini-systém v RAM. Existuje jen na pár vteřin, aby jádro dokázalo najít a připojit skutečný kořenový oddíl (odemknout LUKS, načíst ovladač disku).
- systemd = první „normální" program, který jádro spustí (dostane PID 1). Odsud se rozjede všechno ostatní — služby, síť, přihlašovací obrazovka.
- target = cíl, do kterého systemd míří (
graphical.targets grafikou,multi-user.targetbez ní).
Firmware — kdo drží štafetu jako první
Zmáčkneš tlačítko a procesor neví vůbec nic o „Linuxu". Spustí jediné, co má natvrdo: firmware na základní desce.
- UEFI (dnešní standard) — umí číst souborový systém. Podívá se na ESP (malý FAT oddíl,
obvykle připojený jako
/boot/efi), tam najde bootloadery jako obyčejné soubory.efia podle svého pořadí (efibootmgr) jeden spustí. Sem patří i Secure Boot — kontrola, že spouštěný kód je podepsaný důvěryhodným klíčem. - BIOS (starší) — souborovým systémům nerozumí. Přečte úplně prvních 512 bajtů disku (MBR), kde je kousek bootloaderu, a předá mu řízení. Postupně mizí, ale na starším železe na něj narazíš.
💡 Rozdíl si zapamatuj takhle: UEFI hledá soubor, BIOS hledá bajty na začátku disku. Proto se u UEFI dá mít víc systémů vedle sebe elegantně (každý svůj
.efi), zatímco u BIOSu se peraly o jeden malý MBR.
Firmware je taky místo, kde volíš pořadí bootování (disk, USB, síť) a kde se dá zapnout heslo,
Secure Boot nebo tamper detection. Do UEFI/BIOSu se dostaneš klávesou při startu (často F1, F2,
Del nebo Esc — liší se výrobcem).
GRUB — bootloader, který vybírá jádro
Firmware spustil GRUB (GRand Unified Bootloader). To je ta obrazovka s nabídkou, kterou po zapnutí na chvíli vidíš (nebo probliknutí, když je timeout krátký).
Co GRUB umí a proč je důležitý:
- Nabídne menu — víc jader (aktuální + starší jako záloha), případně jiné OS (dual-boot).
- Vybere jádro a k němu odpovídající initramfs.
- Předá jádru parametry (tzv. kernel cmdline) — třeba
ro root=UUID=... rhgb quiet. Tohle je klíčová schopnost: dočasnou úpravou parametru se dá systém nabootovat jinak (do záchranného režimu, bez grafiky, s víc logy).
Kde GRUB bydlí:
# hlavní nastavení uživatele (odkud se generuje zbytek)
/etc/default/grub
# vygenerovaný konfig, který GRUB opravdu čte (needituj ho ručně) — cesta i příkaz se liší podle rodiny distra:
/boot/grub2/grub.cfg # rodina RHEL/Fedora
/boot/grub/grub.cfg # Debian/Ubuntu
# po změně /etc/default/grub konfig přegeneruj:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # rodina RHEL/Fedora
sudo update-grub # Debian/Ubuntu (totéž jinak zabalené)
🚩 Nikdy needituj vygenerovaný
grub.cfgručně — příště hogrub2-mkconfigpřepíše a tvoje změny zmizí. Trvalé věci patří do/etc/default/grub, jednorázové se dělají přímo v GRUB menu (viz níže).
Kernel + initramfs — rozjezd hardwaru a hledání kořenu
GRUB načte do paměti dvě věci: jádro a initramfs. Tady začíná ta zajímavá past: jádro sice
umí spravovat hardware, ale kde je vlastně kořenový oddíl (/)? Může být na NVMe disku, přes
RAID, na LVM, zašifrovaný LUKSem… a ovladač pro tohle všechno je uložený zrovna na tom disku, který
teprve chce připojit. Klasické „vejce a slepice".
Řešení je initramfs (initial RAM filesystem) — malý dočasný systém, který GRUB nahraje do RAM hotový. Obsahuje jen to nejnutnější:
- ovladače disku (NVMe, SATA, RAID…), aby jádro disk vůbec vidělo,
- nástroje na odemčení LUKS (zeptá se tě na šifrovací heslo),
- nástroje na sestavení LVM / RAID,
- pak najde skutečný kořenový oddíl, připojí ho a předá mu řízení.
Jakmile je pravý / připojený, initramfs splnil úkol a mizí. Od téhle chvíle běží systém z disku.
# initramfs pro aktuální jádro se dá přegenerovat (rodina RHEL/Fedora: dracut; Debian/Ubuntu: update-initramfs -u)
sudo dracut --force
# pro konkrétní jádro
sudo dracut --force /boot/initramfs-$(uname -r).img $(uname -r)
💡 Proč tě to má zajímat? Když v initramfs chybí ovladač tvého disku (nebo modul pro LUKS), jádro naběhne, ale kořenový oddíl nenajde — a boot se zasekne. Většina „počítač nenaběhl po updatu" záhad bydlí přesně tady.
systemd (PID 1) — převezme řízení a rozjede služby
Kořenový oddíl je připojený, initramfs odešel. Jádro teď spustí první uživatelský proces — a ten dostane PID 1. Na dnešních distrech je to systemd. Je to rodič všech ostatních procesů: kdyby spadl, spadne systém.
Co systemd udělá:
- Podívá se, jaký je výchozí cíl (
default.target) — obvykle:graphical.target— plná grafika s přihlašovacím manažerem,multi-user.target— jen textová konzole (typické pro servery),
- ten cíl závisí na dalších (síť, logování, disky z
/etc/fstab…), a systemd je paralelně nastartuje ve správném pořadí (podle závislostí, ne jen odshora dolů).
# jaký target naběhne po startu
systemctl get-default
# přepnout výchozí target (např. server bez grafiky)
sudo systemctl set-default multi-user.target
Když je hotovo, spustí se přihlašovací manažer (u KDE třeba SDDM) nebo — bez grafiky — holá
textová konzole (login:). Tady řetěz končí: vidíš přihlašovací obrazovku.
Celá boot sekvence odshora dolů
Každá šipka je předání štafety. Když boot spadne, spadl mezi dvěma konkrétními kroky — a znát ten řetěz znamená vědět, kde hledat.
Praktické — jak do boot procesu zasáhnout
Tohle jsou dovednosti, které tě jednou zachrání, až systém nenaběhne, jak má.
Vstup do GRUB menu. Když je menu skryté nebo probliká, drž při startu Shift (na BIOS/starším
GRUBu) nebo tiskni Esc (na UEFI). Objeví se seznam jader.
Dočasná úprava parametrů jádra. V GRUB menu najeď na položku a zmáčkni e (edit). Dostaneš se
do řádku začínajícího linux ... — to je cmdline předávaný jádru. Na jeho konec přidáš parametr
a spustíš přes Ctrl+X (nebo F10). Změna platí jen pro tento boot, nic se neuloží.
Užitečné parametry na dopsání:
systemd.unit=rescue.target # záchranný (single-user) režim — minimum služeb, jeden uživatel
systemd.unit=emergency.target # ještě míň — jen holý shell, / připojený read-only
3 # klasické "runlevel 3" = multi-user.target (bez grafiky)
single # jednouživatelský režim
init=/bin/bash # úplně obejít systemd (krajní záchrana)
nomodeset # vypnout přepínání grafiky — když nenaběhne obrazovka
Výběr staršího jádra. Distra po updatu nechávají pár předchozích jader. Když nové jádro nefunguje (třeba mu chybí ovladač), v GRUB menu vyber v podnabídce „Advanced options" starší jádro — pravděpodobně nabootuje. Pak máš čas problém v klidu vyřešit z běžícího systému.
Jak dlouho boot trval. Když systém běží, změříš boot takhle:
# celkový čas + rozpad na firmware / loader / kernel / userspace
systemd-analyze
# které služby braly nejvíc času (seřazené sestupně)
systemd-analyze blame
# kritická cesta — co na co čekalo (proč to trvalo)
systemd-analyze critical-chain
💡
systemd-analyze blameje první věc, po které sáhni, když „boot trvá věčnost". Ukáže ti, jestli žere čas síť, čekání na disk, nebo nějaká pomalá služba — a co má smysl řešit.
Failure modes — kde to nejčastěji praskne
- Rozbitý GRUB po instalaci druhého OS. Nainstaluješ Windows/jiné distro vedle a ono přepíše
bootloader — počítač najednou naběhne rovnou do toho druhého systému (nebo do prázdné
grub>výzvy). Řeší se přegenerováním GRUBu z live/instalačního USB (grub2-mkconfig, případněgrub2-install) nebo v UEFI přehozením pořadí přesefibootmgr. - Špatný
/etc/fstab→ boot uvázne (emergency mode). Napíšeš do fstab chybný řádek (překlep v UUID, disk, který už neexistuje) — systemd na něj při bootu čeká, nedočká se a shodí tě do emergency shellu. Řeší se přímo tam: přihlásíš se rootem, opravíš/etc/fstab(chybný řádek zakomentuj#) a rebootuješ. Nouzově se dá disk odchytit přidánímsystemd.unit=emergency.targetv GRUBu. - Chybějící ovladač disku v initramfs. Jádro naběhne, ale kořenový oddíl nenajde (typicky po
neúplném
dracutnebo výměně hardwaru) — boot se zasekne s „cannot find root device". Řeší se nabootováním staršího jádra z GRUBu (to má initramfs v pořádku) a přegenerováním:sudo dracut --force. - Plný
/boot./bootbývá malý oddíl. Po pár updatech jader se zaplní, nový initramfs se nevejde, a příští boot může selhat nebo se update rozbije v půlce. Řeší se úklidem starých jader balíčkovačem (většina distribucí drží posledních pár jader; přebytek smažeš přes svůjdnf/apt). - Špatný parametr jádra. Přidáš do
/etc/default/grubchybný cmdline a systém přestane bootovat (černá obrazovka, panika). Řeší se v GRUB menu klávesoue— chybný parametr pro tento boot smažeš, nabootuješ, a pak opravíš/etc/default/grubnatrvalo.
🚩 Společný vzorec: skoro každý boot problém má záchranný vstup — buď GRUB menu (parametry, starší jádro), nebo emergency/rescue shell. Panika a přeinstalace je skoro vždy zbytečná; systém ti dává nástroj, jak se dovnitř dostat a opravit to cíleně.
🛠️ Cvičení
- Změř svůj boot. Zjisti, jak dlouho trval poslední start a která služba brala nejvíc času.
(Nápověda:
systemd-analyze,systemd-analyze blame.) Který krok — firmware, loader, kernel, userspace — u tebe žere nejvíc? - Najdi svůj výchozí target. Zjisti, jestli tvůj systém startuje do grafiky, nebo do textové
konzole, a jak by ses přepnul na to druhé. (Nápověda:
systemctl get-default.) - Rozeber GRUB cmdline. Najdi, s jakými parametry se spustilo tvoje běžící jádro, a zkus u dvou
z nich odhadnout, co dělají. (Nápověda: obsah
/proc/cmdline.) - Naplánuj si záchranu (bez rizika). Popiš krok za krokem, co uděláš, když se ti systém po updatu jádra zasekne na „cannot find root device". Kam sáhneš první? (Nápověda: GRUB → Advanced options.)
- Kde bydlí konfig. Najdi soubor, který se edituje pro trvalou změnu GRUBu, a soubor, který GRUB opravdu čte. Proč se ten druhý needituje ručně?
Náčrt řešení — rozbal, až si cvičení zkusíš sám
- Měření bootu —
systemd-analyzevypíše celkový čas rozpadlý nafirmware,loader,kernelauserspace;systemd-analyze blameseřadí služby podle času sestupně. Nejpomalejší bývá čekání na síť nebo pomalá služba v userspace. Pozor:blameukazuje jen dobu jednotlivých služeb, ne závislosti — pro „proč to čekalo" použijsystemd-analyze critical-chain. - Výchozí target —
systemctl get-defaultvrátígraphical.target(startuje do grafiky) nebomulti-user.target(textová konzole). Přepnešsudo systemctl set-default multi-user.target(a zpětgraphical.target). Pozor:multi-userje typický pro servery — šetří paměť a plochu útoku tím, že nespouští grafiku. - GRUB cmdline — běžící parametry vidíš v
cat /proc/cmdline. Typicky tam buderoot=UUID=...(kde je kořenový oddíl),ro(připojit read-only na start),rhgb quiet(skrytý grafický boot bez logů). Pozor: tenhle řádek jádru předal GRUB — trvale se mění v/etc/default/grub, jednorázově klávesouev menu. - Záchrana po updatu jádra — v GRUB menu jdi do Advanced options a vyber předchozí jádro
(to má funkční initramfs) → systém nabootuje → z běžícího systému přegeneruj initramfs
sudo dracut --force(a ověř, že disk/LUKS moduly tam jsou). Pozor: nové jádro nemaž, dokud nemáš opravené — starší jádro je tvoje záchranná síť. - Konfig GRUBu — edituje se
/etc/default/grub(a soubory v/etc/grub.d/); GRUB reálně čte vygenerovaný/boot/grub2/grub.cfg(u UEFI/boot/efi/EFI/fedora/grub.cfg). Po změně se generujesudo grub2-mkconfig -o .... Pozor:grub.cfgneedituj ručně — příštígrub2-mkconfig(třeba automaticky po updatu jádra) ho přepíše a tvoje změny zmizí.
🧠 Otázky & odpovědi
Co se stane od stisku tlačítka po přihlašovací obrazovku
Řetěz předávek. Firmware (UEFI/BIOS) rozjede hardware a najde bootovatelné zařízení. Spustí
bootloader GRUB, který nabídne menu, vybere jádro a předá mu parametry. Jádro se načte do
paměti a s pomocí initramfs (dočasný systém v RAM) najde a připojí skutečný kořenový oddíl —
včetně odemčení LUKS a načtení ovladače disku. Pak se spustí systemd (PID 1), nastartuje
default.target a služby, a nakonec naskočí přihlašovací manažer nebo textová konzole. Každý krok
předává řízení tomu dalšímu.
K čemu je initramfs a proč nejde bootovat bez něj
initramfs řeší problém vejce a slepice: jádro chce připojit kořenový oddíl, ale ovladač pro ten disk
(nebo modul na odemčení LUKS, sestavení LVM/RAID) leží zrovna na tom disku, který ještě nevidí.
initramfs je proto malý dočasný systém, který GRUB nahraje do RAM hotový — obsahuje jen ovladače
disku a nástroje, aby jádro skutečný kořen našlo, odemklo a připojilo. Jakmile je pravý /
připojený, initramfs splnil úkol a mizí. Bez něj by jádro na moderním železe (NVMe, LUKS, LVM)
kořenový oddíl nenašlo a boot by se zasekl.
Jaký je rozdíl mezi UEFI a BIOS
Jsou to dvě generace firmwaru — programu, který se po zapnutí spustí jako úplně první. BIOS je
starý: souborovým systémům nerozumí, přečte jen prvních 512 bajtů disku (MBR) a tam najde kousek
bootloaderu. UEFI je novější: rozumí souborovému systému, takže si na malém FAT oddílu (ESP,
obvykle /boot/efi) najde bootloadery jako obyčejné soubory .efi a jeden podle pořadí spustí.
UEFI navíc přináší Secure Boot (kontrola podpisu) a elegantnější soužití víc systémů vedle sebe.
Zkratka: UEFI hledá soubor, BIOS hledá bajty na začátku disku.
Systém se po startu zasekl v emergency módu, co s tím
Emergency mód nejčastěji znamená chybu v /etc/fstab — systemd čeká na disk, který podle fstab má
existovat (překlep v UUID, odpojený disk), nedočká se a shodí tě do záchranného shellu. Přihlas se
rootem, otevři /etc/fstab, chybný řádek oprav nebo dočasně zakomentuj (#) a rebootuj. Když se do
systému nedostaneš vůbec, přidej v GRUBu (klávesa e) parametr systemd.unit=emergency.target, aby
tě systém pustil k holému shellu. Princip: skoro každý boot problém má záchranný vstup — panika
a přeinstalace jsou zbytečné.
Jak nabootuju starší jádro a proč by mi to pomohlo
V GRUB menu jdi do podnabídky Advanced options a vyber některé z předchozích jader — distra jich
pár po updatu nechávají právě pro tenhle případ. Pomůže to, když nové jádro nefunguje: typicky mu
chybí ovladač disku v initramfs (boot se zasekne na „cannot find root device") nebo dělá problém
s grafikou. Starší jádro má funkční initramfs, takže nabootuje — a ty máš z běžícího systému čas
problém vyřešit v klidu (např. přegenerovat initramfs přes sudo dracut --force). Nové jádro nemaž,
dokud není opravené — je to tvoje záchranná síť.
