In vielen Setups hat man im Software-RAID (md) Partitionen, anstelle der ganzen Disk. In diesem Fall müssen mehrere Schritte gemacht werden, wenn man die Disk vergrössert um an den zusätzlichen Platz zu kommen.
Continue reading Vergrössern von MD-RAID arraysSchlagwort: RAID
md RAID array umbenennen
Manche installer von Linux Distributionen setzen „zufällige“ Namen für die md-arrays. Dies kann dann störend sein, wenn man diese so in der /etc/fstab (anstelle von der UUID) eintragen möchte und beim booten diese Zahl ändert.
Doch mittels ein paar einfachen Schritten lässt sich diese auch umbenennen.
mismatch_cnt is not 0 on /dev/md*
Bei einem Linux Soft-RAID (md-raid) kann es vorkommen, dass man mit einem Mail informiert wird, dass „cnt nicht 0 ist“:
Subject: Cron <root@server> /usr/sbin/raid-check WARNING: mismatch_cnt is not 0 on /dev/md127 |
Dies könnte ein Hinweis auf defekte Sektoren auf einer Disk sein.
Continue reading mismatch_cnt is not 0 on /dev/md*
Soft-RAID nachträglich auf LVM System hinzufügen
Die Situation: Man hat mal ein Linux System mit einer Festplatte und LVM aufgesetzt und möchte jetzt durch das hinzufügen einer zweiten Platte ein soft-raid darauf machen, ohne das System neu installieren zu müssen. – Und mit den richtigen Handgriffen geht das ganz einfach! 😉
[stextbox id=“note“ caption=“Mehr Platz gefällig?“]Meistens ist eine nachträglich hinzugefügte Platte grösser als die erste. – Möchte man dies gerade nutzen um mehr Platz zu bekommen kann man einfach zwei grosse Platten einbauen und nach der RAID-Migration der zweiten Platte, die erste auch noch ersetzen.
Die dazu nötigen Schritte werden an unten an passender Stelle beschrieben.[/stextbox]
Situation
Wir gehen davon aus, dass das system zwei Partitionen hat:
/dev/sda1 (100MB): /boot
/dev/sda2 (rest) : LVM
(bei mehr partionen die Schritte einfach entsprechend für alle wiederholen)
Migration
Zuerst mal wird das System herunter gefahren und die zweite Festplatte eingebaut.
Dann wieder hochfahren und die zweite Platte so formatiert, dass die Partitionen mindestens so gross sind wie die bisherigen (dürfen auch grösser sein, wenn es Sinn macht (z.B. beim LVM) und man evtl. vorhat später die kleinere Platte auch durch eine grössere zu ersetzen.
Nun migrieren wir /boot; dies ist besonders einfach, da /boot im laufenden Betrieb problemlos unmounted werden kann:
umount /boot mdadm --create /dev/md1 --level=1 --raid-disks=2 /dev/sda1 missing |
Nun muss gewartet werden bis
cat /proc/mdstat |
beide Partitionen als synchron anzeigt. Danach wird die alte Partition erstmal wieder entfernt:
mdadm --manage /dev/md1 --fail /dev/sda1 mdadm --manage /dev/md1 --remove /dev/sda1 mdadm --zero-superblock /dev/sda1 |
Wir haben hier zuerst ein sog. "degraded" RAID-Array mit der bisherigen Partition erstellt.
Nun ändern wir in: /etc/fstab den Eintrag für boot wie folgt um:
/dev/md1 /boot ext3 defaults 1 2 |
Jetzt kann /boot wieder gemounted werden:
mount /boot/ |
Nun muss auch noch die: "#boot=" Zeile in: /boot/grub/menu.lst angepasst werden:
#boot=/dev/md1 |
Als nächstes stellen wir sicher, dass grub auf beiden Festplatten installiert ist:
grub grub> device (hd0) /dev/sda grub> root (hd0,0) grub> setup (hd0) grub> device (hd0) /dev/sdb grub> root (hd0,0) grub> setup (hd0) grub> find /grub/stage1 grub> quit |
Jetzt folgt die Migration des LVMs. Dazu erstellen wir wieder ein degraded raid-array, fügen dass als PV den LVM hinzu verschieben dann all die Daten von der alten Partition auf das neue md-drive und können danach das alte PV aus der VG entfernen:
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb2 pvcreate /dev/md2 vgextend rootvg /dev/md2 pvmove /dev/sda2 /dev/md2 vgreduce rootvg /dev/sda2 pvremove /dev/sda2 |
Zu guter letzt muss jetzt noch ein neues initrd erstellt werden:
mkinitrd -v -f /boot/initrd-$(uname -r).img $(uname -r) |
[stextbox id=“warning“ caption=“Achtung“]Das erstellen des initrd’s ist ganz wichtig und selbst dann, wenn man bereits vorher vom LVM gebootet- und CentOS am laufen hat! – Denn CentOS fügt bei der initialen initrd erstellung jeweils nur die Treiber-Module hinzu, die auch benötigt werden; so fehlt aber der raid-treiber und das System wird nicht booten![/stextbox]
Nun kann man das System neu starten und wenn alles geklappt hat die Partitionen der alten Platte dem neuen RAID-Array hinzufügen:
mdadm --manage /dev/md1 --add /dev/sda1 mdadm --manage /dev/md2 --add /dev/sda2 cat /proc/mdstat |
[stextbox id=“tip“ caption=“Tip“]Will man nun die alte Platte auch gleich mit einer grösseren ersetzen, so kann man diese vor dem obigen Schritt durch eine grössere ersetzen, entsprechend Partitionieren und gleich wie im obigen Schritt einbinden.[/stextbox]
RAID/LVM nachträglich hinzufügen
Situation
Man hat bereits einen Linux Server aufgesetzt der gut läuft. Nun hat man dem eine zweite Platte hinzugefügt und möchte ein RAID/LVM System daraus machen, aber ohne das aufwändige neu installieren/konfigurieren des Systems.
Dies ist mit etwas know how relativ leicht möglich, indem man zuerst die zweite (unbenutzte) Festplatte entsprechend als sog. "degraded raid1 array" definiert, dann die Files von der ersten Platte rüber kopiert, von dieser bootet und letztendlich diese dann dem RAID wieder dazu fügt.
[stextbox id=“note“ caption=“Hinweis“]Der folgende Artikel zeigt wie es mit einem CentOS System geht; der Vorgang dürfte sich aber auch für andere Systeme nahezu nicht unterscheiden.[/stextbox]
Installieren der Komponenten
Als erstes sollte man in der Kernel-Konfiguration überprüfen ob RAID einkompilliert ist, dies dürfte aber bei fast allen neueren Kernels der Fall sein:
-> Device Drivers -> Multi-device support (RAID and LVM) -> Multiple devices driver support (RAID and LVM) (MD [=y]) -> RAID support (BLK_DEV_MD [=y]) -> RAID-1 (mirroring) mode |
Dann installieren wir mdadm und lvm2:
yum install mdadm lvm2 rsync |
Konfiguration
Vorbereiten der neuen Disk
Nun kann die neue Disk (von der aktuell laufenden sollte man noch die Finger lassen!) mit fdisk gemäss den eigenen wünschen partitioniert werden; in diesem Beispiel haben wir folgende aufteilung:
Device Flags Part Type FS Type Label Size (MB) /dev/sdb1 boot Primary Linux raid autodetect 128 /dev/sdb2 Primary Linux raid autodetect (rest) |
Ist alles erledigt erstellen wir daraus ein degraded array mit den oben definierten Partitionen:
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb1 mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb2 mdadm --detail --scan >> /etc/mdadm.conf |
Und optional nun noch der LVM drüber:
vgscan vgchange -a y pvcreate /dev/md2 vgcreate rootvg /dev/md2 lvcreate -L1G -nroot_lv rootvg lvcreate -L5G -nusr_lv rootvg lvcreate -L5G -nhome_lv rootvg lvcreate -L7G -nvar_lv rootvg lvcreate -L2G -ntmp_lv rootvg lvcreate -L512M -nswap_lv rootvg |
Darauf können nun die filesysteme erstellt werden:
mke2fs /dev/md1 mke2fs -j /dev/rootvg/root_lv mke2fs -j /dev/rootvg/home_lv mke2fs /dev/rootvg/tmp_lv mke2fs -j /dev/rootvg/usr_lv mke2fs -j /dev/rootvg/var_lv mkswap /dev/rootvg/swap_lv |
Das ganze können wir jetzt mounten…
mkdir -p /mnt/new mount /dev/rootvg/root_lv /mnt/new cd /mnt/new mkdir boot home usr opt var tmp mount /dev/md1 /mnt/new/boot mount /dev/rootvg/usr_lv /mnt/new/usr mount /dev/rootvg/home_lv /mnt/new/home mount /dev/rootvg/tmp_lv /mnt/new/tmp mount /dev/rootvg/var_lv /mnt/new/var chmod 1777 /mnt/new/tmp |
…und die Daten rüber kopieren:
rsync -ahvx / /mnt/new/ rsync -ahv /dev/* /mnt/new/dev/ rsync -ahv /boot/ /mnt/new/boot/ |
Als nächster Schritt muss noch die Datei: /mnt/new/etc/fstab angepasst werden:
# <fs> <mountpoint> <type> <opts> <dump/pass> /dev/md1 /boot ext2 noauto,noatime 1 2 /dev/rootvg/root_lv / ext3 noatime 0 1 /dev/rootvg/swap_lv none swap sw,pri=1 0 0 /dev/rootvg/usr_lv /usr ext3 noatime 1 2 /dev/rootvg/home_lv /home ext3 noatime 1 2 /dev/rootvg/tmp_lv /tmp ext2 noatime 1 2 /dev/rootvg/var_lv /var ext3 noatime 1 2 shm /dev/shm tmpfs nodev,nosuid,noexec 0 |
Als letztes noch die Datei /mnt/new/boot/grub/menu.lst bearbeiten, den ersten (standard) Eintrag nach zuoberst kopieren und "root=/dev/sda2" in: "root=/dev/rootvg/root_lv" ändern.
Dies müsste dann etwa so aussehen:
title CentOS RAID root (hd0,0) kernel /vmlinuz ro root=/dev/rootvg/root_lv |
Testen
Nun gehts ans testen, ob die Maschine vom RAID booten- und LVM Partitionen mounten kann, bevor wir die Daten auf /dev/sda endgültig zerstören. – Bisher haben wir noch gar nichts "zerstört".
Dazu erstellen wir die folgenden Verzeichnisse: /mnt/md1 und /mnt/tmp_lv}:
mkdir -p /mnt/{md1,tmp_lv} |
Und fügen den folgenden Eintrag in /etc/fstab:
/dev/md1 /mnt/md1 ext2 noatime 0 1 /dev/rootvg/tmp_lv /mnt/tmp_lv ext2 noatime 1 2 |
Nun starten wir das System neu und überprüfen ob wir den Verzeichnisinhalt von diesen zwei Verzeichnissen sehen können.
[stextbox id=“warning“ caption=“Wichtig“]Fahre NICHT weiter fort, bevor du diesen Schritt erfolgreich beendet hast![/stextbox]
Editiere nun /boot/grub/menu.lst, kopiere den ersten (standard) Eintrag nach zuoberst und ändere "root=/dev/sda2" in: "root=/dev/rootvg/root_lv".
Dies müsste dann etwa so aussehen:
title CentOS RAID root (hd0,0) kernel /vmlinuz ro root=/dev/rootvg/root_lv |
Starte das System neu.
Migration
Nun migrieren wir die erste Disk.
Erstelle mit fdisk nun genau das selbe layout wie mit /dev/sdb.
Nun aktiveren wir das SWAP erstellen das array und warten bis es fertig ist:
mdadm --add /dev/md1 /dev/sda1 mdadm --add /dev/md2 /dev/sda2 watch -n 1 "cat /proc/mdstat" |
Nun müssen wir nur noch grub auf die beiden Disks kopieren:
grub Probing devices to guess BIOS drives. This may take a long time. grub> root (hd0,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/boot/grub/stage2 /boot grub/menu.lst"... succeeded Done. grub> root (hd1,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd1) grub> quit |
Starte nun das System noch ein letztes mal neu, prüfe ob es gut hochkommt und dann mit df -h die Partitionen.