So normal sich das Booten von der Festplatte auch anhört, so treten doch gerade in Verbindung mit RAID-Verbunden als Root-Partition einige Probleme zu Tage die es hierbei zu umschiffen gilt. Andererseits ist es auch oft gerade die Vielfalt der Bootmöglichkeiten, welche den einen oder anderen in Verwirrung stürzt.
DOS Partition mit Loadlin
Ein relativ sicherer und einfacher Weg zugleich Linux zu Booten und schnell die Bootkonfiguration zwischen einem RAID-Verbund und einer normalen ext2-Partition zu wechseln, stellt das Booten per loadlin von einer kleinen DOS-Partition dar. Außer den DOS Systemdateien, einem Linux-Kernel mit RAID-Unterstützung, loadlin und einer Loadlin-Konfigurationsdatei wird nur noch ein DOS Editor benötigt, um simpel die Root-Partition in der Loadlin-Konfigurationsdatei zu ändern.
Extra-Partition für LILO mit Root-RAID
Root-RAID in Verbindung mit LILO braucht noch etwas mehr Fürsorge. Zuerst müssen Sie wissen, ob Ihr LILO im MBR Ihrer Festplatte oder im Superblock Ihrer Root-Partition installiert ist. Ist Linux z.B. das einzige Betriebssystem auf Ihrem Rechner, ist LILO vermutlich im MBR installiert, booten Sie jedoch mittels eines fremden Bootmanagers (OS/2 Bootmanager, XFDisk, oder ähnliche) wird LILO im Superblock Ihrer Root-Partition liegen. Noch einfacher kann das Ihre bisherige /etc/lilo.conf herausstellen: Der Parameter boot= gibt an, wo sich LILO aufhält. Steht dort etwa
/etc/lilo.conf |
boot = /dev/sda
|
so residiert Ihr LILO im MBR der ersten SCSI-Festplatte, bei der Angabe
/etc/lilo.conf |
boot = /dev/sda2
|
handelt es sich um den Superblock Ihrer zweiten primären Partition.
LILO braucht zum Booten die Information, wo der Linux-Kernel auf der Festplatte liegt. Da LILO das aber zu einer Zeit erfahren muss, zu der noch gar keine Partition gemountet ist, behilft sich LILO, indem er Plattengeometriedaten in den MBR oder Superblock schreibt, die die genaue Anfangslage des Linux-Kernel beschreiben. Die meisten Distributionen legen Ihre Kernel unter /boot ab. Diesen Umstand kann man nun dahingehend ausnutzen, dass man sich ein kleine Extra-Partition (etwa 10-20 MB) erstellt, welche unterhalb der 1024 Zylindergrenze liegt. Diese formatiert man mit ext2 und mountet sie als /boot in seinen Root-RAID-Device-Verzeichnisbaum, kopiert den gesamten Inhalt von dem originalen /boot Verzeichnis in das neue /boot Verzeichnis und ändert die Dateien /etc/lilo.conf und /etc/fstab dementsprechend:
/etc/lilo.conf |
boot = boot-Partition-ohne-RAID (/dev/sda2),
oder: MBR-der-Festplatte (/dev/sda)
image = /boot/vmlinuz-2.2.10
root = /dev/md0
read only
|
/etc/fstab |
/dev/md0 / ext2 exec,dev,suid,rw 1 1
/dev/sda2 /boot ext2 exec,dev,suid,rw 1 1
|
Das Ausführen von lilo sollte dann bescheinigen, dass der Kernel vmlinuz-2.2.10 korrekt initialisiert wurde.
Haben Sie nun LILO im Superblock Ihrer neuen /boot Partition angelegt, so müssen Sie dies noch Ihrem Bootmanager bekannt geben und ihn eben diese booten lassen. Dem Beispiel zufolge wäre das die Partition /dev/sda2. Liegt Ihr LILO im MBR der Festplatte, so brauchen Sie nichts weiter tun, als neu zu booten.
Dieses Verfahren bootet zwar Linux mit einem Root-RAID, ist aber im Fehlerfall der ersten Festplatte nicht redundant!
Extra-Partition für LILO mit redundantem Root-RAID
Die hier beschriebene Vorgehensweise bezieht sich auf die folgende Konstellation: Zwei (E)IDE-Platten sind beide als Master gejumpert und hängen an verschiedenen (E)IDE Kontrollern: /dev/hda und /dev/hdc.
Die Partitionstabelle ist für beide Festplatten gleich:
Partitionstabelle |
/dev/hd?1 primary Linux native (83) ca. 10 MB (fuer /boot)
/dev/hd?2 primary Linux swap (82) 128 MB (fuer swap)
/dev/hd?3 primary Linux raid auto (fd) den Rest (fuer /dev/md0)
|
Wenn im folgenden von Backup-Fall gesprochen wird, dann ist damit der Fall gemeint, dass die erste Festplatte ausgefallen ist und irgendwie von der verbliebenen zweiten Festplatte gebootet werden soll.
Wir gehen von folgender /etc/lilo.conf für die erste Festplatte aus:
/etc/lilo.conf |
boot=/dev/hda
image=/boot/vmlinuz
root=/dev/md0
label=linux
|
Nun muss auch auf der zweiten Platte eine Boot-Partition erzeugt werden. Dazu erstellt man auf der zweiten Festplatte eine identische Partition und kopiert mittels einer der im Abschnitt Möglichkeiten zum Kopieren von Daten beschriebenen Methoden das originale Boot-Verzeichnis auf die zweite Festplatte.
Jetzt kopiert man die /etc/lilo.conf der zweiten Festplatte nach /etc/lilo.conf.backup und passt sie an die neuen Bedingungen an. Die endgültige /etc/lilo.conf.backup sollte dann wie folgt aussehen:
/etc/lilo.conf.backup |
boot=/dev/hdc
disk=/dev/hdc bios=0x80
map=/boot2/map
install=/boot2/boot.b
image=/boot2/vmlinuz
root=/dev/md0
label=linux
|
Der Parameter disk=/dev/hdc bios=80 ist nötig, um LILO vorzuspiegeln, dass die Festplatte /dev/hdc mit 0x80 eingeloggt ist. Der Grund dafür ist, dass das BIOS normalerweise die ersten beiden Festplatten mit den Adressen 0x80 und 0x81 einloggt. Wir konfigurieren die Platte 0x81 (/dev/hdc). Im Backup-Fall wird die Festplatte aber als 0x80 eingeloggt, da die ursprüngliche erste Festplatte ja defekt ist.
Ein
root@linux # lilo -C /etc/lilo.conf.backup
|
schreibt die Bootinformationen in den MBR. Es erscheint eine Warnung /dev/hdc is not on the first disk, aber das soll uns nicht stören, denn im Backup-Fall wird diese Festplatte ja zur ersten Festplatte im System. Dafür muss sie natürlich noch an den ersten (E)IDE Kanal gehängt werden.
In komplexeren Fällen ist unter Umständen noch die Optionen ignore-table hilfreich.
Zu bedenken ist noch, dass man nach dem Kompilieren eines neuen Kernels das Boot-Verzeichnis der zweiten Festplatte anpasst und LILO auch mit dem entsprechenden Befehl
root@linux # lilo -C /etc/lilo.conf.backup
|
für die zweite Festplatte ausführt.
LILO im MBR
Benutzen Sie Linux als einziges Betriebssystem, bietet es sich an, LILO direkt im MBR Ihrer Festplatte unterzubringen.
LILO im Superblock mit externem Bootmanager
Um auch Betriebssysteme neben Linux zu starten, mit denen LILO nicht zurecht kommt, bietet es sich an, einen externen Bootmanager wie etwa den OS/2-Bootmanager oder XFDisk zu benutzen. Hierbei wird LILO im Superblock Ihrer Root-Partition untergebracht und der externe Bootmanager im MBR der Festplatte.
LILO direkt vom RAID im MBR
Das grundsätzliche LILO Problem, die Geometriedaten des Kernels wissen zu müssen und somit nicht direkt von einem RAID-Device booten zu können, kann man umgehen, indem man LILO in der /etc/lilo.conf auf dem Root-RAID diese Parameter schon mit übergibt. Prinzipiell funktioniert dies für alle RAID-Modi. Wirklich Sinn macht das aber nur für RAID-Modi wie RAID-1, RAID-4 und RAID-5, welche auch irgendeine Form von Redundanz versprechen. Im Gegenzug ist das direkte Booten von einem RAID-0-Verbund schon deshalb einfacher zu realisieren, weil man sich beim Defekt einer Festplatte keine Gedanken mehr um die Datenrettung oder das Booten von der zweiten Festplatte zu machen braucht: Diese Daten sind dann ohnehin verloren.
Wie funktioniert nun das direkte Booten von einem RAID-Verbund? Hier ein Beispiel der Datei /etc/lilo.conf für den wohl sinnvollsten RAID-Modus für einen Root-RAID Verbund: RAID-1 auf SCSI-Festplatten:
/etc/lilo.conf |
disk=/dev/md15
bios=0x80
sectors=63
heads=255
cylinders=1106
partition=/dev/md0
start=1028160
boot=/dev/sda
image=/boot/vmlinux-2.2.10
label=autoraid
root=/dev/md0
read-only
|
Der Eintrag disk=/dev/md15 mit seinen Parametern übergibt LILO die benötigten Geometriedaten einer fiktiven Festplatte /dev/md15. Hierbei ist es einerlei, ob dieses Device /dev/md15 oder /dev/md27 heißt. Wichtig ist nur, dass es per mknod mit der Major-Number eines RAID-Devices erstellt wurde. Sind Sie sich nicht sicher, ob dies der Fall ist, lassen Sie sich einfach unter /dev/ alle Devices, die mit md anfangen, zeigen. Standardmäßig werden /dev/md0 bis /dev/md15 erstellt. Die Parameter der Sektoren, Köpfe und Zylinder unterhalb von disk=/dev/md15 geben die Geometriedaten der ersten Festplatte Ihres Systems an, welche man mittels
root@linux # fdisk -lu /dev/sda
|
erhält. Die Angabe der Partition soll Ihr Root-RAID Verbund sein. Der letzte Parameter start=1028160 bezeichnet den Sektor, in dem Ihre RAID-Partition auf der ersten Festplatte beginnt. Auch diese Information erhalten Sie durch:
root@linux # fdisk -lu /dev/sda
|
Des weiteren muss als Sitz des LILO der MBR Ihrer ersten Festplatte angegeben werden. Hier geschehen durch den Eintrag: boot=/dev/sda. Der letzte Bereich beschreibt ganz normal die Lokalisation Ihres Kernels mit dem Verweis, als Root-Partition Ihren RAID-Verbund zu nutzen.
Haben Sie den RAID-Verbund nach der weiter unten beschriebenen Methode erstellt und haben sowohl die Option persistent-superblock aktiviert als auch den Partitionstyp der Festplatten auf 0xfd geändert, fehlen dem Master-Boot-Record der SCSI-Festplatten nur noch die Boot-Informationen. Mit dem Aufruf
root@linux # lilo -b /dev/sda
|
werden die Informationen der Datei /etc/lilo.conf in den MBR der ersten SCSI-Festplatte geschrieben. Anschließend muss man den Befehl ein zweites Mal aufrufen. Diesmal allerdings für den MBR der zweiten Festplatte des RAID-1 Verbundes:
root@linux # lilo -b /dev/sdb
|
Achtung: Hierbei wird davon ausgegangen, dass die im RAID-Verbund laufenden Festplatten identisch sind und damit auch die gleichen Geometriedaten besitzen! Ein RAID-0 so zu booten, funktioniert auch mit unterschiedlichen Festplatten, da hierbei nur die erste Festplatte berücksichtigt wird. In diesem Beispiel eines RAID-1 liegen jedoch auf allen RAID-Partitionen die gleichen Daten und somit auch die gleiche /etc/lilo.conf. Haben die Festplatten unterschiedliche Geometriedaten und fällt im RAID-1 die erste Festplatte aus, so stehen im MBR der zweiten Festplatte Daten, welche nicht mit denen der zweiten Festplatte übereinstimmen. Ein Workaround könnte sein, zwei LILO Konfigurationsdateien zu pflegen und mit unterschiedlichen Geometriedaten in den MBR der jeweiligen Festplatten zu schreiben. Da mir aber nur mehrere Exemplare dergleichen Festplatte zum Testen von RAID-Verbunden vorliegen, ist dies ein ungesicherter Tipp.
Der Erfolg ist ein RAID-1 Verbund, den man auch nach einem erneuten Kernelkompilierungslauf durch zweimaliges Aufrufen des LILO mit den Parametern für die unterschiedlichen MBRs von beiden beteiligten RAID-Festplatten booten kann.
LILO direkt vom RAID-1 im MBR oder Superblock
Will man die Root-Partition direkt von einem RAID-1 Verbund booten, bietet sich einem noch die weitaus eleganteste Möglichkeit: Die LILO-Version des aktuellen RPM-Archives lilo-0.21-10.i386.rpm kann bereits von sich aus mit RAID-1 Verbunden umgehen. Andere RAID-Modi werden allerdings nicht unterstützt.
|