BlackBoard (http://www.black-board.net/index.php)
- Computerecke (http://www.black-board.net/board.php?boardid=30)
-- Betriebssysteme (http://www.black-board.net/board.php?boardid=11)
--- Linux Bootloader Funktion (http://www.black-board.net/thread.php?threadid=10213)


Geschrieben von Compuholic am 05.02.2003 um 19:42:

  Bootloader Funktion

Hi,

durch eine Diskussion im IRC ist eine Frage aufgetaucht, die wir irgendwie noch nicht lösen konnten. Daher stelle ich sie mal zu Diskussion:

Beim Bootvorgang wird ja durch das BIOS der Bootloader aufgerufen. Da aber im Bootsektor viel zu wenig Platz für den Kernel ist, wollte ich mal fragen wie lilo da eigentlich rankommt. Das Kernel-Image liegt ja auf der Festplatte in einem bestimmten Verzeichnis und unterliegt somit einem Dateisystem. Wie kann lilo auf dieses Verzeichnis zugreifen? Besitzt lilo einen eigenen ext2-Dateisystemtreiber (was ich mir irgendwie nicht vorstellen kann)?

Und noch eine Frage (aus der die obige eigentlich entstanden ist). Ist es abhängig von der lilo-Version ob der Kernel von einem Reiser-Dateisystem ausgestarter werden kann? Bei meinem System ist nämlich auch die Root-Partition als ReiserFS formatiert. Ich dachte sonst immer, das wenigstens die Root-Partition als ext2 formatiert sein muß.

Danke
MfG Compuholic



Geschrieben von Mr.Stevens am 06.02.2003 um 08:29:

 

Die Frage müsste man evtl. etwas anders formulieren.
LILO besteht ja bekanntlicherweise aus 2 Stufen. Die erste wird in einem vom BIOS erreichbaren Sektor (Mbr, Bootsektor einer Partition, Diskette...) abgelegt. Ihre Aufgabe ist einzig das Laden der zweiten Stufe (meist /boot/boot.b) in den Hauptspeicher. Die zweite Stufe kennt nun anhand der Datei /boot/map die Lage der verschiedenen Kernel bzw. der zu ladenden Bootsektoren anderer Betriebssysteme.
Die Frage gilt also hier eher boot.b ...
Kann dieses kleine Tool Dateisysteme lesen? Wahrscheinlich schon, sonst wärs ja nicht möglich irgendwas zu laden/booten.

Genau weis ich das jetzt allerdings auch nicht Augen rollen

[edit]
Hab jetzt im SuSE Handbuch was ordentliches zu diesem Thema gefunden. Nachzulesen ab Seite 85 ...
Download des eBooks als zip File ---> HIER
[/edit]



Geschrieben von cyperdark am 06.02.2003 um 13:54:

 

beim booten wird eine ramdisk im speicher angelegt. diese erlaubt den zugriff auf das dateisystem. es gibt sogar linuxversionen im inet die auf einer einzigen disk und ganz ohne hd laufen. "minilinux" ist hier das schlüsselwort. such mal bei google, dort wird zum teil auch sehr gut und genau erklärt wie das funktioniert mit dem booten. falls du doch noch fragen hast kann ich auch mal in meinen alten linuxunterlagen suchen und dir was zum thema schicken.



Geschrieben von DooMRunneR am 06.02.2003 um 16:27:

 

Genau genommen handelt es sich bei Lilo um verschiedene Programme und Dateien. Das Kommando lilo ist dabei der so genannte Map-Installer, der alle für den Bootmanager benötigten Dateien an die entsprechenden Stellen im System platziert. lilo ist stets aufzurufen, sobald sich an irgend einer für den Bootmanager wichtigen Datei (/etc/lilo.conf, Kernel, /boot/map) etwas geändert hat.

Der Bootmanager lilo selbst besteht aus zwei Stufen. Die erste wird in einem vom BIOS erreichbaren Sektor (Mbr, Bootsektor einer Partition, Diskette...) abgelegt. Ihre Aufgabe ist einzig das Laden der zweiten Stufe (meist /boot/boot.b) in den Hauptspeicher.

Die zweite Stufe kennt nun anhand der Datei »/boot/map« die Lage der verschiedenen Kernel bzw. der zu ladenden Bootsektoren anderer Betriebssysteme. Zur Auswahl dieser bietet lilo ein einfaches Kommandozeileninterface an, das neben der Selektion des Betriebssystems auch die Übergabe von Optionen an dieses erlaubt. Alternativ präsentieren neuere Programmversionen eine grafische Oberfläche. Diese kann ggf. durch Eingabe von [Esc] verlassen werden, um Optionen an einen Kernel zu übergeben.

Lilo lädt nun den Kernel in den Hauptspeicher, teilt diesem die Lage des Root-Verzeichnisses und eventuelle Optionen mit und übergibt abschließend die Kontrolle an den Kernel.



Geschrieben von Compuholic am 06.02.2003 um 16:49:

 

Das war doch gar nicht die Frage *kopfschüttel*

Ich formuliere sie noch einmal anders. Wie kann LILO auf Dateien auf der Festplatte, die sich ja innerhalb eines Dateisystems befinden, lesen? Bevor der Kernel gestartet ist, ist es doch nicht möglich auf Dateisysteme zuzugreifen, weil der Treiber erst mit dem Kernel gestartet wird.



Geschrieben von CDW am 06.02.2003 um 18:38:

 

Zitat:

lilo erstellt so etwas wie eine Tabelle mit "Sektornummern" von
den zu ladenden Sektoren. Der eigentliche Bootloader kennt GAR KEIN
Filesystem, nur der "Installer" (der diese Load-Map, also diese Liste
von Blocknummern, erzeugt, muss das Filesystem kennen, um diese Infor-
mation herauszubekommen). Das ist auch der Grund, warum man lilo nach
Austausch des Boot-Kernels neu aufrufen ("installieren") muss, grub
aber nicht (solange sich der Name des Boot-Kernels nicht geaendert hat).

Der eigentliche
Bootloader kennt kein Linux-Filesystem, deswegen wird beim installieren
eine Liste der Platten-Sektoren angelegt, die zu dem Kernel gehoeren (die
sog. "load-map"). Wird ein neuer Kernel installiert, MUSS die load-map
neu erstellt werden.


so wie ich das verstanden hab, sind die sektoren,wo Lilo-Hauptprogramm liegt, im Bootsektor mitgespeichert - da der Code in Bootsektor automatisch ausgeführt wird,nehme ich an, dass angegeben wird, von welchem bis welchem sektor Lilo zu finden ist - da muss auch kein Dateisystemvorhanden sein smile (da meinem Verständniss nach das DAteisystem vereinfacht gesagt eine Art Tabelle ist, wo man die Dateinamen und die zugehörigen Sektoren findet - deshalb nimmt z.b bei NTFS bei meiner 30 GB platte das Dateisystem "system volume Information" auch so viel Platz weg (etwa 125 MB)
naja, hier kann mans vielleicht genau nachlesen:
http://packages.qa.debian.org/l/lilo.html
Der Zugriff kann dadurch erfolgen, dass man die BIOS Routinen dafür einsetzt (interrupts *g*)



Geschrieben von Zirias am 06.02.2003 um 23:26:

 

Bei ext2 (sowie wahrscheinlich auch bei den meisten anderen Filesystemen) sind Datenblocks von Metadatenblocks getrennt. Lilo muss also nur die Blocknummern wissen, auf denen es den Kernel findet. Achja die Blockeinteilung der Platte ist dateisystemunabhängig, sie wird beim lowlevel-Format vorgenommen. LILO liest einfach nur die Block ein, eine "triviale" Plattenoperation.

Im Gegensatz dazu hat grub wirklich eine ext2-Leseunterstützung und findet also über die Metadatenblocks die richtigen zu lesenden Blocknummern erst beim booten heraus. Es muss also nur einen Pfadnamen wissen, um den Kernel zu finden. Das hat den Vorteil, dass man wegen einer neuen Kernelversion nicht auch einen neuen Bootblock schreiben muss, außerdem kann man über die Kommandozeile auch im Notfall ein Kernel laden, das in der Konfigurationsdatei garnicht angegeben war.

Greets, Ziri



Geschrieben von Mr.Stevens am 07.02.2003 um 07:19:

 

@ DoomRunner

Sag mal, liest du eigentlich nicht die Posts die vor deinem abgegeben werden, oder schreibst du gern schon dagewesenes ??

tststs



Geschrieben von Compuholic am 07.02.2003 um 16:11:

 

Noch etwas:

Was passiert eigentlich, wenn das Kernel-Image fragmentiert auf der Platte abgelegt wird? Dann müßte lilo doch eigentlich am Ende sein. Oder kann man beim Speichern irgendetwas ähnliches wie das DONT_FRAGMENT Flag bei IP setzen?



Geschrieben von Zirias am 07.02.2003 um 20:59:

 

Ich kenne die Details zwar nicht, aber spekuliere einfach mal wild, dass Lilo nicht nur den ersten sondern alle Blocks (oder zumindest Anfänge) kennt. Und solange das Kernel nicht neu geschrieben wird kann es ja auch nicht fragmentiert werden großes Grinsen Wenn man es neu schreibt, muss sich Lilo eh neu in den Bootblock schreiben.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH