Zum Inhalt springen
Startseite » Plattentango – Linuxinstallation auf RAID1 übertragen

Plattentango – Linuxinstallation auf RAID1 übertragen

In meinem Urlaub meinte die Festplatte meines kleinen Heimservers den Geist aufgeben zu müssen, jahrelang läuft das Ding ohne Murren und dann ist man mal zwei Wochen nicht da und dann macht das Ding die Grätsche.:-(

Gut, eigene Schuld, ein RAID System zu installieren hatte ich einfach zu lange vor mir her geschoben, jetzt war der Augenblick gekommen das mal in Angriff zu nehmen, im Urlaub keine Emails empfangen zu können geht ja wohl gar nicht.;-)

Da ich aber nicht das System komplett neu aufsetzen wollte, plante ich das vorhandene System auf ein RAID1 zu migrieren, allerdings hatte ich mir das wohl ein bißchen zu einfach vorgestellt, denn ich wollte auch vom RAID System booten. Im Netz findet man zwar diverse Anleitungen, die wurden aber scheinbar nur theoretisch erdacht ohne auszuprobieren ob das auch funktioniert, zumindest wurde da öfter vorgeschlagen, Festplatten im laufenden Linuxbetrieb zu kopieren, was naturgemäß nicht so ohne weiteres funktioniert.
Also war ich auf mich alleine gestellt und mußte mir selbst was zusammenbasteln, was dann aber letztendlich funktioniert hat. Ich versuche das an dieser Stelle jetzt zusammenzufassen, aber man sollte schon ein bißchen Erfahrung mit Linux und im Speziellen mit der Shell haben, ich erkläre hier nicht alles haarklein.
Und noch eine Warnung, man kann sich bei der Aktion ganz leicht sein bestehendes System zerschießen, es ist also nicht verkehrt ein Backup zu haben bzw. erst mal eins zu erstellen.

Live System vorbereiten

Los geht’s, mein Server läuft unter Debian, also mußte ich mir erstmal ein Debian Live System auf DVD brennen, denn ohne geht’s nicht.
In meinem Fall hatte ich die alte Installation auf einer Platte und wollte das Ganze auf zwei neuen Platten im RAID1 betreiben.
Meine Originalinstallation bestand aus vier Partitionen:
/dev/sda1 /boot ext3
/dev/sda2 / ext4
/dev/sda3 /home ext4
/dev/sda4 swap swap

Man hängt also erstmal die Originalplatte(sda) und eine der neuen Platten(in meinen Fall war das dann /dev/sdb) an den Rechner und bootet von der Originalplatte.

Dateisystem erstellen

Dann mit
sfdisk -d /dev/sda | sfdisk /dev/sdb
das Dateisystem auf die neue Platte übertragen. Das funktioniert natürlich nur, wenn die Platten gleich groß sind, ist das nicht der Fall muß man die neue Platte mit fdisk partitionieren, dabei sollte man das Partitionsschema der alten Platte übernehmen!
Die neuen Partitionen auf sdb bekommen mittels fdisk das Linux Raid Label, in fdisk ‚t‘, dann ‚fd‘ eingeben, das wiederholt man für alle Partitionen und beendet fdisk mit ‚w‘.
Mit mdadm erstellt man dann das RAID:
mdadm -C /dev/md0 --force --level=1 --raid-devices=2 /dev/sdb1 missing
mdadm -C /dev/md1 --force --level=1 --raid-devices=2 /dev/sdb2 missing
mdadm -C /dev/md2 --force --level=1 --raid-devices=2 /dev/sdb3 missing
mdadm -C /dev/md2 --force --level=1 --raid-devices=2 /dev/sdb4 missing

Für die zweite Platte wird missing verwendet, da ja eine Platte noch fehlt.

Danach werden die Filesysteme auf den RAID-Partitionen erzeugt:
mkfs.ext[34] /dev/md[0-2]
mkswap /dev/md4

RAID einrichten

Dann fährt man das System herunter und startet von der Live CD, denn man muß jetzt das System von der Originalplatte auf das vorbereitete RAID Volume kopieren, das geht aber nicht wenn die Originalplatte noch als Systemplatte eingehängt ist. Ist das Live System gestartet, erwartet einen eine spartanische Kommandoshell.

Zuerst muß mdadm installiert werden:
sudo apt-get install --no-install-recommends mdadm
„no-install-recommends“ ist nötig, damit nicht die hier, unnötigen Paketabhängigkeiten mitinstalliert werden.

Mittels
sudo mdadm --assemble --scan
werden die RAID Partitionen von der neuen Platte eingebunden, die gefundenen Partitionen kann man sich mit
cat /proc/mdstat
anzeigen lassen.

Diese Partitionen müssen nun gemountet werden, dazu erstellen wir z.B. unter /media ein Verzeichnis raid/
mkdir /media/raid
Dann wird die root Partition eingehängt
mount /dev/md1 /media/raid
In meinem Fall erzeugt man danach noch einen Ordner /media/raid/boot und /media/raid/home in die man dann die beiden anderen Partitionen noch einhängt.
mkdir /media/raid/boot
mkdir /media/raid/home
mount /dev/md0 /media/raid/boot
mount /dev/md2 /media/raid/home

Ob das Einhängen der Partitionen geklappt hat kann man mit ‚ls‘ überprüfen, es sollte an den Mountpunkten ein lost+found Ordner angezeigt werden. Mit ‚mount‘ kann man überprüfen ob auch die richtigen Partitionen am richtigen Mountpoint eingehängt wurden.

Jetzt muß man noch die Originalplatte irgendwo einhängen, z.B. unter /mnt
Erst die root Partition(hier /dev/sda2) einhängen, die Reihenfolge ist wichtig!:
mount /dev/sda2 /mnt
dann die anderen Partitionen:
mount /dev/sda1 /mnt/boot
mount /dev/sda3 /mnt/home

Jetzt müssen noch, mittels eines von mdadm mitgelieferten Scripts, die Daten der RAID Partitionen in die /etc/mdadm.conf geschrieben werden
sudo su -c "/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf"

Danach können die Daten der alten Platte auf die neue RAID-Platte mittels rsync kopiert werden.
sudo rsync --stats --progress --numeric-ids -axAhHSP /mnt/ /media/raid/

Das Syncen der eingehängten Unterordner klappte bei mir nicht, also wurden diese extra gesynct
sudo rsync --stats --progress --numeric-ids -axAhHSP /mnt/boot/ /media/raid/boot/
sudo rsync --stats --progress --numeric-ids -axAhHSP /mnt/home/ /media/raid/home/

Die abschließenden Slashes sind wichtig, nicht vergessen, sonst wird der Ordner kopiert und nicht dessen Inhalt.
Fügt man bei den rsync Optionen noch ein ‚c‘ an, dann kann man noch überprüfen ob alle Dateien kopiert wurden, wird nichts ausgegeben, hat alles geklappt.

System starten und RAID aktivieren

Nun fährt man das Livesystem herunter und startet wieder von der Originalplatte, also /dev/sda
Nachdem das System hochgefahren ist, aktiviert man das RAID wieder mit
mdadm --assemble --scan
Das RAID System wird dann wieder gemountet
mkdir /media/raid
mount /dev/md1 /media/raid
mkdir /media/raid/boot
mkdir /media/raid/home
mount /dev/md0 /media/raid/boot
mount /dev/md2 /media/raid/home

Durch Eingabe von
blkid
bekommt man die UUIDs der einzelnen Partitionen angezeigt, man editiert die fstab der RAID Platte, also /mnt/etc/fstab und trägt dort die RAID Partitionen mit ihren UUIDs ein.
# /etc/fstab
# /dev/md1
UUID=46c6b667-8554-4861-b438-0f542697752e / ext4 errors=remount-ro 0 1
# /dev/md0
UUID=41570ce6-d47b-478f-4500-b40e20c2359e /boot ext3 defaults 0 2
# /dev/md2
UUID=db4df1d3-111f-466e-8c59-1cc873836458 /home ext4 defaults 0 2
#/dev/md3
UUID=d6d42f4f-4dcc-49f5-8afb-ff0b807e95ef none swap sw 0 0

Nun startet man eine chroot Umgebung auf der RAID Platte, so kann man mit der Platte arbeiten als wäre von ihr gebootet worden, das ist nötig damit man grub und die initrd auf dieser Platte installieren kann.

Zuerst müssen der /dev, /sys und /proc Ordner „erzeugt“ werden:
mount --bind /dev /media/raid/dev
mount --bind /sys /media/raid/sys
mount --bind /proc /media/raid/proc

dann kann die chroot Umgebung gestartet werden
chroot /media/raid
Man erhält wieder eine Eingabeaufforderung, zuerst editiert man die /etc/default/mdadm und ändert die Variablen
INITRDSTART='none'
AUTOSTART=false

in
INITRDSTART='all'
AUTOSTART=true

damit beim booten die Laufwerke gefunden werden, man sollte noch in der /etc/initramfs-tools/modules nachsehen ob das raid Kernelmodul ‚raid1‘ eingetragen ist und gegebenenfalls ergänzen.
Nun kann mittels folgender Befehlssequenz grub installiert und die initrd aktualisiert werden.
update-initramfs -k $(uname -r) -c -t
grub-mkdevicemap -n
grub-install /dev/sdb
update-grub2

Nun fährt man das System herunter und entfernt die Originalplatte (/dev/sda), man kann jetzt erst einmal testen ob das System mit der einzelnen RAID Platte startet.
Sollte etwas schiefgehen nochmal alles oben abarbeiten, startet das System kann man es auch gleich wieder herunterfahren.
Jetzt kann man die zweite neue Platte anstöpseln(sie ist dann /dev/sdb in meinem Fall) und das System wieder (von der ersten Platte) booten.
Durch sfdisk -d /dev/sda | sfdisk /dev/sdb wird die Partitionstabelle nun auf die zweite RAID-Platte übertragen, danach dann mit
mdadm /dev/md0 --add /dev/sdb1
Die Partitionen sollten nun synchronsisiert werden, dies kann man mit mdadm --detail /dev/md0 beobachten.
Dies wiederholt man dann für alle RAID Partitionen, also
mdadm /dev/md1 --add /dev/sdb2
mdadm /dev/md2 --add /dev/sdb3
mdadm /dev/md3 --add /dev/sdb4

GRUB konfigurieren

Da jetzt aber grub nur auf /dev/sda installiert ist würde man im Falle, daß /dev/sda ausfällt nicht mehr in das System booten können, also sollte auch auf /dev/sdb grub in den MBR installiert werden.
Man geht im Prinzip wie oben beschrieben vor, man muß halt eine chroot Umgebung auf der zweiten Platte laufen lassen und grub installieren.
Unter Umständen muß man die zweite eben synchronsierte Platte dafür wieder aus dem RAID Verbund entfernen, chroot starten, grub installieren, chroot verlassen und Platte wieder mit –add in den Verbund aufnehmen.
So, ich hoffe, daß ich nichts vergessen habe und alles funktioniert, ich übernehme keine Verantwortung für irgendwas, wer das hier nachmacht sollte sich des Risikos bewußt sein, ich übernehme da keine Haftung!

Schreibe einen Kommentar

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