Mar
24
Gestern war es endlich soweit. Ich konnte endlich die langersehnte Server Upgrade machen. Mit mehr Festplatten.
Das ganze Problem stellte sich folgendermassen dar.
Wir haben 2 Festplatten in einem Raid1 Verbund…
/dev/sda2
/dev/sdb2
auf einer Volume Group “raid1″ mit fünf Logical Volumes: “root” “usr” “var” “home” und blöderweise noch “swap”. Was uns allerdings nicht gross stört.
Was wir wollen ist ein Raid5 mit 4 Festplatten…
/dev/sda2
/dev/sdb2
/dev/sdc2
/dev/sdd2
…mit einer Volume Group “raid5″ mit vier Logical Volumes: “root”, “usr”, “var”, “home”. Swap wird weder im Raid5, noch in einer LVM liegen.
Das ganze soll so ablaufen dass wir keine Zusätzlichen Festplatten brauchen. Allerdings habe ich aus sicherheitsgründen doch ein Backup (auf 3 IDE Platten mittels LVM zusammengehängt) gemacht.
Als erstes rauben wir dem Raid1 eine Festplatte. Somit ist das Raid1 ein degenerated Raid1…
mdadm -f /dev/md0 /dev/sdb2
…und nehmen es aus dem Raid Verbund.
mdadm -r /dev/md0 /dev/sdb2
Dann zerstören jegliche Raid Informationen auf dieser entfernten Platte.
mdadm --zero-superblock /dev/sdb2
Jetzt können wir die drei Platten /dev/sdb, /dev/sdc, /dev/sdd partitionieren mit cfdisk oder fdisk.
(Nur fdisk scheint in der Lage zu sein, die Partition’s ID auf fd (Linux raid autodetect) zu setzen.
Device Boot Start End Blocks Id System
/dev/sdx1 * 1 12 96358+ 83 Linux
/dev/sdx2 13 30393 244035382+ fd Linux raid autodetect
/dev/sdx3 30394 30515 979965 82 Linux swap / Solaris
Da wir eine Boot Partition brauchen habe wir auf allen Festplatten als erstes 100MB Partition. und am Ende eine Swap Partition.
Die Raid Elemente müssen alle genau gleich gross sein.
Jetzt bauen wir uns ein Raid5 mit 3 Elementen.
mdadm --create -amd --level 5 --raid-devices 3 /dev/sdb2 /dev/sdc2 /dev/sdd2
Jetzt muss man warten bis das Raid5 aufgebaut ist, da sonst mit Datenverlust zu rechnen ist.
pvcreate /dev/md1
vgcreate raid5 /dev/md1
lvcreate -l5G raid5 root
lvcreate -l3G raid5 usr
lvcreate -l220G raid5 home
lvcreate -l10G raid5 var
LVM Partitionen kopieren
Jetzt kommt der schwierigste Teil (soll man glauben)
Wir wollen die einzelenen Raid1 lvm’s auf die Raid5 lv’s kopieren. Hierfür sollten die oben erstellten Raid5 lv’s etwa gleich oder etwas grösser machen als die Raid1 lv’s.
Das Unix AIX hat ein Tool, das heist lvcp. Aber wir haben ja Linux. Da läuft nix dergleichen. Ich nehme aber gerne Tipps entgegen falls es doch so was ähnliches gibt.
Ich habe in diesem Falle dd genommen. Das kopieren eines lv’s sieht dann so aus:
dd if=/dev/mapper/raid1-var of=/dev/mapper/raid5-var bs=4k
Achtung!Man sollte sich ziemlich sicher sein dass man das 1. mache will und 2. die richtigen lv’s und vg’s geschrieben hat, da dd ohne Nachfragen einfach macht!
Nach dem dd fertig ist überprüfen wir das Dateisystem.
e2fsck -f /dev/mapper/raid5-var
Hoffen wir für alle es hat geklappt!
Das machen wir jetzt für alle lv’s. Es kann sehr lang gehen.
Jetzt ändern wir noch in der /etc/fstab alle raid1-foobar in raid5-foobar und die Swap Partitionen.
Dann erstellen wir die Swap Partitionen.
mkswap /dev/sd[bcd]3
Noch die /etc/mdadm/mdadm.conf anpassen auf das richtige Raid-level die Anzahl der Platten und die richtige UUID!
Diese finden wir mittels des Befehls:
mdadm --detail /dev/md1
Dann installieren wir den Kernel neu. Ich habe den mit einem initrd und Raid1 und Raid5 als Module konfiguriert und mit make-kpkg gebaut.
Im Linux source Ordner:
make-kpkg kernel-image --initrd
und dann
dpkg -i linux-image-xxysdfrzzz.deb erstellt das initrd wofür er eben die /etc/mdadm/mdadm.conf braucht.
Ist dies alles erledigt können wir rebooten. Dies tun wir da damit / das neue root auf der Raid5 wird und wir die letzte Platte dem Raid1 entnehmen, das Raid1 killen, und dem Raid5 hinzugeben können.
Die letzte Platte
Booted alles brav, so sind wir schon auf unserem neuen Raid5, aber leider nur mit 3 Platten. Jetzt wollen wir die 4. Platte dazu stopfen.
Zuerst löschen wir alle lv’s auf raid1.
lvremove raid1
Die Fragen mit yes beantworten.
Volume Group deaktivieren:
vgchange -a n raid1
Volume Group Löschen:
vgremove raid1
Jetzt hat die letzte Stunde auch für das Raid1 geschlagen.
Verbleibende Raid1 Festplatte als faulty setzen.
mdadm -f /dev/md0 /dev/sda2
Dann Festplatte entferenen…
mdadm -r /dev/md0 /dev/sda2
…das Raid1 stoppen:
mdadm -S /dev/md0
Raid1 Informationen von der Platte löschen:
mdadm --zero-superblock /dev/sda2
Jetzt Partitionieren wir /dev/sda genau wie die anderen.
Hinzugügen der Letzten Platte
Platte Hinzufügen:
mdadm /dev/md1 --add /dev/hdd1
GROW!
mdadm --grow /dev/md0 --raid-disks=4
Jetzt muss man wieder (lange) warten. Bei 4*250GB geht das ca. 400 Minuten.
Danach muss man noch die Volume Group der neuen Grösse anpassen.
pvresize /dev/md0
Dann kann man die einzelnen lv’s wieder in der Grösse anpassen. Hier beschriebe.
Links
LVM HOWTO
Raid5 resize auf Gentoo
Anmerkungen
- Es fehlen noch einige Informationen z.B. Kernel-Module Name und verschiedene kleine Erklärunen
- Es hat garantiert Fehler (in den Bash Commands) da ich es aus Erinnerung geschrieben habe. Bitte Melden!
Have fun…
Comments
Leave a Reply
You must be logged in to post a comment.