Portál AbcLinuxu, 6. května 2025 09:24
Nový seriál, který se pokusí zodpovědět otázky, které si často klademe a zodpovídáme v diskusi na ABCLinuxu. První díl se zabývá zavaděčem operačních systémů, který je instalován jako standardní -- LInux LOader (LILO).
Nový seriál, který se pokusí zodpovědět otázky, které si často klademe a zodpovídáme v diskusi na ABCLinuxu. První díl se zabývá zavaděčem operačních systémů, který je instalován jako standardní -- LInux LOader (LILO).
Zavaděč operačních systémů je program, který je uložen v prvním sektoru každého disku (angl. boot sector). Rozlišujeme disky fyzické a logické. Fyzické disky jsou ty, které připojíme na "kšandu" (šedý plochý pás z vodičů) nebo disketové, CD-ROM a ZIP mechaniky. Každý fyzický disk začíná sektorem, který se nazývá Master Boot Record (dále MBR).
Logické disky se vytvářejí na disku fyzickém (ne ovšem na výměnných médiích), existuje určitá filozofie pro jejich vytváření, která však není námětem tohoto článku. Logické disky se v terminologii označují jako partition; každý fyzický disk musí mít alespoň jeden logický disk (teprve na něm je vytvářen systém souborů). Každý logický disk začíná také boot-sektorem. Zavaděč se obvykle instaluje do MBR prvního fyzického disku, protože ten je načítán jako první. Při bootování (zavádění operačního systému) jsou nejprve načítány MBR fyzických disků, potom eventuálně boot-sektory disků logických.
V BIOSu počítače, do kterého se dostanete stiskem určité klávesy po zapnutí počítače, lze určit, v jakém pořadí budou načítány MBR přístupných disků (typické pořadí je disketová mechanika, CD-ROM, harddisk). Pokud MBR prvního fyzického disku neobsahuje zavaděč (což je velice neobvyklé!), čtou se MBR dalších fyzických disků. V zavaděči, který je uložen v MBR, lze přesměrovat proces bootování do dalších boot-sektorů jednotlivých logických disků např. tímto způsobem (teoreticky vzato, v praxi asi nevyužívané):
1. Prvni_operacni_system |
2. Linux |
Tato nabídka je uložena v MBR prvního fyzického disku, první položka reprezentuje systém v prvním logickém disku, druhá systém v druhém logickém disku. Po vybrání položky číslo jedna se spustí nějaký operační systém, po vybrání druhé položky se zobrazí další nabídka:
1. Prvni_Linux |
2. Druhy_Linux |
Tato nabídka je uložena v boot-sektoru druhého logického disku, Prvni_Linux je systém v druhém logickém disku, Druhy_Linux je systém ve třetím logickém disku.
Tolik jen k objasnění principu, na jakém vše funguje. V další části
článku už se budu věnovat konkrétním dotazům, které zazněly v diskusi.
Apropos, důležitá připomínka: po každé změně konfiguračního
souboru je nutné spustit jako root program lilo
,
aby se změny uplatnily.
Základem je pochopitelně mít nainstalované LILO. Instalační programy to za vás udělají samy, ale je možné, že budete požadovat specifické řešení. Proto je dobré vědět, jak všechno funguje. Především se vyplatí vědět, že instalační programy všech mně známých verzí operačního systému Microsoft Windows přepisují MBR svým zavaděčem. Proto je nejlepší, pokud požadujete Windows a Linux na jednom počítači (tzv. dualboot), postupovat následovně:
Konfiguračním souborem zavaděče je soubor
/etc/lilo.conf
. V něm jsou uloženy záznamy, které určují,
odkud se mají načítat zaváděcí kódy jednotlivých systémů. Důležitou
věcí je program lilo
, který načte tento soubor a potřebné
boot-sektory zapíše. Proto je po každé změně konfiguračního souboru
nutné tento program (jako root) spustit. Obsah souboru
/etc/lilo.conf
může vypadat třeba takto:
boot=/dev/hda   # zavaděč je uložen v MBR prvního fyzického
disku
|
Při procesu bootování provádí zavaděč několik operací. Po každé úspěšně provedené akci vypíše na obrazovku jeden znak slova "LILO". Po zobrazení celého slova je vše provedeno správně a řízení je předáno obrazu jádra, který už načte samotný systém. Pokud však dojde k chybě, lze pomocí vypsaných znaků určit, o jakou chybu se jedná. Popis těchto chybových stavů najdete v dokumentaci k programu; zde se omezím na pravděpodobně nejčastější chyby.
Výpis | Význam | Možné řešení |
(nic) | LILO (ani žádný jiný zavaděč) není nainstalován, nebo je oddíl, na němž je LILO, zakázán (neaktivní). | Náprava je možná použitím programu na dělení disku (např. fdisk, cfdisk) a zpřístupněním diskového oddílu (partition). |
L (cislo_chyby) |
Zavaděč v MBR byl spuštěn, ale není schopen načíst nabídku systémů. Čísla chyb viz níže. | Nastavení správné geometrie disku v konfiguračním souboru
/etc/lilo.conf . Možné je ovšem i fyzické poškození
disku. |
LI |
Zavaděč byl spuštěn, načetl údaje o kódu s nabídkou, ale není schopen jej spustit. Opět chyba geometrie disku, nebo špatná instalace zavaděče. | Nastavení správné geometrie disku v konfiguračním souboru
/etc/lilo.conf , nebo opravení souboru
/boot/boot.b (spuštěním programu lilo ). |
LIL nebo LIL? |
Byl spuštěn kód zobrazující nabídku, ale není schopen přečíst
zdrojový soubor s touto nabídkou (obvykle /boot/map ). |
Nastavení správné geometrie disku v konfiguračním souboru
/etc/lilo.conf . Znovuspuštění lilo . Možná je
fyzické poškození média. |
LIL- |
Tabulka popisující zavaděč je poškozená. | Znovuspuštění lilo . |
Občas se také stává, že zavaděč vypíše znak "L" a pak obrazovku zaplňuje nulami nebo jinou hodnotou. Tato čísla nejsou náhodná, opět se jedná o chybové kódy. Zde je krátký přehled těch, se kterými se občas setkáváme:
Chybový kód | Význam | Možné řešení |
0x00 |
Interní chyba. Často způsobená nekonzistencí dat na disku. Druhou
možnou příčinou je použití parametru linear v oddíle,
který leží za 1024. cylindrem, což je omezení ze strany BIOSu. Více
man lilo . |
Spusťte znovu lilo . Druhý případ: místo
linear použijte parametr lba32 , což ale
nemusí fungovat na počítačích (BIOSech) starších více než pět let. |
0x02 |
Adresa na disku nenalezena. | Problém s diskem nebo médiem. Zkuste bootovat vícekrát; fyzické poškození je ale asi prokazatelné. |
0x04 |
Sektor na disku nenalezen. | Nemusí ještě znamenat fyzické poškození disku, ale opět problémy s geometrií. |
další kódy |
V dokumentaci k programu. |
Důvod: Otec na tom počítači také pracuje a nemá rád změny. A nechci, aby mu naskočil Linux, když nebude při bootu nic vybírat.
Tento požadavek je častý, protože ne všichni členové rodiny, kteří využívají jeden počítač, mají pro naše experimenty pochopení. A také je neslušné někomu něco vnucovat proti jeho vůli. Jak už vyplynulo z předchozího textu, lze tuto situaci vyřešit jednoduše, a sice přidáním parametru
default=windows
|
někam na začátek souboru /etc/lilo.conf
. Hodnota
windows
přitom reprezentuje systém, který je uložen v
prvním logickém disku. Můžeme také experimentovat s parametry
prompt
a timeout
.
Existuje více řešení, mně se osvědčilo asi to nejjednodušší.
Slackware mám jako hlavní, sídlí v /dev/hda2
, ostatní
distribuce jsou v dalších oddílech. Ze Slackware jsem nainstaloval LILO
do MBR a ostatní systémy přidávám jako "cizí", ne tedy jako Linuxy:
image = /boot/vmlinuz
|
Zjistil jsem totiž, že pokud místo sekce other
použijete
image
i pro ostatní Linuxy, bude zavaděč hledat všechny
možné soubory, které v adresáři /boot
na daném oddíle
očekává. Protože je pravděpodobně najde, použije je, ovšem začne načítat
jádro Slackware, čímž se dostanete k hlášce "Kernel panic". Každý oddíl
musí mít pochopitelně svůj zavaděč ve svém boot-sektoru. Takové LILO se
však obvykle neprojeví na obrazovce, ale přímo bez dotazu spustí systém
ze svého oddílu:
boot=/dev/hda5 # nebo /dev/hda6 apod.
|
Bylo by samozřejmě také možné zobrazit nabídku se dvěma verzemi jádra, která by se spouštěla ze stejného logického disku. Opakuji, tento záznam je třeba vytvořit v systému, který jsme spustili výběrem položky "MujLinux" ve výše zmíněné ukázce.
boot=/dev/hda5 # boot-sektor je v logickém disku
|
Tuto variantu jsem netestoval, takže je možné, že bude nezbytné
doplnit další parametry (opět man lilo
). Domnívám se navíc,
že ten, kdo testuje vlastní jádro, je také schopen vytvořit si korektní
zavaděč systému.
LILO je uloženo v MBR, prvním sektoru fyzického disku. Tento sektor je přepisován téměř vždy, když se instaluje nový operační systém. Postará se o to instalační program daného systému. Někdy k naší spokojenosti, jindy je nutné zavaděč upravit. Pokud chceme startovací kód z tohoto sektoru odstranit, aniž bychom instalovali další systém, máme několik možností. Výsledkem je ale asi vždy nefunkční počítač, protože nedojde ke spuštění žádného kódu, a tudíž ani žádného operačního systému. Pokud není na novém disku nainstalovaný žádný operační systém, MBR obsahuje kód, který zobrazí zprávu typu "NO SYSTEM DISK" nebo podobnou.
Systém Windows bez ptaní přepíše MBR svým zavaděčem, který je konstituován tak, aby zaváděl pouze Windows (ve starších verzích ještě i MS-DOS s podporou sítě, nebo bez ní, apod.). Existuje však záloha tohoto sektoru, kterou můžeme obnovit dosovským příkazem
fdisk /MBR
|
a která přivede počítač do těžko odhadnutelného stavu. V Linuxu pro zhruba totéž slouží příkaz
lilo -u
|
Je však nutné mít zálohu původního boot-sektoru (nemusí to být nutně
jen MBR) v souboru /boot/boot.NNNN
, který je vytvářen vždy
při instalaci nového zavaděče. Podle mého názoru nemá v praxi tato
činnost velké opodstatnění, protože o vše se postará instalátor, příp.
samotný program LILO.
Instalace vypalovačky je typický případ, kdy musíme předat jádru parametry při jeho startu. Slouží k tomu další příkaz, který uvedeme v konfiguračním souboru. Zmíněný dotaz vyřeším příkazem
append="hdc=ide-scsi"
|
kde hdc
je zařízení vypalovačky. (Podrobnosti o tomto
tématu najdete v seriálu o vypalování). Jádru takto
můžeme předat mnoho důležitých informací, např. pokud náhodou nepozná
množství operační paměti, můžeme je zadat přímo.
append="mem=96M"
|
Pokud je známo, grafické LILO nabízejí standardně jen některé distribuce. Každopádně bude asi nutné stáhnout aktuální verzi a zkompilovat ji s podporu grafického výstupu. Přiznám se, že jsem to nezkoušel.
Znění této otázky je vymyšlené, ale téma je časté. Na této stránce najdete podrobný anglický návod, na stránkách Linuxu na každý den najdete i český návod. Pochopil jsem také, že je nutné nainstalovat nové LILO, které umí zobrazit animace.
Tento text se snaží pomoci těm, kdo se potýkají se základními
problémy při konfiguraci LILO. Je pravděpodobné, že zde nenajdete řešení
svého problému, proto neváhejte využít diskuse na hlavní straně
ABCLinuxu. Hlavní účel tohoto seriálu ale je, aby v diskusi nepadaly
pořád ty stejné dotazy, jejichž řešení lze najít během deseti sekund.
Všechny informace jsem čerpal z "veřejně přístupných zdrojů", čímž mám
na mysli dotazy a odpovědi z diskuzí, manuálové stránky, případně další
dokumentaci k programům. Vše můžete najít na Internetu nebo na svém
disku např. v adresáři /usr/doc/
.
Nechci vyvolávat rozepře a plamenné hádky, proto jen čistě fakticky. LILO není jediný zavaděč ve světě GNU/Linuxu, v poslední době mu slušnou konkurenci dělá také GRUB, který je v některých distribucích upřednostňován. Jak jistě všichni víme, nemá cenu srovnávat dva programy se stejným účelem použití, protože každý z nich má své fanoušky. Proto se omezím na informaci, že GRUB má své možnosti a také problémy, o kterých však může vzniknout jiný článek. Pokud vám instalátor nabídne volbu mezi těmito dvěma programy, zavřete oči a naslepo klikněte. Vyjde vás to nastejno. No flames, pls ;-).
Vlastimil Ott
Mimochodem: Ty chybové kódy jsou popsány v souboru/usr/doc/lilo_verze/README
, našel jsem ti ten tvůj:
0x01 "Illegal command". This shouldn't happen, but if it does, it may
indicate an attempt to access a disk which is not supported by the
BIOS. See also "Warning: BIOS drive 0x
Jeste bych snad dodal (pokud jsem to neprehledl), ze lilo je take nutne spustit i pote, co zmenite soubor napr. /boot/vmlinuz (vetsinou pri rekompilaci jadra atd.) aniz by jste treba editovali /etc/lilo.conf
Je to z toho duvodu, ze po spusteni prikazu lilo se nejen znovu nacte lilo.conf , aktualizuje MBR a "menu", ale take se napr. zmeni /boot/map - a to podle /boot/vmlinuz (popr. jineho souboru, ktery mate uveden za image=)
Pokud to neudelate, lilo nacte spatnou mapu a dostanete (misto nabootovani) maximalne kernel panic
That's allad)/boot/map existuje, protoze lilo narozdil od grubu nezna zadny filesystem. /boot/vmlinuz mu nic nerekne a tak musi mit nejakou absoulutni adresu umisteni jadra.
To je take jeden z duvodu, proc nekteri lide pouzivaji grub ... proste casto zapominaji napsat lilo ...
THAT'S ALL !!
Hodně toho najdeš v manuálových stránkách - man lilo, man lilo.conf by mělo stačit?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.