Linux documentation Project (CS) / Průvodce správce operačního systému Linux
Previous Content Next Up

 

6. Zavádění systému a ukončení jeho běhu

Spusť mě

Ó... nesmíš... nesmíš

Nikdy, nikdy, nikdy nesmíš zastavit

Rozjeď to

Ó... rozjeď to, nikdy, nikdy, nikdy

Nezklameš, nezklameš

(Rolling Stones)

    Tato kapitola popisuje, co se děje po tom, co je systém Linux spuštěn, a poté, co je zastaven. Dále uvádí správný postup procedur zavedení a zastavení systému. Když se tyto postupy nedodrží, mohou se některé soubory poškodit anebo ztratit.

6.1 Zavádění a ukončení práce systému - přehled

Zapnutí počítače, po němž se zavede operační systém, se říká zavedení systému (angl. booting).

    Tento původní termín vznikl z anglické fráze "pull yourself UP by your own bootstraps", tedy vytáhnout sebe sama za jazyk vlastních bot, což obrazně vystihuje proces, který probíhá při zapnutí počítače.

    V průběhu zaváděcích sekvencí počítač nejdříve zavede krátký kód, kterému se říká zavaděč (angl. bootstrap loader), jenž pak zavede a spustí samotný operační systém. Zavaděč je obvykle uložen na předem určeném místě pevného disku nebo diskety. Důvodem pro rozdělení procedury zavádění systému do dvou kroků je to, že samotný operační systém je velký a složitý, kdežto část kódu, kterou počítač zavádí jako první, je velmi krátká (má několik stovek bajtů). Tím se zamezí nežádoucímu komplikování firmwaru.

    Různé typy počítačů provádí úvodní sekvence zavádění systému různě. Pokud jde o počítače třídy PC, ty (přesněji jejich systém BIOS) načítají první sektor pevného disku nebo diskety, kterému se říká zaváděcí sektor (angl. boot sector). Zavaděč je uložen v tomto prvním - zaváděcím sektoru. Zavaděč pak načítá operační systém z jiného místa na disku, případně i z nějakého jiného média.

    Poté, co se operační systém Linux zavede, inicializují se technické prostředky výpočetního systému a ovladače jednotlivých zařízení. Pak se spustí proces init, který spouští další procesy, umožňující uživatelům přihlásit se do systému a pracovat v něm. O podrobnostech této části zaváděcího procesu se pojednává níže.

    Aby bylo možné systém Linux zastavit, je nejdříve nutné požádat všechny procesy, aby ukončily činnost (zavřely všechny otevřené soubory, popřípadě zařídily další důležité věci - obrazně řečeno "uklidily" po sobě). Potom se odpojí souborové systémy, odkládací prostory a nakonec se na konzole objeví zpráva, že lze počítač vypnout. Jestli se nedodrží správný postup, mohou se stát (a obvykle se stanou) dost nepříjemné věci. Nejzávažnějším problémem je v tomto případě nevyprázdněná vyrovnávací disková paměť souborového systému. Všechna data ve vyrovnávací paměti se totiž ztratí, takže Souborový systém na disku bude nekonzistentní a pravděpodobně nepoužitelný.

6.2 Proces zavádění systému při pohledu z blízka

    Systém Linux lze zavést buď z diskety, z pevného disku nebo i z CD. Příslušná kapitola příručky "Průvodce instalací a začátky" ([Wel]), jež podrobně pojednává o instalaci operačního systému Linux, uvádí návod jak systém instalovat oběma z výše uvedených způsobů.

    Když počítač PC startuje, systém BIOS provádí různé testy a kontroluje, zda je vše v pořádku. Až pak zahájí skutečné zavádění operačního systému. Vybere zaváděcí diskovou jednotku. Typicky první disketovou mechaniku - je-li v mechanice zasunutá disketa, jinak první pevný disk - nejde-li o bezdiskový počítač. Pořadí prohledávání lze konfigurovat. Poté se čte první sektor tohoto disku, kterému se říká zaváděcí sektor (angl. boot sector). U pevných disků se označuje jako zaváděcí sektor disku (angl. master boot record), protože na pevném disku může být několik diskových oblastí, každá se svým vlastním zaváděcím sektorem.

    Zaváděcí sektor obsahuje krátký program (dostatečně krátký na to, aby se vešel do jednoho bloku), úkolem kterého je načíst z disku operační systém a spustit jej. Pokud jde o zavádění systému z diskety O zaváděcí sektor pružného disku obsahuje kód, který načte jenom prvních několik stovek bloků (v závislosti na aktuální velikosti jádra) do předem určeného místa v paměti. Na linuxové zaváděcí disketě totiž obvykle nebývá vytvořen souborový systém, je na ní uloženo jenom jádro systému v několika po sobě jdoucích sektorech, což proces zavádění systému značně zjednodušuje. Systém lze zavést rovněž z diskety se souborovým systémem, a to pomocí zavaděče systému Linux (angl. LInux LOader, zkráceně LILO).

    Když se systém zavádí z pevného disku, kód obsažený v zaváděcím sektoru disku si prohlédne tabulku rozdělení disku, která je v tomto sektoru také uložená. Pak zaváděcí kód identifikuje aktivní diskovou oblast (oblast, která je označená jako zaváděcí), načte zaváděcí sektor aktivní oblasti a spustí kód uložený v tomto zaváděcím sektoru. Kód v zaváděcím sektoru diskové oblasti dělá v podstatě to samé, co kód obsažený v zaváděcím sektoru diskety. Načte jádro systému z aktivní diskové oblasti a spustí jej. Avšak v detailech se tyto procedury poněkud liší, protože obecně není výhodné mít zvláštní diskovou oblast čistě pro obraz jádra systému, proto kód v zaváděcím sektoru diskové oblasti nemůže jednoduše sekvenčně číst data z disku, jako při zavádění systému z diskety. Musí hledat příslušné sektory všude, kam je souborový systém uložil. Existuje několik způsobů řešení tohoto problému.

    Nejběžnější možností je použít zavaděč operačního systému Linux LILO. (Další detaily tohoto postupu nejsou v této chvíli podstatné. Více informací najdete v dokumentaci zavaděče LILO, která je v tomto směru dokonalejší.)

    Když se zavádí operační systém pomocí zavaděče LILO, pokračuje se dál v zaváděcí sekvenci, takže zavaděč LILO načte a zavede implicitně vybrané jádro Linuxu. Je ale možné nakonfigurovat jej tak, aby zavedl některý z více obrazů jádra systému, nebo i jiný operační systém, než Linux. Uživatel systému si tak při zavádění může vybrat, které jádro, případně operační systém, se implicitně zavede při spuštění počítače. Zavaděč LILO lze nakonfigurovat i tak, že při zmáčknutí kláves a, s, nebo v okamžiku zavádění systému (tj. při spouštění LILO) se nebude zavádět systém ihned. Místo toho se zavaděč zeptá, který operační systém se bude zavádět. LILO lze nastavit i tak, že se bude při zavádění systému ptát na požadovaný systém, ale s volitelným časovým prodlením, po kterém se zavede implicitně určené jádro.

Zavaděč LILO rovněž umožouje předat jádru systému argumenty příkazové řádky, které se zadávají za jménem jádra nebo operačního systému, který se zavádí.

Existují i jiné zavaděče, než LILO. Informace o nich budou přidány v některé z dalších verzí manuálu - loadlin.

    Zavádění systému z diskety i z pevného disku má své výhody. Obecně je zavádění z disku příjemnější, uživatel je ušetřen zbytečných nepříjemností v případě, že v disketách "zcela náhodou" zavládne nepořádek. Kromě toho je zavádění z disku rychlejší. Naopak je výrazně pracnější konfigurovat operační systém tak, aby se zaváděl z disku. Proto mnoho uživatelů dává v první fázi přednost zavádění systému z diskety a až pak, když bude nainstalovaný systém fungovat, doinstalují zavaděč LILO a budou Linux zavádět z pevného disku.

Až poté, co se jádro Linuxu některým z výše uvedených způsobů načte do paměti, je skutečně spuštěno. Probíhají zhruba tyto věci:

Jádro Linuxu se instaluje v komprimovaném tvaru, takže se před samotným zavedením samo dekomprimuje. Stará se o to krátký program, jenž je obsažen v začátku obrazu jádra.

    Rozezná-li systém kartu Super VGA, která má nějaké zvláštní textové režimy (jako například 100 sloupců na 40 řádků), zeptá se vás, který z režimů budete používat. V průběhu kompilace jádra systému lze video-mód implicitně nastavit - pak se systém při startu na video-režim nedotazuje. Stejného efektu lze dosáhnout konfigurací zavaděče systému LILO, nebo příkazem rdev.

    V dalším kroku jádro zkontroluje, jaké další hardwarové komponenty jsou k dispozici (pevné disky, diskety, síťové adaptéry atd.) a odpovídajícím způsobem nastaví některé ze svých ovladačů zařízení. V průběhu této "inventury" vypisuje jádro zprávy o tom, která zařízení byla nalezena. Například při zavádění systému, jenž používá autor, se vypisují tyto hlášky:

LILO boot:

Loading linux.

Console: colour EGA+ 80x25, 8 virtual consoles

Serial driver version 3.94 with no serial options enabled

tty00 at 0x03f8 (irq = 4) is a 16450

tty01 at 0x02f8 (irq = 3) is a 16450

lp_init: lp1 exists (0), using polling driver

Memory: 7332k/8192k available (300k kernel code, 384k reserved,

176k data)

Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M

Loopback device init

Warning WD8013 board not found at i/o = 280.

Math coprocessor using irq13 error reporting.

Partition check:

hda: hda1 hda2 hda3

VFS: Mounted root (ext filesystem).

Linux version 0.99.pl9.1 (root@haven) 05/01/93 14:12:20

    Přesný formát výstupů se na různých systémech liší, a to v závislosti na hardwarové konfiguraci výpočetního systému, verzi operačního systému a jeho konkrétním nastavení.

    Potom se jádro Linuxu pokusí připojit kořenový svazek. Přípojné místo lze nastavit při kompilaci jádra, později pak příkazem rdev, případně zavaděčem LILO. Typ souborového systému je detekován automaticky. Jestli připojení souborového systému selže (například proto, že jste při kompilaci jádra systému zapomněli uvést odpovídající ovladač souborového systému), jádro zpanikaří a systém se v tomto kroku zastaví (beztak mu nic jiného ani nezbývá). Kořenový svazek se obvykle připojuje pouze pro čtení (to lze nastavit stejným způsobem, jako místo připojení). Díky tomu se může provést kontrola souborového systému při jeho připojování. Není vhodné prověřovat systém souborů, jenž je připojen pro čtení i zápis.

    Poté spustí jádro systému na pozadí program init, jenž se nachází v adresáři /sbin. Program init bude vždy procesem číslo 1 a jeho úkolem jsou různé "úklidové práce" spojené se startem systému. Přesný postup toho, co jádro systému v tomto kroku dělá, závisí na tom, jak je konfigurováno. Více informací uvádí kapitola 7. Jádro systému v této fázi přinejmenším spustí na pozadí některé nezbytné démony.

    Proces init pak přejde do víceuživatelského režimu, spustí procesy getty pro virtuální konzolu a sériové linky. Proces getty je program, který umožňuje uživatelům přihlásit se prostřednictvím virtuální konzoly a sériových terminálů do systému. Proces init může rovněž spouštět některé další programy, a to podle toho, jak je konfigurován.

Poté je zavádění systémů ukončeno a systém normálně běží.

6.3 Podrobněji o zastavení systému

    I při zastavování operačního systému Linux je důležité dodržovat správný postup. Jestli se správná procedura zastavení systému nedodrží, budou souborové systémy pravděpodobně "na vyhození". Obsah jednotlivých souborů se totiž může náhodně promíchat. To proto, že operační systém využívá diskovou vyrovnávací paměť, jež nezapisuje některé změny na disk ihned, ale v určitých časových intervalech. To sice významně zvyšuje výkon systému, ale následkem toho, že se z ničeho nic vypne napájení ve chvíli, kdy paměť "cache" obsahuje množství nezapsaných změn, mohou být data na disku nekonzistentní a Souborový systém zcela nefunkční, protože se na disk zapsala jenom některá změněná data.

    Dalším z argumentů proti pouhému "cvrknutí" do síťového vypínače je to, že v systému se souběžným zpracováním úloh (multitaskingem) může běžet hodně programů na pozadí. Vypnutí ze sítě by pak mohlo mít katastrofální důsledky. Tím, že se při zastavení systému dodržuje korektní postup, se zajistí, že všechny procesy běžící na pozadí svá data včas uloží.

Běh systému Linux se správně ukončí příkazem shutdown. Zadává se obvykle jedním ze dvou způsobů.

    Když jste přihlášeni v systému jako jediný uživatel, je potřeba před zadáním příkazu shutdown ukončit všechny běžící programy, odhlásit se ze všech virtuálních konzolí a přihlásit se na poslední z nich jako superuživatel. Jestli jste přihlášeni jako uživatel root, je potřeba se vrátit do kořenového adresáře. Vyhnete se tak problémům při odpojení souborových systémů. Pak můžete zadat příkaz shutdown -h now. Mezi zadáním příkazu shutdown a zastavením systému bude určité časové prodlení, když nahradíte argument now znaménkem plus a počtem minut (přece jenom - běžně nejste jediným uživatelem systému).

    Druhou alternativou - je-li v systému přihlášeno více uživatelů - je použití příkazu shutdown -h +time message, kde time je čas v minutách zbývající do zastavení systému a message je stručné sdělení důvodu tohoto opatření.

# shutdown .h +10 'Bude instalován nový disk. Systém by měl být opět spuýtěn za tři hodiny.'

#

    Takto můžete každého uživatele varovat, že systém bude za deset minut zastaven a že bude lepší se odpojit, než ztratit neuložená data. Varování se zobrazí na každém terminálu, na kterém je někdo poihlášený, včetně všech terminálů xterm systému X Window:

Broadcast message from root (ttyp0) Wed Aug 2 01:03:25 1995...

Bude instalován nový disk. Systém by měl být opět spuýtěn za tři hodiny.

The system is going DOWN for system halt in 10 minutes !!

Varování se automaticky opakuje několik minut před zastavením systému v kratších a kratších intervalech, až stanovený čas vyprší.

    Když se pak po určeném časovém prodlení rozjede procedura skutečného zastavení systému, odpojí se nejdříve všechny souborové systémy (kromě systémového svazku), uživatelské procesy (je-li někdo stále přihlášen) se ukončí, běžící démoni se zastaví, všechny připojené svazky se odpojí, obrazně řečeno - všechno se utiší. Poté proces init vypíše zprávu, že lze počítač vypnout. Až pak a jenom pak lze šáhnout na síťový vypínač.

    V některých případech (zřídkakdy u správně nakonfigurovaného systému) není možné zastavit systém správně. Například když jádro systému zpanikaří, havaruje, hoří a vůbec jinak zlobí, může být zcela nemožné zadat jakýkoliv další příkaz. Pochopitelně, v takovéto situaci je i správné zastavení systému poněkud obtížné. Nezbývá než doufat, že se neuložené soubory až tak moc nepoškodí a vypnout napájení. Když nejsou potíže až tak vážné (řekněme, že někdo jenom sekerou rozsekl klávesnici vašeho terminálu) a jádro systému i program update stále normálně běží, je obvykle dobré pár minut počkat (dát tím programu update šanci vyprázdnit zásobník vyrovnávací paměti) a potom jednoduše vypnout proud.

    Někteří uživatelé rádi používají při zastavení systému příkaz sync zadaný třikrát po sobě, pak počkají, než se ukončí diskové vstupně-výstupní operace a vypnou napájení. Neběží-li žádné programy, je tento postup téměř ekvivalentní zadání příkazu shutdown s tím rozdílem, že se neodpojí žádný ze souborových systémů, což ale může způsobit problémy s nastavením příznaku "clean filesystem" u souborových systémů ext2fs. Proto se metoda trojího zadání příkazu sync nedoporučuje.

    (Možná vás nenapadá proč zrovna trojí zadání příkazu sync - v ranných dobách Unixu se všechny příkazy musely "našukat" zvlášť, takže bylo obvykle dost času na to, aby se ukončila většina diskových vstupně-výstupních operací.)

6.4 Znovuzavedení systému

    Pod znovuzavedením operačního systému (angl. rebooting) se rozumí jeho opakované zavedení, tj. jeho správné zastavení, vypnutí a opětovné zapnutí napájení počítače. Jednodušší cestou je žádost programu shutdown o znovuzavedení systému (místo jeho pouhého zastavení), a to použitím parametru -r, tedy například zadáním příkazu shutdown -r now.

    Většina systémů Linux vykonává příkaz shutdown -r now i v případě, že se na systémové klávesnici současně zmáčknou klávesy Ctrl+Alt+Del. Tato trojkombinace obvykle vyvolá znovuzavedení operačního systému. Ale to, co se stane po zmáčknutí kláves Ctrl+Alt+Del lze v systému Linux nastavit při jeho konfiguraci. Na víceuživatelském počítači by například bylo lepší před znovuzavedením systému povolit určité časové prodlení. Naopak systémy, které jsou fyzicky přístupné komukoliv, by bylo lepší nastavit tak, aby se při zmáčknutí kombinace kláves Ctrl+Alt+Del nedělo vůbec nic.

6.5 Jednouživatelský režim

    Příkaz shutdown lze použít i při přechodu systému do jednouživatelského režimu. V něm se do systému nemůže přihlásit nikdo jiný, než superuživatel, jenž může používat konzolu systému. Jednouživatelský mód lze s výhodou využít při plnění některých úkolů spojených se správou systému, které nelze dělat, systém běží v normálním (víceuživatelském) režimu.

6.6 Záchranné zaváděcí diskety

    Občas se stává, že není možné při zapnutí počítače zavést systém z pevného disku. Například tím, že uděláte chybu při nastavování parametrů zavaděče systému LILO, můžete zavinit, že systém Linux nebude možné zavést. v těchto situacích by přišel vhod nějaký jiný způsob zavedení systému, jenž by navíc fungovat vždy (když samozřejmě funguje hardware). Pro počítače PC je takovou alternativou zavádění systému z diskety.

    Většina distribucí operačního systému Linux umožňuje vytvořit tzv. záchrannou zaváděcí disketu již při instalaci systému. Doporučujeme to udělat. Avšak některé takovéto záchranné diskety obsahují pouze jádro systému. Předpokládá se, že při odstraňování vzniklých problémů budete používat programy uložené na instalačních médiích distribuce systému. Někdy ale tyto programy nestačí. Například v případě, že budete muset obnovit některé soubory ze záloh, jež jste dělali programem, který není na instalačních discích distribuce systému Linux.

Proto by si správce měl vytvořit vlastní zaváděcí diskety, přizpůsobené konkrétním potřebám.

    Pokyny jak na to jsou obsaženy v příručce "HOWTO - Bootdisk" od Grahama Chapmana ([Cha]). Musíte mít přirozeně neustále na paměti, abyste měli záchranné zaváděcí a "rootovské" diskety stále aktuální.

    Disketovou mechaniku, která se využívá pro připojení superuživatelské zaváděcí diskety, nebudete moci použít k čemukoliv jinému. Tento problém může být obzvlášť nepříjemný v případě, že máte jenom jednu disketovou mechaniku. Když ale máte dostatek paměti, můžete nastavit zavádění z diskety tak, aby se obsah tohoto superuživatelského zaváděcího disku načítal do virtuálního "ramdisku" (je proto nutné zvlášť nakonfigurovat jádro systému na zaváděcí disketě). Když se podaří načíst superuživatelskou zaváděcí disketu na ramdisk, lze disketovou mechaniku využít pro připojení jiných disket.

Previous Content Next Up