Login
Newsletter
Werbung

Mi, 1. September 1999, 00:00

Implementierung von Rootraid (RAID 1)

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)

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.

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.

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

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

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung