| Implementierung von Rootraid (RAID 1) |
|
|
|
|
Von Diese E-Mail-Adresse ist gegen Spam-Bots geschützt, du musst Javascript aktivieren, damit du sie sehen kannst
Versionsinfo: 25.08.1999 Florian Lödermann: Fehlerbehebung =) RAID Level 1 ist die exakte Spiegelung von zwei Festplatten. Sollte aufgrund eines Hardwareversagens eine der Platten ausfallen, so kommt es zu keinem Datenverlust. Die übrige Platte übernimmt die Aufgaben allein. In diesem Dokument wird die Rootpartition (/) auf einem RAID-Device angelegt und davon gebootet. Zusätzlich zu den zwei Platten, auf die gespiegelt wird, wird noch eine dritte Platte benötigt, die als sogenannte »Spare-Disk« eingerichtet wird. Ihre Aufgabe ist es, im Falle eines Ausfalls den Dienst der ausgefallenen Platte zu ersetzen. Sie wahrt so quasi die Konsistenz des Arrays beim Ausfall. So kann die defekte Platte irgendwann, wenn es die Zeit und die Umstände erlauben, ausgetauscht werden, ohne in der übrigen Zeit auf die Sicherheit des RAID-Arrays verzichten zu müssen. Das spezielle Problem bei einem RAID 1-Array ist, daß es bisher nicht möglich war, ohne weiteres von einem RAID-Device mit lilo oder loadlin zu booten, da beide Programme eigentlich nur von non-mirrored Partitionen booten können. Man nimmt am besten drei gleich große Platten und einen SCSI-Controller. In unserem System setzen wir einen Adaptec 2940U2W, drei IBM 4 GB Platten ein. Um ein Backup des installierten Systems zu machen, empfiehlt sich ein HP 1534 Dat-Streamer. Unser Ansatz basiert auf dem Kernel mit der Version 2.2.10, den man von ftp.de.kernel.org beziehen kann. Desweiteren benötigen wir die neuesten RAID-Tools (0.9 Alpha). Diese sind unter http://www.de.kernel.org/pub/linux/daemons/raid/alpha/ zu erhalten. Außerdem muß noch der Kernel gepatcht werden. Den Patch erhält man unter http://www.de.kernel.org/pub/linux/daemons/raid/alpha/. In unserem Beispiel gehen wir davon aus, daß wir zunächst Linux (SuSE 6.2) auf der ersten Platte installiert haben. Die Partitionierung der ersten Platte muß mit identischen Größen auf die anderen Platten übertragen werden. Als nächstes sollte der Kernel gepatcht werden. Dies geschieht, in dem man den Kernelpatch von kernel.org unter /usr/src/linux oder wo auch immer stellt und mittels patch -p1 < raid0145-19990724-2.2.10 (vorher mit entpacken!) in den bestehenden Kernel integriert. In der Kernelkonfiguration unter »Floppy, IDE and other block devices« werden nun folgende Parameter angewählt: »Multiple devices driver support«, »Autodetect RAID partitions«, »Linear (append) mode«, »RAID-0 (striping) mode«, »RAID-1 (mirroring) mode«, »Translucent mode« und »Boot support (linear, striped)«. Jetzt nur noch den Kernel bauen und installieren. Als nächstes müssen die RAID-Tools installiert werden. Diese einfach mit tar entpacken und dann mit ./configure das Makefile generieren. Einfach durch make compilieren. Mit make install installieren. Unter /etc wird die Datei raidtab angelegt, die wie folgt auszusehen hat.
Die Datei /etc/lilo.conf sollte wie folgt aussehen.
Nun noch mit "lilo" ausführen, um den Bootsektor schonmal vorzubereiten. Als nächstes müssen noch die beiden anderen Platten partitioniert werden. Die Platten sollten der Einfachheit halber alle gleich partitioniert werden. (mkfs.ext2 nicht vergessen =)) Mittels fdisk muss jetzt noch jede RAID-Partition auf Typ fd gesetzt werden. Dieser Typ wird vom Kernel als Teil des RAID-Arrays automatisch erkannt. So erspart man sich das raidstart --all in der Datei /sbin/init.d/boot. Dieses Prozedere muß mit ALLEN Platten durchgeführt werden. Jetzt booten wir das System von der ersten SuSE-CD und starten das Rettungssystem. Sobald der Login-Prompt erscheint, als Root einloggen und mount /dev/sda3 /mnt mkdir /mnt2 mount /dev/sda1 /mnt2 ausführen. Jetzt mit cd /mnt/boot in das Bootverzeichnis wechseln und mittels cp -R /mnt2 /mnt/boot den Kernel kopieren. Nun wird noch die Datei /mnt/etc/fstab geändert. Das Rootdevice soll nunmehr /dev/md0 sein. Ebenfalls müssen die Swappartitionen angepaßt werden. In unserem Beispiel sind das die Partitionen /dev/sda2 und /dev/sdb2 sowie /dev/sdc2. Weiter wird der Eintrag von /boot KOMPLETT gelöscht. Da wir den Kernel verschoben haben, sollten wir nochmals LILO ausführen, da es ansonsten zu Komplikationen kommt: lilo -r /mnt -C /etc/lilo.conf Jetzt wird am besten das Backup für das System erzeugt. Dies geschieht mittels cd /mnt; tar cvf /dev/st0 .. Dieser Schritt ist vonnöten, weil bei der Erstellung des Arrays mit mkraid alle Daten auf der Platte vernichtet werden. Nun wird das ganze System neu gebootet und mit einer geeigneten Rescuedisk von Diskette gestartet (LunetIX Disks z.B.). Der Kernel auf der Bootdisk sollte eigentlich schon erkennen, ob es sich bei den Platten um ein RAID-Array handelt und das Gerät /dev/md0 anlegen. Nun wird mit mkraid --really-force /dev/md0 das Array initialisiert. Als nächstes wird mittels mke2fs /dev/md0 ein Dateisystem auf dem Device erzeugt. Wenn das geschehen ist, mountet man das Array unter /mnt (mkdir /mnt; mount /dev/md0 /mnt). Jetzt wird die Bandsicherung auf das Array zurückgespielt (cd mnt; tar xvf /dev/st0). Sofern das erfolgreich geklappt hat, kann man sich zurücklehnen und das System neu booten. Alles sollte nun nach Plan funktionieren. 5. Was, wenn eine Platte ausfällt? Man merkt, daß eine Platte ausfallen ist, indem man sich die Datei /proc/mdstat anschaut. Ist dort hinter einer der Partitionen des Arrays ein (F), so ist diese Platte womöglich defekt. Auf jeden Fall funktioniert sie nicht mehr im Array. Da das System natürlich durch die Absicherung des Array stabil weiterläuft, braucht man sich eigentlich keine Sorgen machen. Bei nächster Gelegenheit jedoch, sollte das System heruntergefahren werden, um die Platte auszutauschen. Nachdem das System unten ist, wird die Platte getauscht und anschliessend mittels des Adaptec Controller-Menus formatiert (!). Dann wird Linux gebootet und die Platte partitioniert und formatiert. Dabei ist darauf zu achten, daß die Partitionen natürlich wieder genauso aussehen sollen, wie es bei den anderen Platten der Fall ist. Wenn man mittels mkfs.ext2 das Dateisystem erzeugt hat, startet man das System erneut und bootet von der RAID-Rescue-Disk. Als erstes wird nun mittels fdisk die Partition auf Typ fd gesetzt (s.o.). Mit raidstop /dev/md0 muß das Array noch angehalten werden. mkraid --force-resync /dev/md0 /dev/sdb3 leitet die Einbindung der neuen Partition in das Array ein. Sollte das nicht funktionieren, sollte man das force-resync durch really-force ersetzen. Nur noch neu starten und dann wird die Platte vom Kernel automatisch erkannt und ins Array eingebunden. Jetzt passiert auch ggf. noch eine Resynchronisation der Platte mit dem Rest des Arrays. Das war's, die maximale Stabilität der Arrays ist wieder hergestellt. Wenn eine Platte aus dem Array ausfällt, so dauert es ca. 10-15 Sekunden, bis dies erkannt und überbrückt wird. Das Array läuft normal weiter und es wird ein Eintrag im Syslog vorgenommen. Da wir noch nicht genau wußten, wie wir die Sparedisk einbinden, haben wir einfach mal mittels raidhotadd /dev/md0 <partition> eine Partition ins Array eingefügt, woraufhin die Synchronisation begann. |
||||||
| < Zurück | Weiter > |
|---|



