Software-RAID dient zur besseren Sicherheit der Daten auf dem Server. RAID kann in verschiedenen Modi betrieben werden. Der Modus, der weiter unten eingerichtet wird, heißt RAID-1. Dabei befinden sich im Server zwei Festplatten annähernd gleicher Kapazität. Der Software-RAID-Treiber von Linux sorgt dann dafür, dass sich auf beiden Festplatten exakt der gleiche Inhalt befindet. Die Festplatten werden sozusagen gespiegelt. Fällt eine Festplatte aus, so ist die andere immer noch voll funktionsfähig.
Die Anleitung weiter unten beschreibt, wie ein vorhandenes Linux-System nachträglich in ein RAID-1-System umgewandelt werden kann. Bei modernen Linux-Distributionen kann man möglicherweise schon bei der Installation Software-RAID einrichten; dann kann dieser Abschnitt komplett übersprungen werden.
Um Software-RAID einzurichten, werden zunächst einmal die raidtools in der Version 0.9 oder höher benötigt; ob die raidtools bereits installiert sind, lässt sich mit mkraid -V herausfinden. Das passende Debian-Packet zum Nachinstallieren heißt raidtools2. Dann muss sehr wahrscheinlich noch ein neuer Kernel der Version 2.4.x gemacht werden; dieser Vorgang ist genauer in Abschnitt 3.2 beschrieben.
Natürlich werden auch zwei Festplatten benötigt, die ungefähr die gleiche Größe haben sollten. Diese sind - sofern IDE-Festplatten - idealerweise jeweils als Master angeschlossen und als /dev/hda und /dev/hdc ansprechbar.
Die Ausgangssituation ist folgende: Auf der ersten Festplatte (/dev/hda) ist bereits ein Linux-System installiert. Dabei ist es nicht wichtig, dass es konfiguriert ist, denn das lässt sich später noch genau so gut konfigurieren. Es ist sogar eher noch besser, wenn Software-RAID vor der eigentlichen Konfiguration des Systems eingerichtet wird. Die Anleitung bezieht sich auf die Linux-Installation, die weiter oben beschrieben ist.
Alle folgenden Schritte werden als Superuser (root) durchgeführt.
Zuerst muss ein frischer Kernel gemacht werden. Dabei sind folgende Einstellungen zu machen:
"Multi-device support (RAID and LVM)" [y] Multiple devices driver support (RAID and LVM) [y] RAID support [y] RAID-1 (mirroring) modeWichtig ist hier, dass der RAID-Treiber fest im Kernel ist und keine Module erstellt werden.
Eine genaue Anleitung für die Erstellung und Installation des neuen Kernels ist in Abschnitt 3.2 beschrieben.
Jetzt muss der neue Kernel getestet werden, d.h. es muss mit dem neuen Kernel gebootet werden. Wenn alles soweit funktioniert hat, kann mit dem nächsten Schritt weitergemacht werden. Übrigens: Der Kernel kann auch später nochmal aktualisiert werden; spezielle Hardware kann also später eingerichtet werden.
Nach dem Neustart kann mit cat /proc/mdstat überprüft werden, ob der neue Kernel auch tatsächlich RAID unterstützt. Dabei sollte in der ersten Zeile folgendes erscheinen:
Personalities : [raid1]
Als nächstes muss die zweite Festplatte so wie die erste Festplatte partitioniert werden. Dabei dürfen die Partitionen auf der zweiten Festplatte auf keinen Fall größer sein als die Partitionen auf der ersten Festplatte. Sie müssen entweder gleich groß oder kleiner sein.
Die Partitionierung kann z.B. mit dem Programm cfdisk vorgenommen werden. Am besten speichert man die Partitionstabelle der ersten Festplatte mit cfdisk -P t /dev/hda > hda-table in die Datei hda-table. Das sieht dann so aus:
Partition Table for /dev/hda ---Starting--- ----Ending---- Start Number of # Flags Head Sect Cyl ID Head Sect Cyl Sector Sectors -- ----- ---- ---- ---- ---- ---- ---- ---- --------- --------- 1 0x80 1 1 0 0x83 15 63 1023 63 135742257 2 0x00 15 63 1023 0x83 15 63 1023 135742320 19531008 3 0x00 15 63 1023 0x82 15 63 1023 155273328 1028160 4 0x00 0 0 0 0x00 0 0 0 0 0Wichtig sind die zwei letzten Spalten (Start Sector und Number of Sectors). Mit cfdisk /dev/hdc wird die zweite Festplatte partitioniert; es müssen genau die gleichen Partitionen erstellt werden. Das geht am einfachsten über die Sektor-Anzahl. Wenn das Programm nach der Größe fragt, einfach 12345S eingeben, also die Anzahl der Sektoren mit angehängtem S. Zum Schluss müssen die Partitionstabellen der beiden Festplatten nocheinmal verglichen werden, damit auch kein Fehler unterlief; also: Partitionstabelle der zweiten Festplatte wie oben in eine Datei speichern.
Hier sollte dann auch auf der zweiten Festplatte gleich das Bootflag gesetzt werden (auf /dev/hda1). Außerdem müssen alle Partitionen außer der swap-Partition den Partitionstyp fd (Linux raid autodetect) haben.
Jetzt muss die Konfigurationsdatei für den Software-RAID-Treiber geschrieben werden. Diese steht in /etc/raidtab. Im Moment ist dabei die erste Festplatte (/dev/hda) als fehlerhaft zu markieren.
# # /etc/raidtab # # /dev/md0 ist die root-Partition raiddev /dev/md0 raid-level 1 # RAID-1 (mirroring) nr-raid-disks 2 nr-spare-disks 0 persistent-superblock 1 chunk-size 32 device /dev/hdc1 raid-disk 0 # dies ist die erste Festplatte, die hier zunächst als fehlerhaft # markiert ist device /dev/hda1 failed-disk 1 # /dev/md1 ist die var-Partition raiddev /dev/md1 raid-level 1 # RAID-1 (mirroring) nr-raid-disks 2 nr-spare-disks 0 persistent-superblock 1 chunk-size 32 device /dev/hdc2 raid-disk 0 # die erste Festplatte ist hier genauso als fehlerhaft markiert device /dev/hda2 failed-disk 1
Danach können die raid-Geräte gemacht werden:
bash# mkraid /dev/md0 bash# mkraid /dev/md1Mit cat /proc/mdstat kann nachgeschaut werden, ob die Geräte registriert sind. Die erste Festplatte ist hier als fehlerhaft eingetragen.
Anschließend können die raid-Geräte formatiert und gemountet werden. Da die erste Festplatte ja als fehlerhaft markiert ist, wird sie nicht formatiert, sondern nur die zweite Festplatte. Die Daten auf der ersten Festplatte bleiben also vorhanden.
Das Formatieren funktioniert so:
bash# mkreiserfs /dev/md0 bash# mkreiserfs /dev/md1
Für das Mounten der Dateisysteme müssen folgende Befehle ausgeführt werden:
bash# mount /dev/md0 /mnt bash# mkdir /mnt/var bash# mount /dev/md1 /mnt/var
Jetzt können die Dateien der ersten Festplatte auf die zweite Festplatte kopiert werden. Das geht ganz einfach mit folgenden Befehlen:
bash# cd / bash# find . -xdev -name "*" -o -name ".*" | cpio -pmv /mnt bash# cd /var bash# find . -xdev -name "*" -o -name ".*" | cpio -pmv /mnt/var
Danach muss wieder getestet werden. Wir aktualisieren dafür zuerst folgende Datei:
# # /mnt/etc/fstab # /dev/md0 / reiserfs defaults 0 0 /dev/md1 /var reiserfs defaults 0 0 [...]Wir ersetzen also /dev/hda1 mit /dev/md0 und /dev/hda2 mit /dev/md1.
Beim nächsten Start mit dem neu eingerichteten RAID werden so die raid-Geräte automatisch verwendet.
Nun muss noch eine Bootdiskette erstellt werden. Dazu wird eine leere, formatierte und fehlerfreie Diskette benötigt. Die Diskette in Laufwerk A: einlegen und folgende Befehle ausführen:
bash# dd if=/boot/vmlinuz-2.4.21 of=/dev/fd0 bs=18k bash# rdev /dev/fd0 /dev/md0 bash# rdev -r /dev/fd0 0 bash# rdev -R /dev/fd0 1Auf der so erstellten Bootdiskette ist der neue Kernel mit Software-RAID-Unterstützung (/boot/vmlinuz-2.4.21 ist das Kernel-Image). Diese Bootdiskette kann später vielleicht mal sehr wichtig werden, z.B. wenn der Server aus irgendeinem Grund nicht mehr von der Festplatte booten kann. Deshalb sollte die Bootdiskette gut aufbewahrt werden und bei jedem Kernel-Update auch aktualisiert werden.
Jetzt kann der Server neu gestartet werden. Dazu müssen aber erst die raid-Geräte gestoppt werden:
bash# umount /mnt/var bash# umount /mnt bash# raidstop /dev/md0 bash# raidstop /dev/md1Wenn die Bootdiskette eingelegt wurde, kann mit shutdown -r now der Server neu gestartet werden.
Nach dem Neustart muss geprüft werden, ob alle Daten auf die zweite Festplatte kopiert wurden. Wenn der Server ohne Probleme neugestartet ist, sollte dies der Fall sein. Wenn nicht, kann der Server immer noch ohne Diskette von der ersten Festplatte gestartet werden. Dann müssen wie in Punkt 7 beschrieben die raid-Geräte wieder gemountet werden, damit eventuell vergessene Dateien kopiert werden können.
Wir haben von der Diskette gebootet. Jetzt muss die erste Festplatte, die im Moment ja noch als fehlerhaft markiert ist, dem raid-Array hinzugefügt werden. Dabei gehen alle Daten auf dieser Festplatte verloren!
Als erstes müssen mit cfdisk /dev/hda die Partitionstypen der Partitionen auf der ersten Festplatte zu fd (Linux raid autodetect) geändert werden (die swap-Partition bleibt swap). Auch das Bootflag sollte nochmal frisch auf /dev/hda1 gesetzt werden.
Dann muss in der Datei /etc/raidtab zweimal failed-disk durch raid-disk ersetzt werden.
Und schließlich wird mit folgenden Befehlen die erste Festplatte dem raid-Array hinzugefügt:
bash# raidhotadd /dev/md1 /dev/hda2 bash# raidhotadd /dev/md0 /dev/hda1Mit cat /proc/mdstat kann der Fortschritt der Synchronisation angezeigt werden.
Während der Synchronisationsvorgang noch läuft, kann das System schon bootfähig gemacht werden. Dazu muss /etc/lilo.conf editiert werden. Die Datei sieht dann so aus:
# # /etc/lilo.conf # boot=/dev/md0 raid-extra-boot=/dev/hda,/dev/hdc read-only prompt timeout=50 root=/dev/md0 image=/boot/vmlinuz-2.4.21 label=LinuxJetzt muss noch lilo auf beiden Festplatten installiert werden. Dies geschieht einfach durch Aufruf von lilo.
Schließlich muss noch die swap-Partition auf der zweiten Festplatte eingerichtet werden. Dazu muss /etc/fstab verändert werden:
# # /etc/fstab # [...] /dev/hda2 none swap sw,pri=1 0 0 /dev/hdc2 none swap sw,pri=1 0 0Außerdem muss die swap-Partition noch mit mkswap /dev/hdc2 formatiert werden. Beim nächsten Neustart sind dann beide swap-Partitionen aktiviert.
Wenn der Synchronisationsvorgang beendet ist, kann neu gestartet werden, um die Installation zu testen.
Falls das Booten von der Festplatte nicht funktioniert, kann immer noch auf die Bootdiskette zurückgegriffen werden.
Fällt einmal tatsächlich eine Festplatte aus, muss diese ersetzt werden. Im Folgenden wird angenommen, dass die erste Festplatte (/dev/hda) ausfällt. Die einzelnen Schritte sind dann wie folgt:
Erst muss der Server heruntergefahren werden, wenn er noch läuft.
Dann kann die defekte Festplatte ausgetauscht werden.
Jetzt muss gebootet werden. Wenn der Server nicht automatisch von der zweiten (intakten) Festplatte bootet, muss eine Bootdiskette verwendet werden (siehe voriger Abschnitt, Punkt 10).
Die neue Festplatte muss nun partitioniert werden.
Mit dem Befehl raidhotadd den Synchronisationsvorgang starten:
bash# raidhotadd /dev/md1 /dev/hda2 bash# raidhotadd /dev/md0 /dev/hda1
Mit lilo lilo neu installieren.
Nach dem Synchronisationsvorgang kann von der Festplatte neu gebootet werden.
Zurück | Zum Anfang | Weiter |
Kernel machen | Nach oben | APC SmartUPS (USV) |