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 Betriebsystem 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 Betriebsystem, bietet es sich
an, LILO direkt im MBR
Ihrer Festplatte unterzubringen.
LILO im Superblock mit externem Bootmanager
Um auch Betriebsysteme 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.
|