Start Linuxu
Start Linuxu je v informatice vícefázový proces, který je prováděn během bootování nainstalovaného Linuxu. V mnoha ohledech se tento proces neliší od bootování BSD a jiných unixových systémů, ze kterých je odvozen. Fáze startu Linuxu zahrnují inicializaci firmwaru, spuštění zavaděče (boot loader), načtení a spuštění jádra Linuxu, a spuštění různých spouštěcích skriptů a démonů. Jednotlivé fáze se mnou v různých distribucích Linux lišit, například zavaděčem může být GRUB, LILO, SYSLINUX nebo Loadlin; systém může být dále spuštěn pomocí tradičních skriptů a nástroje init nebo pomocí modernějšího systemd, případně Upstart.
Přehled
Průběh jednotlivých fází spouštěcího procesu Linuxu závisí na architektuře (počítačové platformě) daného počítače. Počítače IBM PC kompatibilní jsou jednou z architektur, které se pro Linux běžně používají. Velikou roli zde hraje BIOS, který nemusí mít přesnou analogii v jiných systémech. V následujícím příkladu, který popisuje spouštěcí proces Linuxu na architektuře IBM PC kompatibilní se předpokládá, že:
- BIOS po nastartování nejprve určí, které periferie jsou k PC připojené. Poté, co je získán seznam hardware (enumerace), zjistí BIOS zda jsou komponenty nutné pro boot aktivní a pokud ano, načte a spustí zaváděcí kód z nastaveného bootovacího zařízení. Nejdůležitější je test operační paměti, grafické karty a procesoru. Pokud se v počítači nachází alespoň tento hardware (a je v pořádku), je počítač funkční a teoreticky je připraven k použití.
- Zavaděč (boot loader) ve většině případů uživateli nabídne menu s možnými variantami bootování. Toto menu má i svojí výchozí možnost. Pokud uživatel nevybere žádnou z dostupných možností, automaticky se po nějaké době vybere právě možnost výchozí. Jakmile je výběr učiněn, zavaděč načte jádro do paměti, předá mu potřebné parametry a poté veškerou kontrolu.
- Jádro dekomprimuje samo sebe, nastaví systémové funkce, dále nastaví nezbytný hardware a stránkování paměti, a zavolá funkci
start_kernel()
, která provede většinu systémového nastavení (přerušení, zbylá nastavení paměti, inicializaci komponent a ovladačů, atd.). Start_kernel se pustí samostatně, dále je spuštěn idle_task, scheduler (plánovač) a proces init, který běží v uživatelském prostoru. - Init se skládá buď ze skriptů, které jsou spouštěny shellem (sysv, bsd, runit), nebo z konfiguračních souborů, které jsou spouštěny pomocí binárních komponent (systemd, upstart). Init má specifické úrovně (sysv, bsd) nebo cíle (systemd), ty se skládají ze specifických služeb (démonů). Tyto úrovně či cíle poskytují struktury a různé neprovozní služby operačního systému a tvoří uživatelské prostředí. Typické prostředí serveru spustí webový server, databázové služby a vytváří síť.
- Typické desktopové prostředí začíná démonem (daemon), který se nazývá display manager. Ten spustí grafické prostředí, které se skládá z grafického serveru, který poskytuje základní základní grafický balík (stack), a z přihlašovacího managera, který nabízí možnost zadat přihlašovací údaje a vybrat si relaci. Poté, co uživatel zadá správné přihlašovací údaje, spustí tzv. session manager danou relaci. Relace je sada programů, jako jsou prvky uživatelského rozhraní (panely, applety, atd.), které společně mohou vytvořit kompletní desktopové prostředí.
Při vypnutí je volán init aby kontrolovaným způsobem zavřel všechny funkce uživatelského prostoru. Init se poté ukončí a jádro provede vlastní vypnutí.
Spuštění zavaděče (anglicky Boot loader phase)
Průběh fáze spuštění zavaděče (anglicky Boot loader) závisí na architektuře počítače. Protože u předchozích fází není důležitý druh operačního systému, bootovací proces v BIOSu je u architektur x86 a x86-64 považován za spuštěný, jakmile je Master Boot Record (MBR) kód spuštěn v reálném režimu a u prvního stupně zavaděče bylo dokončeno nahrávání. V UEFI (Unified Extensible Firmware Interface) systémech může být přenos dat, například linuxového jádra (anglicky Linux kernel), uskutečněn přímo, tudíž zavaděče není potřeba. Níže je uvedeno několik obecně rozšířených zavaděčů:
- LILO není schopen porozumět systému umístění souborů, ani ho žádným způsobem neanalyzuje. Místo toho je v živém systému vytvořen konfigurační soubor (
/etc/lilo/.conf
), který mapuje prvotní informace o umístěních jádra a RAM disků (initrd nebo initramfs). Tento soubor, jenž obsahuje data jako cesty diskových oddílů anglicky Boot partition a jádra či další jiné případně užitečné informace pro uživatele, je poté zapsán společně s kódem bootloaderu do MBR (Master Boot Record) sektoru. Když je tento bootovací sektor přečten a byla mu předána kontrola od BIOSu, LILO nahraje kód menu a zapíše ho. Poté využívá uchovávaných hodnot společně se vstupními daty uživatele k výpočtům a nahraje linuxové jádro či využije tzv. chain loadingu. - GRUB 1 využívá metody čtení souborových systémů za jejich běhu za účelem získání přístupu k jejich konfiguračním souborům. To, že čte příslušný konfigurační soubor přímo v souborovém systému bez nutnosti ukládání souboru do MBR, mu umožňuje za běhu provádět konfigurační změny a zobrazit disky a diskové oddíly ve formátu, který je pro uživatele srozumitelnější než v případě, kdy je odkázán na offsety (Offset (Computer science). GRUB 1 rovněž obsahuje rozhraní příkazového řádku, což usnadňuje jeho změny a opravy v případě špatné konfigurace či jeho poškození.
- GRUB 2 se od GRUB 1 liší tím, že má dvě (případně tři) fáze a je schopný automatické detekce řady provozních problémů a automatické konfigurace. Zavaděč prvního stupně anglicky stage1 je spuštěn BIOSem z MBR nebo jiným zavaděčem z bootovacího sektoru. Jeho práce je vyhledat a dostat se k různým souborovým systémům, z nichž může později přečíst konfiguraci. Je zde také jakýsi mezistupeň anglicky stage1.5, který však není nezbytný. Je spouštěn prvním stupněm v tom případě, kdy zavaděč druhého stupně nepracuje souvisle nebo když souborové systémy či hardware vyžadují specifické ovládání pro přístup k druhému stupni. Zavaděč druhého stupně anglicky stage2 je nahrán jako poslední a zobrazuje výchozí menu GRUBu, které umožňuje uživateli zvolit si operační systém či prozkoumat a upravit výchozí parametry. Po vstupu do menu a výběru parametru nahraje GRUB do paměti jádro a předá mu kontrolu. GRUB 2 je také schopen provést chain loading jiného zavaděče.
- SYSLINUX/ISOLINUX je zavaděč, který se soustředí na bootování úplných instalací z FAT File Allocation Table souborových systémů. Často je používán pro zavedení či záchranu pružných disků (disket), live USB a dalších bootovacích datových médií. ISOLINUX je obecně využíván linuxovými Live CD a bootovacími instalačními CD.
- Loadlin je zavaděč, který může nahradit bežící jádro DOSu či Windows 9x za jádro linuxové. To může být užitečné v případě hardwaru, který musí být spuštěn pomocí softwaru a jeho konfigurační programy jsou dostupné výhradně pro DOS. Tato zaváděcí metoda je v současnosti stále méně nutná, Linux již má v současnosti ovladače pro celou řadu zařízení, využití však má stále v oblasti například mobilních telefonů. Loadlin může být také využit v případě, kdy je Linux uložen na paměťovém zařízení, které není vhodné k bootování za pomoci BIOSu: DOS nebo Windows může nahrát vhodné ovladače pro doplnění mezer BIOSu a zavést Linux z tohoto zařízení.
Reference
V tomto článku byl použit překlad textu z článku Linux startup process na anglické Wikipedii.