Problem:
Bei einigen Anbietern (hier speziell Hetzner genannt) werden zwar Systeme mit RAID angeboten aber mit bestimmten vorinstallierbaren Images (bei Hetzner z.B. das "Debian-4-Minimal") nicht genutzt.
Wer dies zu spät erkennt, findet hier nun eine Anleitung, wie er ein RAID-Array nachträglich einrichtet ohne die Daten der bisherigen Installation zu verlieren.
Vorbereitung:
Als erstes switchen wir dazu in den Rescue-Modus. Die ersten paar Schritte können z.B. bei Hetzner übersprungen werden da die Partitionen bereits auf beiden Platten Identisch eingerichtet sind. Ich beschreibe es hier dennoch von Anfang an und einheitlich.
Desweiteren sind hier jeweils die Devices /dev/sda
und /dev/sdb
genannt. Wer keine SATA-/SCSI-Platten hat, wird wohl eher /dev/hda
und /dev/hdb
ansprechen müssen.
Aber Achtung mit der Nummerierung: die MD-Devices werden von 0 ab durchnummeriert. Wir erhalten hier also aus /dev/sda1
die /dev/md0
und aus /dev/sda2
die /dev/md1
Wie gesagt gehe ich von Hetzner's Konfiguration aus. D.h. /dev/sda1
ist die Swap-Partition und /dev/sda2
die einzige Root-Partition. Wer es noch umpartitionieren will, sollte dies jetzt noch im Rescue-Modus per parted
tun.
Installiert wird ein RAID-1. Denn für ein RAID-0 müsste man vollständig neu anfangen bzw. mit den Partitionen geschickt jonglieren.
Zweite Platte vorbereiten
#kopiere die Partitionstabelle von sda auf sdb sfdisk -d /dev/sda | sfdisk /dev/sdb fdisk /dev/sdb #setze alle Partitionstypen auf "Linux raid autodetect" (=fd): # [t] [1] fd [return] # [t] [2] fd [return] # [w]
Nun erstellen wir darauf bereits das Software-RAID wobei wir hier die erste Platte noch nicht mit einbinden, da sie sonst gelöscht werden würde:
mdadm -C /dev/md0 -l 1 -n 2 missing /dev/sdb1 mdadm -C /dev/md1 -l 1 -n 2 missing /dev/sdb2 #File-Systeme erstellen mkswap /dev/md0 mkfs.ext3 /dev/md1
Daten kopieren
Nun mounten wir die erste Platte und das neu erstellte RAID:
mkdir /mnt/root mount /dev/sda2 /mnt/root mkdir /mnt/raid mount /dev/md1 /mnt/raid
Wir ändern schon mal die nötigen Dateien um dem zu bootendem System das RAID an die Hand zu legen. Dabei werden in der fstab
und mtab
die Einträge zu /dev/sda2
in /dev/md1
verändert:
#Die MD-Devices bekannt machen: mdadm --examine --scan >> /mnt/root/etc/mdadm/mdadm.conf #fstab backup und bearbeiten cp -p /mnt/root/etc/fstab /mnt/root/etc/fstab.orig vim /mnt/root/etc/fstab #mtab backup und bearbeiten cp -p /mnt/root/etc/mtab /mnt/root/etc/mtab.orig vim /mnt/root/etc/mtab
Nun folgt das Kopieren des vorhandenen Systems in das RAID mit anschließendem unmount
.
cp -dpRx /mnt/root/. /mnt/raid #unmount umount /mnt/raid umount /mnt/root
RAID vervollständigen
Nun binden wir /dev/hda
in das RAID mit ein. Hierbei werden die Daten darauf gelöscht und von /dev/md*
neu beschrieben.
mdadm --add /dev/md0 /dev/sda1 mdadm --add /dev/md1 /dev/sda2 #beobachten bis fertig (kann 2-3 Stunden dauern): watch -n 5 cat /proc/mdstat
Boot-Loader aktualisieren
Um den Bootloader zu aktualisieren richten wir uns eine Chroot-Umgebung mit dem RAID-Array als Root ein:
mount /dev/md1 /mnt/raid mount --bind /dev /mnt/raid/dev mount --bind /proc /mnt/raid/proc cd /mnt/raid chroot /mnt/raid/
Lilo:
Eine Debian std. Installation beinhaltet derzeit LILO.
Dazu brauchen wir lediglich einen Eintrag in der /etc/lilo.conf
zu ändern:
root=/dev/md1
Ein anschließender Aufruf von /sbin/lilo -v
schreibt den MBR.
Grub:
Wer bereits GRUB installiert hat, braucht etwas mehr:
In /boot/grub/menu.lst
muß die kopt
angepasst werden:
# kopt=root=/dev/md1 ro
Anschließend kommen die üblichen Programme zum Zuge:
#kopt übernehmen: update-grub #den RAID-Treiber inkl. Device-Einstellungen in die initiale RamDisk mit aufnehmen update-initramfs -u #MBR sicherheitshalber auf beide Platten schreiben: grub
Eingabe in der Grub-Shell:
root (hd0,1) setup (hd0) root (hd1,1) setup (hd1) quit
Fertig
Zu guter Letzt verlassen wir den Chroot und rebooten die Maschine:
exit
umount /mnt/raid
reboot
Probleme
Wenn er nicht bootet, heißt dies, das wir irgendwas am Boot-Loader vermasselt haben. Nicht weiter schlimm, da man jederzeit im Rescue-Modus dies wieder beheben kann: Einfach wieder in die Chroot und evtl. nachbessern.
GRUB hat mir dabei einige Probleme bereitet. Ich denke es war der o.g. manuelle Aufruf zum schreiben des MBR.
Falls nicht, habe ich zusätzlich in der /boot/grub/menu.lst
folgende Änderungen hinzugefügt:
((hd0,1)
ist in dem Fall die /dev/md1
)
title Xen 3.0.3-1-amd64 / Debian GNU/Linux, kernel 2.6.18-6-xen-amd64 root (hd0,1) kernel (hd0,1)/boot/xen-3.0.3-1-amd64.gz module (hd0,1)/boot/vmlinuz-2.6.18-6-xen-amd64 root=/dev/md1 ro console=tty0 module (hd0,1)/boot/initrd.img-2.6.18-6-xen-amd64
Anmerkungen:
Diese Anleitung ist bereits zweimal von mir erfolgreich auf unterschiedlichen Hetzner-Servern ausgeführt worden. Einer mit lilo
und einer mit grub
(weil XEN).
Dennoch übernehme ich keine Garantie.