Categories
Linux Storage

RAID1 in RAID5 umwandeln

Wenn Speicherplatzbedarf ständig wächst und Datensicherheit wichtig ist, bietet sich ein RAID5 an. Soweit bekannt. Nur was ist zu tun, wenn man zunächst nur auf Datensicherheit (RAID1) gesetzt hat, später aber feststellt, dass man gerne mehr Speicherplatz und Datensicherheit (RAID5) hätte?

Laut Theorie ist ein RAID5 mit 2 Laufwerken nichts anderes als ein RAID1 (Spiegelung). Die Parity-Informationen entsprechen dann einer Spiegelung des Laufwerks. Gut erklärt wird das z.B. hier. Ein RAID1 unterscheidet sich also gegenüber einem RAID5 nur durch einen anderen RAID-Header. Ausprobiert hat das ganze zum Glück auch schon hier jemand. Soweit die Theorie – für die Umsetzung in der Praxis habe ich doch erst mal eine Sicherung der Daten angelegt.

Vorbereitung

Wenn eine der zu konvertierenden Partitionen aktiv eingebunden ist (z.B. als “/”) müssen die folgenden Schritte “Offline” durchgeführt werden. Daher habe ich alles wesentliche mit Knoppix durchgeführt.

Partitionstabelle kopieren

Hier wird von der bestehenden ersten Platte die Partitionstabelle auf die neue dritte Platte kopiert. Dies ist natürlich nur sinnvoll, wenn die Platten die selbe Grösse haben. Dafür erspart man sich eine Menge fdisk-Tipperei.

sfdisk -d /dev/sda | sfdisk /dev/sdc

Bestehende RAID-Konfiguration auslesen

Da Knoppix die RAID-Konfiguration noch nicht kennt, kann man sie einfach für jede RAID-Partition erstellen lassen:

mdadm --examine --scan /dev/sda1 >> /etc/mdadm/mdadm.conf
mdadm --examine --scan /dev/sda2 >> /etc/mdadm/mdadm.conf
mdadm --examine --scan /dev/sda5 >> /etc/mdadm/mdadm.conf

Dann setzt man in der Datei “/etc/default/mdadm” den Wert “Autostart” auf “true”. Danach sollte die bestehende RAID-Konfiguration problemlos starten.

/etc/init.d/mdadm-raid start
cat /proc/mdstat

RAID umwandeln

Die folgenden Schritte werden für jedes RAID-Device durchgeführt.

Hinweis: Ich habe zunächst den Fehler gemacht auch die Boot-Partition von RAID1 zu RAID5 zu Konvertieren. Grub kann aber nur von einer RAID1 Partition starten. (Hintergrund: Da beim Booten noch kein RAID-Treiber zur Verfügung steht, tut Grub beim Booten quasi so, als sei die angegebene RAID-Partition ein ganz normales Dateisystem. Im Falle eines RAID1 ist dies auch so, unterscheidet sich eine RAID1 Partition von einer ext3 Partition nur durch zusätzliche Meta-Daten am Ende der Partititon. Beim RAID5 entsprechen die (Roh-)Daten in der Partition nicht mehr einem ext3 Dateisystem und Grub kann keine Boot-Information lesen.)

Zunächst wird der RAID-Verbund aufgelöst (dies entspricht im Normalfall einem Löschen des Verbundes)

root@Knoppix:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1

Jetzt wird es Spannend: Es wird eine neue RAID5 Signuatur an der Stelle der alten RAID1 Signatur erzeugt (nicht die dritte Platte mit angeben!):

root@Knoppix:~# mdadm --create /dev/md1 --level=5 -n 2 /dev/sda2 /dev/sdb2

mdadm: /dev/sda2 appears to contain an ext2fs file system
    size=3903680K  mtime=Sun Feb  8 07:49:00 2009
mdadm: /dev/sda2 appears to be part of a raid array:
    level=raid1 devices=2 ctime=Fri Mar  7 23:40:35 2008
mdadm: /dev/sdb2 appears to contain an ext2fs file system
    size=3903680K  mtime=Sun Feb  8 07:49:00 2009
mdadm: /dev/sdb2 appears to be part of a raid array:
    level=raid1 devices=2 ctime=Fri Mar  7 23:40:35 2008
Continue creating array? y
mdadm: array /dev/md1 started.

Der Softraid-Algorithmus initialisiert das RAID nun mit den bestehenden Daten neu. Beobachten kann man das gut mittels “watch”:

root@Knoppix:~# watch cat /proc/mdstat

Personalities : [raid1] [raid6] [raid5] [raid4]
md2 : active raid5 sda5[0] sdc5[2] sdb5[1]
      1944732288 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sdb2[2] sda2[0]
      3903744 blocks super 1.0 level 5, 64k chunk, algorithm 2 [2/1] [U_]
      [=======>.............]  recovery = 37.4% (1462912/3903744) finish=0.6min speed=58516K/sec

md0 : active raid5 sdc1[3] sdb1[2] sda1[0]
      979840 blocks super 1.0 level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices:

Jetzt kann die dritte Platte hinzugefügt werden:

root@Knoppix:~# mdadm --add /dev/md1 /dev/sdc2

mdadm: added /dev/sdc2
root@Knoppix:/mnt# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md2 : active raid5 sda5[0] sdc5[2] sdb5[1]
      1944732288 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sdc2[3](S) sdb2[2] sda2[0]
      3903744 blocks super 1.0 level 5, 64k chunk, algorithm 2 [2/2] [UU]

md0 : active raid5 sdc1[3] sdb1[2] sda1[0]
      979840 blocks super 1.0 level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices:

Wie man sieht, ist die dritte Platte noch als Spare (“S”) gekennzeichnet. Vergrössern tut man das RAID-System dann wie folgt:

root@Knoppix:~# mdadm --grow /dev/md1 --raid-disks=3
mdadm: Need to backup 128K of critical section ..
mdadm: ... critical section passed.

root@Knoppix:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md2 : active raid5 sda5[0] sdc5[2] sdb5[1]
      1944732288 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sdc2[3] sdb2[2] sda2[0]
      3903744 blocks super 1.0 level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      [========>............]  reshape = 40.9% (1601408/3903744) finish=2.5min speed=14839K/sec

md0 : active raid5 sdc1[3] sdb1[2] sda1[0]
      979840 blocks super 1.0 level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices:

Je nach Plattengrösse kann das auch schon mal ein paar Stunden dauern.

Abschluss

Es fehlen noch Dateisystemspezifische Kleinigkeiten. z.B. vergössern der ext3-Partition auf die neue RAID-Grösse:

e2fsck -f /dev/md1
resize2fs -p /dev/md1

Um im Fehlerfall von der neuen Platte auch booten zu können, benötigt sie noch einen Bootsektor. Dazu startet man die Grub-Console:

~# grub

grub> device (hd2) /dev/sdc

grub> root (hd2,0)
 Filesystem type is ext2fs, partition type 0xfd

grub> setup (hd2)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd2)"...  15 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd2) (hd2)1+15 p (hd2,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.
grub>

Disclaimer: Auch wenn bei mir alles problemlos funktioniert hat sollte man immer ein Backup anfertigen!

4 replies on “RAID1 in RAID5 umwandeln”

Hallo,

super Artikel. Bin auch gerade dabei auf Raid5 zu konvertieren. Ein kleiner Hinweis: Laut

http://www.arkf.net/blog/?p=47

gibt es unterschiedliche Raid Header Versionen. Bei mir wars die Version 0.9 (kann mit “mdadm –detail /dev/mdX” überprüft werden). Der Kommentator Liam schlägt hier vor beim “mdadm –create” das Flag “-–metadata=0.9” mit anzugeben.

Grüße,
Florian

wie sieht es aus wenn man openmediavault als System in seinem NAS hat und von 2 Platten auf 3 upgraded –> RAID 1 zu RAID 5? geht das ebenfalls mit deiner Anleitung?

Hi, nicht direkt mit dieser Anleitung. Das “upgraden” von RAID Leveln wird aber generell von mdadm unterstützt.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.