ABSTRACT: es werden die verschiedenen linux bootloader vorgestellt (direkt kernel auf floppy, lilo, loadlin, syslinux, ...) AUDIENCE: junior admin SYSTEM: linux SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt gestern haben wir den bootvorgang ganz allgemein kennengelert. heute wollen wir die verschiedenen bootloader fuer linux im detail besprechen. und zwar: * direktes booten von floppy disk * LILO - der meist verwendete bootloader fuer linux * syslinux - das gerne fuer bootfloppys und netzwerkboot verwendet wird. * loadlin - booten direkt aus einem bestehenden dos/win3xx/win9x system. zur wiederhohlung: die einfachste moeglichkeit linux zu booten (wenn auch im dauerbetrieb nicht ideal) ist es einen nakten kernel direkt auf auf das floppy device zu schreiben: z.b.: cat bzImage > /dev/fd0 der kernel enthaelt also seinen eigenen minibootloader am anfang selbst.. nachteil obiger methode ist dass man keine parameter mitgeben kann. einige wichtige optionen kann man allerdings in den kernel hineinpatchen. dazu dient der befehl "rdev" rdev /dev/fd0 oder rdev bzImage wuerde das root device anzeigen dass der kernel nach der initalisierung mounten will. rdev /dev/fd0 /dev/hdb7 wuerde dem auf die floppy geschrieben kernel sagen dass er /dev/hda7 als root filesystem mounten soll. rdev -v wuerde den video modus verstellen mit dem der kernel bootet (erfahrene linux user bevorzugen meist die 80x25 zeichen console: (modus -2 )) waehrend der nakte kernel auf der floppy recht praktisch ist in notfaellen. fuer den taeglichen gebrauch will man meist von harddisk booten. hier verwendet man meist LILO den LInux LOader. LILO schreibt sich in den ersten block der harddisk (den sogenannten MBR) genauer gesagt nur in die ersten 446 bytes weil dahinter steht dann die parition table. von dort laed er dann weitere sektoren von denen er sich gemerkt hat wo sie liegen und schliesslich den kernel.. LILO bietet ein menue zur auswahl unterschiedlicher kernel, kann auch andere system booten (z.b dos/win) und kann parameter an den kernel uebergeben. zum erstellen eines bootsektors dient das linux programm "lilo" lilo schreibt also einen neuen boot sektor, und zwar anhand der einstellungen in /etc/lilo.conf will man also aenderungen machen so editiert man dieses file und ruft dann "lilo" auf. man muss lilo ebenfalls aufrufen wenn man einen kernel geaendert hat. (selbst wenn man ihn auf den selben namen kopiert: da sich lilo die bloecke merkt auf denen der kernel steht muss er in so einem fall neu geschrieben werden.) ein typischer block im lilo.conf koennte etwa so aussen: image=/boot/bzim_test218 label=linuxtest append="mem=128M ether=11,0x260,eth1" root=/dev/hda1 read-only alias=3 das erste waere der name des kernelfiles. hier also /boot/bzim_test218 dann der name des images den man bei der auswahl angeben muss. hier also "linuxtest". dann parameter die dem kernel uebergeben werden. hier z.b. mem=128 (fuer einen rechner der aufgrund eine alten BIOS den speicher ueber 64MB sonst nicht erkennen wuerde. und die angabe fuer eine alte ISA netzwerkarte damit er die findet..) danach ganz wichtig: das root device wo er das rootfilesystem suchen soll. hier z.b. /dev/hda1. danach noch ein alias name. d.h. man kann bei der auswahl auch "3" eingeben anstatt "linuxtest". sonstige wichtige optionen: boot=/dev/hda auf welches device er den boot sektor schreiben soll lba32 .. ist empfehlenswert auf neueren rechnern - damit kann man auch jenseits von 1024 cylinder booten (aelteren BIOSe konnte das nicht) vga=-2 .. bootet im 80x25 modus. man hat mehr uebersicht als mit den 40x25 delay=30 timeout=30 prompt .. man hat 3 sekunden zeit ansonsten wird der erste eintrag gebootet. man bekommt immer einen prompt zum auswaehlen was man booten will. sonst muesste man zuerst SHIFT taste druecken. am LILO prompt kann man nicht nur den kernel auswaehlen sondern auch haendisch parameter eintippen. z.b.: INIT=/bin/bash bootet direkt in eine shell. ohne passwort. damit kann jeder der zugang zum rechner hat root werden. ist der rechner oeffentlich zugaenglich sollte man daher ein lilo passwort setzten dass die eingabe von parametern an den kernel nur mit passwortabfrage erlaubt: password=strenggeheim "lilo" erlaubt auch eine menge an kommandline optionen beim aufruf. besonders nuetzlich: lilo -r /mnt wuerde einen lilo mit der configuration in /mnt/etc/lilo.conf schreiben und alle pfade von /mnt weg betrachten. das ist praktisch wenn man nicht auf der root partition gebootet hat die man normalerweise verwendet sonder auf einer anderen oder auf einer rescue floppy oder aehnlichem und dann das "/" verzeichniss dass man spaeter haben will haendisch unterhalb von /mnt gemountet hat. * hat man ein bestehendes dos/win system so kann man linux direkt von dort heraus booten (geht nicht mit winNT, win2000). das packet dazu heist loadlin. man hat ein programm namens loadlin.exe dem man als parameter oder mit einem config file sagt welchen kernel und welche root partiton man booten will..etc.. das file schaut aehnlich aus wie das lilo.conf file. genau erklaerung findet man im readme.txt das beim loadlin dabei ist.. * syslinux ist ebenfalls ein bootloader fuer linux er wird sehr gerne als basis fuer rescue und boot disks von distributionen verwendet. syslinux kann ein DOS filesystem lesen. d.h. kernel und configurationsfiles (syslinux.cfg) muessen nicht auf fixen sektoren stehen sondern koennen als DOS files auf einer DOS formatierten diskette stehen. das ist praktisch fuer neueinsteiger die so die bootfloppy von ihrem alten dos/windows system aus modifizieren koennen. um den syslinux bootloader auf eine leere diskette zu schreiben kann man das program syslinux (unter linux) oder syslinux.exe (unter dos/win) verwenden. syslinux bietet ebenfalls die moeglichkeit ein BOOT image fuer systeme zu erstellen die von netzwerk (PXE environment) booten koennen. damit kann sehr leicht diskless systeme realisiern. will man ein dualboot sytem mit windows NT machen so muss empfiehlt es sich mit dem windowsNT bootloader zu booten (weil NT nur mit dem gebootet werden will.) um linux zu booten schreibt man sich seinen bootsektor NICHT in den MBR sondern an den anfang der partition von der aus man linux starten will und kopiert sich dann diesen bootsektor in ein file: z.b.: dd if=/dev/hda2 bs=512 count=1 of=/boot/bootsec.lin diese datei kopiert man sich dann auf seine windows NT partiton: z.b.: auf C:\BOOTSEC.LIN und traegt dann eine zeile ins "BOOT.INI" file des NT bootloaders ein: C:\BOOTSEC.LIN="linux" zum glueck gibt es ja heutzutage kaum noch gruende warum man ueberhaupt ein dualboot system mit windows brauchen koennet... ausgenommen vielleicht einige komerzielle spiele... EXERCISES: * schau dir deine bestehende lilo.conf an und zu verstehen was die einzelnen zeilen im config file tun. * fuege einen menuepunkt hinzu der identisch ist mit einem der anderen punkte aber einen neuen namen (und eventuell alias) traegt. * versuche am LILO bootprompt (ev. SHIFT druecken) parameter einzugeben. experimentiere mit root=/dev/hdxx und init= parametern. * versuche eine bootfloppy zu erstellen mit - einem nakten kernel - einem syslinux bootloader * wenn du noch irgendwo eine verstaubte dos oder windows partition hast: versuche linux mit loadlin zu booten. REFERENCES: man lilo lilo --help man lilo.conf Bootdisk-HOWTO.txt