Software Raid unter Debian
In diesem kleinen Howto möchte ich zeigen, wie man auf einem Linux Server (hier Debian 4.0) ein Software Raid aufbaut. Dabei soll die Datensicherheit im Vordergrund stehen. Es soll die Root-, die Swap und eine Datenpartition gespiegelt werden.
Die Umgebung sieht also wie folgt aus:

/ /dev/hda1
/var/data  /dev/hda5
swap /dev/hda6

Außerdem existiert eine zweite HDD die noch nicht partitioniert ist.

Damit die zweite (leere) Festplatte die gleichen Partitionen enthält, wie die erste, kopieren wir die Partitionstabelle von Platte 1 auf 2 und setzen gleichzeitig den Partitionstyp auf „fd“ (Linux raid autodetect)

sfdisk -d /dev/hda | sed -e 's/=8[23]/=fd/g' | sfdisk /dev/hdb

Nun haben wir zwei vollkommen identisch partitionierte Festplatten und können mit dem Aufbau des Software-Raids anfangen. Sollte mdadm noch installiert sein, kann man es mit
apt-get install mdadm
installieren.

Fangen wir an das Raid-Array für die Root Partition zu erstellen. Bei einem Ausfall einer Platte, müsste man das Betriebssystem damit nicht neu zu installieren.

Dazu nehmen wir zunächst das leer Pendant (hdb1) zur Root-Partition der ersten Platte und fügen es dem Array hinzu.
mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/hdb1

Dann wird md0 formatiert.
mkfs.ext3 /dev/md0

Damit im nächsten Schritt von md0 gebootet werden kann müssen sämtliche Daten von hda1 nach md0 kopiert werden. Dazu wird md0 gemountet und die Daten kopiert.

mount /dev/md0 /mnt

cp --no-dereference --preserve --recursive --one-file-system / /mnt

Die Mountpoints müssen noch angepasst werden. Dazu nehmen wir die Datei /mnt/etc/fstab und ersetzen hda1 durch md0. Das sollte dann so aussehen.
/dev/md0        /            ext3    defaults,errors=remount-ro 0       1

Nun muss noch ein Eintrag im Grub Boot Menü erstellt werden. Dazu wird die /boot/grub/menu.lst wie folgt editiert.


title           Debian GNU/Linux, kernel 2.6.18-4-686
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.18-4-686 root=/dev/hda1 ro
initrd          /boot/initrd.img-2.6.18-4-686
savedefault

title           Debian GNU/Linux, kernel 2.6.18-4-686 RAID
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.18-4-686 root=/dev/md0 ro
initrd          /boot/initrd.img-2.6.18-4-686
savedefault

title           Debian GNU/Linux, kernel 2.6.18-4-686 (single-user mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.18-4-686 root=/dev/hda1 ro single
initrd          /boot/initrd.img-2.6.18-4-686
savedefault

# You can specify 'saved' instead of a number. In this case, the default …
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or …
# array will desync and will not let you boot your system.

default         1


 
Jetzt wird der Rechner neugestartet und bootet zum ersten mal vom Raid-Array md0.

Da hda1 ab jetzt nicht mehr eingehängt ist, fügen wir hda1 dem md0 hinzu.
mdadm --add /dev/md3 /dev/hda3

Man kann des Status des Resynch mit
cat /proc/mdstat
überwachen.

Ist dieser Vorgang abgeschlossen, übertragen wir die vorgenommenen Einstellungen noch in die /etc/mdadm/mdadm.conf

mdadm --brief --detail --verbose /dev/md3 >> /etc/mdadm/mdadm.conf

Damit beim Ausfall der zweiten Platte auch der Grub Bootloader geladen werden kann, muss dieser noch auf dieser installierte werden. Man gibt also folgendes nacheinander ein.
grub
device (hd0) /dev/hdb
root (hd0,0)
setup (hd0)
quit


Bei PATA Festplatten stellt sich natürlich das Problem, dass bei Ausfall der Master Festplatte die Slave nach einem Reboot nicht geladen wird. Hier ist die Jumperbelegung anzupassen.