Menu Content/Inhalt
Home arrow Tipps und Tricks arrow Netzwerk arrow Implementierung von Rootraid (RAID 1)

Login






Passwort vergessen?
Noch kein Benutzerkonto?
Registrieren
Implementierung von Rootraid (RAID 1) PDF Drucken E-Mail

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 =)
30.07.1999 Florian Lödermann: Detailkorrekturen am Bootkonzept
27.07.1999 Florian Lödermann: Korrekturen am Konzept
26.07.1999 Florian Lödermann: Detailkorrekturen
23.07.1999 Florian Lödermann: Korrektur von Rechtschreibfehlern
22.07.1999 Florian Lödermann: basierend auf einer Lösung von Ralf Hemman (LunetIX)

1. Einleitung

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.

2. Hardwareanforderungen

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.

3. Softwareanforderungen

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

4. Einrichtung

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.


# Beispiel Raidkonfiguration mit einer Sparedisk.
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 1
chunk-size 4
device /dev/sda3
raid-disk 0
device /dev/sdb3
raid-disk 1
device /dev/sdc3
spare-disk 0

Die Datei /etc/lilo.conf sollte wie folgt aussehen.


boot = /dev/sda
linear
vga = normal
read-only
prompt
timeout = 100
image = /boot/vmlinuz
root = /dev/md0
label = linux
append = "md=0,1,4,0,/dev/sda3,/dev/sdb3"

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.

6. Erfahrungen mit dem Array

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 >

Scroll-news

Mailingliste:
http://mlists.in-berlin.de/mailman/listinfo/lieo-mlists.in-berlin.de 

 

Das Forum ist online gegangen

 


Who's Online

Aktuell 18 Gäste online

Google AdSense