Linux kann auf vielfältige Weise gebootet werden. Gerade im Umgang mit zu testenden RAID-Verbunden und spätestens bei dem Versuch das Root-Verzeichnis auf einen RAID-Verbund verlegen zu wollen, stellt sich einem die Frage, ob und wie Linux bei einem Mißerfolg wieder zum sauberen Startup zu bewegen ist. Je nach Zielvorstellung sind dafür unterschiedlich trickreiche Wege zu verfolgen. Diese zahlreichen Möglichkeiten sollen hier erläutert werden. Welche nun speziell für einen beschriebenen RAID-Verbund nötig ist, wird nochmals in den jeweiligen Kapiteln genannt.
Zumindest als Notnagel sollte man sich eine Boot-Diskette mit einem aktuellen Kernel, der am besten noch alle nötigen Festplatten-Treiber und die RAID-Optionen fest einkompiliert hat, in eine sicher Ecke legen.
Den flexibelsten Weg im Umgang mit RAID-Verbunden bietet ein DOS-Bootdiskette.
Benötigt werden hierfür lediglich die DOS Systemdateien, Loadlin, ein
aktueller Linux-Kernel und ein kleiner DOS-Editor. Der nicht zu
unterschätzende Vorteil dieser Lösung liegt darin, daß man die
Konfigurationsdatei von loadlin
ganz simpel an unterschiedliche
Gegebenheiten anpassen kann, um zum Beispiel mal das Booten von einem
RAID-Verbund zu testen. Klappt dies aus irgendeinem Grund nicht, können die
Änderungen an der Startdatei einfach mittels des DOS-Editors wieder rückgängig
gemacht werden.
Eine Linux Bootdiskette sollte jeder echte Linuxer immer haben. Am
einfachsten werden diese über die distributionsspezifischen
Verwaltungsprogramme erstellt. Eine weitere Möglichkeit bietet das Programm
mkbootdisk
. Zum Testen der Bootfähigkeit neuer RAID-Verbunde ist das
ständige Ändern allerdings zu umständlich. Zum Ändern einer auf Basis des
ext2 Dateisystems erstellten Bootdiskette benötigt man nämlich erstmal ein
laufendes Linux-System.
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.
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.
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
boot = /dev/sda
so residiert Ihr LILO im MBR der ersten SCSI-Festplatte, bei der Angabe
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 muß, 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, daß 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, daß 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 bekanntgeben 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!
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:
/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, daß 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:
boot=/dev/hda
image=/boot/vmlinuz
root=/dev/md0
label=linux
Nun muß 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 paßt sie an die neuen Bedingungen an. Die
endgültige /etc/lilo.conf.backup
sollte dann wie folgt aussehen:
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,
daß die Festplatte /dev/hdc
mit 0x80 eingeloggt ist. Der Grund dafür
ist, daß 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
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 muß 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, daß man nach dem Kompilieren eines neuen Kernels das Boot-Verzeichnis der zweiten Festplatte anpaßt und LILO auch mit dem entsprechenden Befehl
lilo -C /etc/lilo.conf.backup
für die zweite
Festplatte ausführt.
Benutzen Sie Linux als einziges Betriebsystem, bietet es sich an, LILO direkt im MBR Ihrer Festplatte unterzubringen.
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.
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:
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, daß 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
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:
fdisk -lu /dev/sda
Desweiteren muß 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
lilo -b /dev/sda
werden die
Informationen der Datei /etc/lilo.conf
in den MBR der ersten
SCSI-Festplatte geschrieben. Anschließend muß man den Befehl ein zweites Mal
aufrufen. Diesmal allerdings für den MBR der zweiten Festplatte des RAID-1
Verbundes:
lilo -b /dev/sdb
Achtung: Hierbei wird davon ausgegangen, daß 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 Tip.
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.
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.
Zu den ersten Methoden muß vorab gesagt werden, daß je nach Distribution bei der Verwendung der Root-Partition als RAID einige Verzeichnisse entweder gar nicht kopiert werden dürfen, oder aber nur als leere Verzeichnisse erstellt werden müssen. Im einzelnen sollte man auf folgende achten:
Dieses Verzeichnis bitte nur als leeres Verzeichnis auf dem RAID-Device erstellen,
da unter /proc
ein Pseudo-Dateisystem erstellt wird, welches im Prinzip
keinen Platz beansprucht - bitte nicht versuchen, /proc
auf eine andere
Partition zu kopieren.
Dieses Verzeichnis oder das, wo Ihr RAID-Device gemountet ist, darf nicht kopiert werden, sonst würden die bereits vorhandenen Daten nochmals überschrieben werden.
Die Daten der CDs selbst möchte man natürlich nicht kopieren. Es sollten daher nur die passenden Mountpoints erstellt werden.
Auch die DOS-Partition, falls eine vorhanden ist, möchte man nicht mit rüberkopieren. Es sollte also nur ein passender Mountpoint erstellt werden.
Das gleiche gilt auch für eine gemountete Diskette.
Als generelle Kopiermethoden bieten sich folgende Möglichkeiten an:
Der normale Copy-Befehl eignet sich für das Kopieren naheliegenderweise sehr gut und funktioniert problemlos.
Auch eine saubere Möglichkeit, Verzeichnisse zu kopieren, bietet das
Programm dd
.
Mittels dump
und restore
läßt sich ohne viel Aufwand z.B. das ganze
Root-Verzeichnis kopieren oder auf Band-Streamer sichern, wobei die unnötigen
Verzeichnisse wie /proc
oder /mnt
fast »automatisch«
ausgelassen werden. Zu diesem Zweck wechselt man in das Verzeichnis, in dem der
neue RAID-Verbund gemountet ist und führt die folgenden Befehle aus, um z.B.
das Verzeichnis /usr
zu kopieren:
dump 0Bf 1000000000 - /usr | restore rf -
rm restoresymtable
Zwar liegt der Midnight Commander zum Kopieren von Verzeichnissen auf ein neues RAID-Array sehr nahe, jedoch haben einige ältere Versionen die bisweilen sehr unangenehme Eigenart, symbolische Links beim Kopieren zu stabilisieren. In den aktuellen Versionen sollte dieses Fehlverhalten jedoch behoben sein.
Ebenso zuverlässig und mit einigen Extraoptionen kann man tar
benutzen, um ganze Verzeichnisstrukturen zu kopieren.
Eine native Möglichkeit unter Linux, ext2-Partitionen zu verändern, die noch
dazu der GPL unterliegt, bietet das Programm ext2resize
, das von
folgender Adresse bezogen werden kann:
http://ext2resize.sourceforge.net/
Da es aber offiziell noch Beta-Status hat, ist beim Umgang mit diesem
Programm Vorsicht geboten.
Seit der Version 4.0 kann Partition Magic auch mit Linux ext2-Partitionen umgehen. Eine Version, die unter Linux selbst lauffähig ist, gibt es allerdings nicht. Das Produkt Partition Magic stammt von der Firma PowerQuest.
Dieses Programm ist eine Auskopplung aus Partition Magic, ist unter Linux lauffähig und ermöglicht das Vergrößern und Verkleinern von ext2-Partitionen. Sollten Sie mal über ein gleichnamiges tar-Archiv stolpern, stellt sich hier jedoch noch die Lizenzfrage. Registrierte Benutzer können sich das RPM-Paket von
http://www.powerquest.com/
herunterladen. Innerhalb der Firma überlegt man aber, diesen
Teil eventuell frei zu geben.