Software-RAID Level 1 (Mirror)

Dieses Howto beschäftigt sich mit der Einrichtung eines Software-RAID Level 1 (Mirror) unter Linux.
Als Distribution kommt hier Slackware Linux 11.0 mit einem 2.4.er-Kernel zum Einsatz.
In diesem Howto setze ich voraus:
Kenntnisse in der Benutzung der bash, cfdisk/fdisk und wie ein Texteditor funktioniert. Außerdem ist es ganz Hilfreich den Befehl ‚man <Programm/Datei>‘ zu kennen. Sollten Sie hier schon an Ihre Grenze stoßen:
Lassen Sie es!

Vorbereitung und Durchführung

1. Benötigte Hardware
Das Einrichten eines SoftWareRAID Level 1 benötigt mindestens 2 möglichst identische Festplatten, üblicherweise finden sich hier IDE (ATA)-Platten, mittlerweile sind auch SATA-Platten fast üblich.

Diese sollten aus Performancegründen möglichst an verschiedenen IDE-Strängen hängen, weil Software-RAID ziemlich CPU-lastig ist. Bei den derzeitigen CPU-Leistungen
ist ein Unterschied subjektiv allerdings fast nicht feststellbar.

2. Start
Installations-CD starten. Als Kernelimage verwende ich den bareacpi.i, die anderen Verfügbaren Standardkernel solltens aber auch tun, z.B. bare.i o.ä.

Wie gewohnt mit cfdisk/fdisk die Platte hda oder hdb partitionieren. Ich persönlich habe
mich entschieden die Installation auf hdb (80 GB) mit ext3 als Dateisystem durchzuführen.

Meine Partitionierung sieht so aus:

/dev/hdb1 /boot ext3 40 MB
/dev/hdb2 swap 512 MB
/dev/hdb3 / ext3 12288 MB
/dev/hdb4 /home ext3 Rest

Dazu starte ich: cfdisk /dev/hdb, als Filesystemtypen lege ich für hdb2 swap (82) und hdb1,3+4 ext3 (83) fest.

hda lasse ich noch unangetastet, das hole ich später nach.

Hier starte ich nun das Setup wie gewohnt. Als Installationsmethode habe ich ‚full‘ ausgewählt, weil ich faul bin und gerne alles auf Platte haben will.

Das kann jetzt ganz Normal bis zum Ende durchlaufen.

3. Der erste Start des frischen Linux
Bevor ich nun mein Linux das erste mal starte muß ich meinen Bootloader, hier kommt LILO zum Einsatz, konfigurieren.

Als Methode wähle ich Expert, generiere eine frische lilo.conf, lege den Installationsort des LILO fest (den einer Diskette boot = /dev/fd0)und verrate dem Loader noch, wo sich meine Root-Partition (root = /dev/hdb3) versteckt. Nun kann LILO installiert werden.

Jetzt kann das System zum ersten Mal von Diskette gestartet werden.

4. Vorbereitung der ersten RAID-Platte
Nun bereite ich mit cfdisk hda für den RAID-Betrieb vor. Dazu wird die Platte von der Größe und Lage der Partitionen identisch zu hdb partitioniert. Als Filesystemtypen lege ich wieder auf hda2 swap (82) an, hda1,3+4 bekommen den Typen FD verpasst (Linux RAID autodetect).

Nun ist es an der Zeit die RAID-Devices zu erstellen:

(Langform)
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/hda1 missing
mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/hda3 missing
mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/hda4 missing

(Kurzform)
mdadm -C -v /dev/md0 -l1 -n2 /dev/hda1 missing
mdadm -C -v /dev/md1 -l1 -n2 /dev/hda3 missing
mdadm -C -v /dev/md2 -l1 -n2 /dev/hda4 missing

Formatieren:
mke2fs -j -c -i 4096 /dev/md0
mke2fs -j -c -i 4096 /dev/md1
mke2fs -j -c -i 4096 /dev/md2

Mountpoints erstellen:
mkdir -pv /mnt/boot
mkdir -pv /mnt/root
mkdir -pv /mnt/home

Mounten der RAID-Partitionen:
mount /dev/md0 /mnt/boot
mount /dev/md1 /mnt/root
mount /dev/md2 /mnt/home

Kopieren der Dateien und Verzeichnisse:
cp -av /boot/* /mnt/boot
cp -av /home/* /mnt/home
cp -av /bin /mnt/root
cp -av /dev /mnt/root
cp -av /etc /mnt/root
...

usw.

Der Schalter -v lässt sich auch prima entfernen, ich persönlich sehe
nur gerne den Fortschritt der Aufgabe.

Lediglich /proc und /mnt dürfen nicht kopiert werden.
Dafür erstelle ich jetzt Mountpoints:
mkdir -pv /mnt/root/boot
mkdir -pv /mnt/root/home
mkdir -pv /mnt/root/mnt
mkdir -pv /mnt/root/proc

Nicht vergessen: in /mnt sind auch die Mountpoints für z.B. CD-ROM, Floppy, Brenner o.ä. angelegt. Diese bitte auch unter /mnt/root/mnt anlegen, sonst gibts hinterher beim mounten dieser Medien Probleme!

5. Vorbereitungen zum Start des RAID-Systems
Jetzt werden md0 und md2 aus- und anschließend in /mnt/root/boot bzw. /mnt/root/home wieder eingehängt:
umount /dev/md0
umount /dev/md2
mount /dev/md0 /mnt/root/boot
mount /dev/md2 /mnt/root/home

An dieser Stelle muß nun die /mnt/root/etc/fstab sowie die /mnt/root/etc/lilo.conf angepasst werden.

In der fstab kommt ein zweiter Eintrag für die Swap-Partition hinzu, dort wird nur das Device noch angepasst, so das dort /dev/hda2 und /dev/hdb2 als Swap gemountet wird.

Geändert werden auch: /dev/hdb1 auf /dev/md0, /dev/hdb3 auf /dev/md1 sowie /dev/hdb4 auf /dev/md2

Jetzt folgt die lilo.conf

Hier wird nur der Installationsort des LILO (boot=/dev/fd0 auf boot=/dev/hda) und das Root-Device von root=/dev/hdb3 auf /dev/md1 geändert.

Jetzt wird der Bootloader mit folgendem Kommando installiert:

/sbin/lilo -r mnt/root/

Mit dem Schalter -r und dem dahintergehängten Pfad wird LILO auf das erstelle RAID gechrootet.

Abschließend erstelle ich noch die Datei /etc/mdadm.conf, hier wird die Konfiguration des RAID abgelegt.

Dazu führe ich zunächst folgenden Befehl aus:

mdadm --detail --scan >/mnt/root/etc/mdadm.conf

Nun sieht der Inhalt der /mnt/root/etc/mdadm.conf wie folgt aus:
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=18dcfcc5:11163f99:bf189bb0:8d9ae6d8
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=157cd53c:8da51ce0:b030a423:e926f67a
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=5b4a1c48:09dba8fb:4a0a5e7e:162c15ba

Diesen Inhalt ergänze ich nun noch:
DEVICE /dev/hda1 /dev/hdb1
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=5b4a1c48:09dba8fb:4a0a5e7e:162c15ba devices=/dev/hda1,/dev/hdb1
DEVICE /dev/hda3 /dev/hdb3
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=157cd53c:8da51ce0:b030a423:e926f67a devices=/dev/hda3,/dev/hdb3
DEVICE /dev/hda4 /dev/hdb4
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=18dcfcc5:11163f99:bf189bb0:8d9ae6d8 devices=/dev/hda4,/dev/hdb4
MAILADDR root@localhost

Die letzte Zeile habe ich gesetzt, weil mein System mich im Fehlerfall per eMail informieren soll, dazu ist allerdings noch ein weiterer Schritt notwendig.

Dazu muß mdadm im Monitormodus mitlaufen, das erreiche ich durch einen Eintrag in der /mnt/root/etc/rc.d/rc.local:

/sbin/mdadm --follow --scan & echo $! >/var/run/mdadm

Nun sind alles Schritte soweit abgeschlossen.

Nun noch das RAID aushängen

umount /dev/md0
umount /dev/md2
umount /dev/md1

und neu booten.

6. Start des RAID
Jetzt sollte das RAID gebootet werden. Wenn soweit alles funktioniert und keine Fehler auftreten (Achtung: besser länger, also über einige Tage, testen) kann nun die 2. Platte in das RAID aufgenommen werden.

Achtung! Durch den Start von mdadm im Monitormodus bekommt root jetzt 3 Mails die auf den Ausfall von /dev/hdb1, /dev/hdb3 und /dev/hdb4 hinweisen. Das ist zu diesem Zeitpunkt völlig normal und bietet eine gute Kontrolle über die Funktion des Monitors.

Mittels cfdisk werden nun der Typ von hdb1,3+4 auf Linux RAID autodetect (FD) geändert.

Durch
mdadm --manage /dev/md0 --add /dev/hdb1
mdadm --manage /dev/md1 --add /dev/hdb3
mdadm --manage /dev/md2 --add /dev/hdb4

füge ich nun die Platte zum RAID hinzu.

Mit Eingabe von

watch cat /proc/mdstat

kann nun der Fortschritt bei der Einbindung in das RAID beobachtet werden.

Nach Abschluß sollte aus Redundanzgründen der LILO auch auf hdb installiert werden, einfach in der /etc/lilo.conf den Eintrag boot=/dev/hda auf boot=/dev/hdb ändern und /sbin/lilo ausführen. Sollte nun hda versagen kann durch Auswahl im BIOS das Bootdevice auf die zweite Festplatte geändert werden und das System startet wieder.
Eine Ersatzplatte kann nun integriert werden. (Partitionieren, formatieren, mittels raidhotadd einbinden.

Swap-Tuning:

Wenn man bei den Optionen der Swaps noch ein „,pri=1“ (ohne die „“) ergänzt nutzt das System beide Swaps syncron. Das verbessert u.U. die Performance. Wenn man die  Swaps ans Ende der Platten verlegt steigert auch das u.U. nochmals die Performance.

Copyleft BtU 2007,2008,2009,2010
Ich übernehme keine Garantien für Vollständigkeit oder Fehler!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Wordpress Anti-Spam durch WP-SpamShield