SelfLinux Systemverwaltung Linux Software-RAID HOWTO Abschnitt 4 | SelfLinux-0.13.0

| Linux Software-RAID HOWTO | Autor Formatierung GPL

#### 4 Generelles zum Umgang mit Linux

#### 4.1 Möglichkeiten des Bootens von Linux

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 Misserfolg 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.

#### 4.1.1 Linux von der Festplatte booten

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.

#### 4.2 Möglichkeiten zum Kopieren von Daten

Zu den ersten Methoden muss vorab gesagt werden, dass 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:

proc

> 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.

mnt

> Dieses Verzeichnis oder das, wo Ihr RAID-Device gemountet ist, darf nicht kopiert werden, sonst würden die bereits vorhandenen Daten nochmals überschrieben werden.

cdrom

> Die Daten der CDs selbst möchte man natürlich nicht kopieren. Es sollten daher nur die passenden Mountpoints erstellt werden.

dos

> Auch die DOS-Partition, falls eine vorhanden ist, möchte man nicht mit rüberkopieren. Es sollte also nur ein passender Mountpoint erstellt werden.

floppy

> Das gleiche gilt auch für eine gemountete Diskette.

Als generelle Kopiermethoden bieten sich folgende Möglichkeiten an:

cp

> Der normale Copy-Befehl eignet sich für das Kopieren Naheliegenderweise sehr gut und funktioniert problemlos.

dd

> Auch eine saubere Möglichkeit, Verzeichnisse zu kopieren, bietet das Programm dd.

dump und restore

> Mittels dump und restore lässt 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:

root@linux ~# dump 0Bf 1000000000 - /usr | restore rf - root@linux ~# rm restoresymtable

Midnight Commander

> 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.

tar

> Ebenso zuverlässig und mit einigen Extraoptionen kann man tar benutzen, um ganze Verzeichnisstrukturen zu kopieren.

#### 4.3 Möglichkeiten zum Verändern ganzer Partitionen

ext2resize

> 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.

Partition Magic

> 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.

resize2fs

> 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.