30
Aug
06

Ubuntu Migration auf ein Software Raid 5

Man kann ohne grossen Aufwand eine existierende Ubuntu Installation auf ein Software Raid migrieren. Dies geht natürlich ohne Probleme auch mit anderen Linux Distributionen.

Ich wollte damit unbedingt meine wertvolle Musik- und Fotosammlung etwas sicherer machen, da ich doch einige Wochen damit verbracht habe, meine komplette CD Sammlung zu Digitalisieren und auch die Fotos würde ich nur ungerne verlieren.

Nach dem Einbau der neuen Platten (bei mir zwei neue SATA Harddisks) einfach von der Ubuntu Live CD Booten damit man nicht das laufende System migriert, was unter Umständen zu Datenverlust führen kann.

Als ersten müssen die neuen Harddisks richtig partitioniert werden. Am einfachsten geht das mit cfdisk. Meine neuen Platten sind /dev/sdb und /dev/sdc.

sudo cfdisk /dev/sdb

Ich habe mir eine Partition für /boot (/dev/sdb1), eine für Swap (/dev/sdb5) und eine für Root (/dev/sdb6) angelegt. Partitionstyp muss Linux raid autodetect (fd) sein.

Die Partitionstabelle kann nun einfache auf die andere Harddisk kopiert werden:

sudo sfdisk -d /dev/sdb > /tmp/part.txt
sudo sfdisk /dev/sdc < /tmp/part.txt

Jetzt sind die Platten für das Erstellen des Software Raid bereit.

sudo mknod /dev/md0 b 9 0
sudo mknod /dev/md1 b 9 1
sudo mknod /dev/md2 b 9 2
sudo mdadm --create /dev/md0 -n3 -l1 -f missing /dev/sdb1 /dev/sdc1
sudo mdadm --create /dev/md1 -n3 -l5 -f missing /dev/sdb5 /dev/sdc5
sudo mdadm --create /dev/md2 -n3 -l5 -f missing /dev/sdb6 /dev/sdc6
cat /proc/mdstat

Wichtig sind vor allem zwei Dinge: Die /boot Partition muss ein Raid 1 sein, damit Grub auf die Partition zugreifen kann und wir binden die dritte Disk noch nicht ein, da ja auf dieser noch das aktuelles System ist. Wir verwenden dazu einfach ‘missing’ anstelle ‘/dev/sdaX’.

Nun erstellen wir das Dateisystem…

sudo mkreiserfs /dev/md0
sudo mkswap /dev/md1
sudo mkreiserfs /dev/md2

… und mounten das Raid …

sudo mkdir -p /mnt/raid
sudo mount /dev/md2 /mnt/raid
sudo mkdir -p /mnt/raid/boot
sudo mount /dev/md0 /mnt/raid/boot
sudo swapon /dev/md1

… und kopieren unser System auf das Raid (Ich habe in dem Fall auch eine /boot und eine Root Partition) …

sudo mkdir -p /mnt/nonraid
sudo mount /dev/sda6 /mnt/nonraid
sudo mount /dev/sda1 /mnt/nonraid/boot
sudo cp -arvd /mnt/nonraid/* /mnt/raid

Nun haben wir eine Kopie auf das Raid kopiert und können das Booten vom Raid vorbereiten.

Wir passen nun /etc/fstab an, damit die Raid Devices benutzt werden.

sudo vim /mnt/raid/etc/fstab

und das sollte folgende Eintrage haben:

/dev/md0        /boot           reiserfs notail         0       1
/dev/md1        none            swap    sw              0       0
/dev/md2        /               reiserfs notail         0       1

Noch die Einträge für den Bootloader Grub anpassen…

> sudo vim /mnt/raid/boot/grub/menu.lst

und das Raid eintragen…

...
# kopt=root=/dev/md2 ro
...
kernel          /vmlinuz root=/dev/md2 ro quiet splash
initrd          /initrd.img
...

Natürlich muss nun Grub auch noch in den MBR der beiden neuen Platten kopiert werden.

sudo grub
grub> device (hd1) /dev/sdb
grub> root (hd1,0)
grub> setup (hd1)
grub> device (hd2) /dev/sdc
grub> root (hd2,0)
grub> setup (hd2)

Nun ist unser neues Sytsem bereit für den ersten Test! Also die Kiste neu Starten und nicht vergessen von einer der neuen Platten zu Booten. Bei mir ist das F8.

sudo reboot

Funktioniert das neue System einwandfrei, kann das alte System gelöscht und auch ins Raid eingebunden werden.
ACHTUNG: Ab hier wird das alte System gelöscht und es gibt kein Zurück mehr!

sudo sfdisk -d /dev/sdb > /tmp/part.txt
sudo sfdisk /dev/sda < /tmp/part.txt
sudo mkreiserfs /dev/sda1
sudo mkswap /dev/sda5
sudo mkreiserfs /dev/sda6
sudo mdadm --manage /dev/md0 -a /dev/sda1
sudo mdadm --manage /dev/md1 -a /dev/sda6
sudo mdadm --manage /dev/md2 -a /dev/sda6

Je nach Plattengrösse kann das Einbinden schon seine Zeit dauern. Man kann den Fortschritt mit

watch cat /proc/mdstat

verfolgen, was in etwas so aussieht:

Personalities : [raid1] [raid5]
md2 : active raid5 sda6[3] sdb6[1] sdc6[2]
301828992 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
[===================>.]  recovery = 95.3% (143906432/150914496) finish=3.5min speed=32710K/secmd1
: active raid5 sda5[0] sdb5[1] sdc5[2]
8787328 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]md0 : active raid1 sda1[0] sdb1[1] sdc1[2]
979840 blocks [3/3] [UUU]
unused devices:

Geschaft!! Nun werden alle Daten auf die drei Harddisks geschrieben, was zum einten den Speed erhöt und vor allem die Datensicherheit.

Wer aber seine Daten wirklich sicher haben will, sollte eine sporadische Sicherung auf eine separate (normalerweise nicht gemountete) Festplatte machen, da ein Raid keinen Schutz vor einem versehentlichen ‘rm -rf /’ bietet!




19 Kommentare zu “Ubuntu Migration auf ein Software Raid 5”



  1. Gravatar-Bild 1 Sebastian Greiner 16. Sep 2006 um 23:02

    Hallo “Netzpirat”,

    vielen Dank für dieses nette Howto, welches mir bei der Migration meines Systems auf ein RAID5 sehr geholfen hat. :-)

    Grüße aus Wiesbaden (D),
    Sebastian

  2. Gravatar-Bild 2 Michael Szlapa 9. Okt 2006 um 22:15

    Vielen dank fuer dieses howto - klar, kurz und war fuer mich eine grosse Hilfe. Doch hab ich andere probleme mit meiner Raid, dir koenen fuer andere auch wichitg sein. Leider es ist zu kompliezert fuer mein Deutsch, hofentlich ist English ok…

    Set up of the raid worked perfectly as per your how to, it is very useful and clear write up, I really hope that you keep working on it and I wanted to share some feedback from the user.

    In my set up I have encountered few variances :
    - did not need to create /dev/md? nodes those were created by mdadm
    - I did put my swap file on raid as per advice from RAID how to
    - I did sudo sfdisk /dev/sdc

  3. Gravatar-Bild 3 Michael Szlapa 16. Okt 2006 um 23:15

    Unfortunately my previous post got seriously truncated … so quickly to the point:
    My new drive /dev/sda would not boot until I did:
    grub-install –recheck /dev/sda1
    setup from inside grub did not suffice.

  4. Gravatar-Bild 4 ast 29. Okt 2006 um 2:30

    sehr nice! allerdings brauchst du bei cp nur den parameter “a” - der steht für den rest mit ;)

    gruß
    ast

  5. Gravatar-Bild 5 samuel 21. Mrz 2007 um 18:45

    hallo
    vielen dank für die anleitung. wie gross hast du die /boot partition gemacht?
    muss da nur grub drin platz haben?
    grüsse
    samuel

  6. Gravatar-Bild 6 michi 21. Mrz 2007 um 19:48

    Also in der Boot Partition ist wirklich nur wenig drauf, u.a. die das Image für Grub plus Konfiguration, die Ramdisk und natürlich der Kernel. Da ich normalerweise mehrere Kernel installiert haben um bei eventuellen Problemen nach einem Upgrade wieder zurückwechseln zu können, gebe ich der Boot Partition 100MB. Das reicht für einige Images.

  7. Gravatar-Bild 7 samuel 23. Mrz 2007 um 15:28

    tip top, das raid läuft. wenn ich aber den grub in den mbr schreiben möchte wie beschrieben kriege ich immer folgende fehlermeldung:
    Unknown partition table signature
    Error 5: Partition table invalid or corrupt.
    hast du eine idee was das bedeutet? kann man das bei laufendem raid machen? ich verstehe grub leider überhaupt nicht, deshalb weiss ich nicht wo der fehler liegt. irgendeine idee?
    viele dank

  8. Gravatar-Bild 8 michi 23. Mrz 2007 um 16:49

    Grub kann bei dir irgendwie nicht auf die Partitionentabelle zugreifen. An sich kannst du auf den MBR in laufenem Betrieb reinschreiben, da das Raid in diesem Bereich nichts macht.

    Wenn ich mir die Grub Installation im Artikel nochmals anschaue, macht das aber irgendwie keinen Sinn - ich glaub ich habe da einen Fehler gemacht. Es ist schon eine Weile her mit der Installation und dem Artikel, und ich kann mich nicht mehr genau daran Erinnern. Aber der MBR hat ja nichts mit der Partition zu tun, also warum sollte man grub auf beide Partition EINER Festplatten schreiben? Es müsste doch eher in der MBR beider Festplatten sein (bzw. auf alle drei wenn das Raid schon läuft):

    sudo grub
    grub> device (hd1) /dev/sdb
    grub> root (hd1,0)
    grub> setup (hd1)
    grub> device (hd2) /dev/sdc
    grub> root (hd2,0)
    grub> setup (hd2)

    Im Grub hast du ja auch mittels TAB eine Komplettierungsfunktion, vielleicht hilft die auch weiter.

    Ansonsten kannst du es auch einmal mit grub-install versuchen: grub-install –root-directory=/boot /dev/sdb

    Gruss
    Michi

    P.S. Falls es wirklich ein Fehler war, lass es mich bitte wissen, damit ich den Artikel korrigieren kann…

  9. Gravatar-Bild 9 samuel 27. Mrz 2007 um 15:56

    hallo michi

    du hast recht grub muss auf jeder platte stehen, nicht in mehreren partitionen.

    dies war aber nicht mein problem, vermutlich lag der fehler darin, dass meine platte, auf der ich das system installiert hatte, eine andere grösse hatte als die platten des neuen raids (wollte die alte platte hinteher wegschmeissen).
    oder irgendwas mit der partitionierung war nicht sauber, ich hab die bootflags auf den ersten partitionen gesetzt gehabt, und jetzt nicht mehr.

    auf jeden fall geht jetzt alles, vielen dank für deine anleitung, ohne hätt ich alt ausgesehen.

    grüsse
    samuel

  10. Gravatar-Bild 10 Vossi 4. Mai 2007 um 1:06

    Hallo Michi,

    Sehr gute Anleitung!

    Ich hab alles in etwa so gemacht, hatte aber eine etwas andere Konfiguration (unter anderem hdX-Festplatten und die mdX-Raids sollten auch etwas anders aufgeteilt werden). Dadurch hatte ich dann einige Schwierigkeiten, weil ich teilweise nicht genau genug hingeschaut und überlegt hab. Aber trotzdem eine vorbildliche Anleitung - hab alles hinbekommen.

    Damit andere nicht die gleichen Fehler begehen bzw. im Fehlerfall Abhilfe schaffen können, noch ein paar zusätzliche Anmerkungen von mir:

    1. Falls man sich mal bei
    sudo mdadm –create /dev/md0 -n3 -l1 -f missing /dev/sdbX /dev/sdcY
    vertippt hat (z.B. falsche Raid-Nummer beim Parameter -l oder einfach das falsche Laufwerk genommen, etc.) hilft folgender Befehl:
    sudo mdadm –stop /dev/md0
    Damit wird das Raid dann wieder aufgelöst (man kann z.B. nicht zwei mal hintereinander “create” aufrufen, da sich mdadm dann beschwert, dass mdX schon existiert).

    2. Wer schon eine menu.lst für grub fertig hat (also die entsprechenden Optionen eingetragen hat), sollte besser folgendes Kommando ausführen:
    sudo grub-install –root-directory=/mnt/raid /dev/sdX
    für alle sd-Platten eingeben, anstatt die ganzen grub-Befehle reinzuhacken (Dieses Vorgehen wurde oben in einem anderen Kommentar schon erwähnt, war aber nicht ganz korrekt).

    3. In der menu.lst ist unbedingt der Parmater root=/dev/[root-partition] anzugeben (also im obigen Beispiel ist das ja /dev/md2), sonst gibt es folgende Fehlermeldungen beim Booten:
    mount:Mounting /root/dev/ on /dev/.static/def failed:no such file or direktory
    mount:Mounting /sys on /root/sys failed: No such file or directory
    mount:Mounting /proc on /root/proc failt: no such file or directory
    Target Filesystem doesn`t have /sbin/init

    4. Der Kopier-Vorgang
    cp -a mnt/noraid/* /mnt/raid
    muss unbedingt von Platten erfolgen, von denen nicht gebootet wurde, sonst gibt’s Ärger mit offenen Dateien. Ich habe dazu die “Fehl-Konfiguration” aus Nummer 3. benutzt, da dort nach dem fehlgeschlagenen Mounten der Root-Partition eine Mini-Shell zur Verfügung stand und ich dort sowohl das alte System als auch die Raid-Laufwerke mounten konnte und auch der cp-Befehl zur Verfügung stand. Etws umständlich war nur die englische Tastatur-Belegung. Besser funktioniert der Schritt natürlich mit einer Boot-CD (z.B. Knoppix).

    Beim Kopieren verzichte ich lieber auf den Parameter “-v”, da es dadurch erheblich schneller geht (das Scrollen am Bildschirm nimmt viel Zeit in Anspruch).

    In einem anderen Kommentar wurde ja schon erwähnt, dass die Option “-a” ausreichend für das Kopieren ist, da “dR” schon mit drin ist.

    5. Beim Anpassen der fstab sollte man nicht vergessen “notail” als Option anzugeben! Bei mir war es so, dass ich “default,errors=remount-ro” aus den vorherigen Einträgen stehen hatte (hab nur hdX auf mdX geändert) und dann beim Neustart ein read-only-filesystem gemounted bekam. Ich bekam dann die wunderschöne Fehlermeldung, dass der X-Server nicht gestartet werden konnte.

    6. Am Ende vor dem Einbinden der alten originalen Platte kann auf das Erstellen von Filesystemen auf /dev/sdaX verzichtet werden, da diese Partitionen keine echten Laufwerke werden, sondern nur Partitionen im Raid-Verbund sind (also sowieso wieder überschrieben werden).

    7. Als letztes möchte ich anmerken, dass ich auch gleich noch die /boot/grub/device.map angepasst habe, da sie nur zwei Einträge (hd0 und hd1) enthielt und ich dann analog zu den anderen Einträgen hd2 und hd3 ergänzt hab:
    (hd0) /dev/hda
    (hd1) /dev/hdb
    (hd2) /dev/hdc
    (hd3) /dev/hdd
    Das muss vor der Grub-Installation passieren. Damit fand grub auch alle Festplatten ordentlich. Diese Datei sollte im Normalfall aber schon alles Nötige enthalten. (Gute Lektüre dazu: http://de.opensuse.org/SDB:Der_Bootmanager_GRUB)

    Das nächste Mal werde ich mir Anleitungen etwas genauer anschauen und nicht einfach wild drauf loslegen ;-)

    Also, vielen Dank für deine Anleitung, sie hat mir trotzdem viel Zeit erspart. Und ich hoffe, meine Hinweise helfen auch jemandem.

    ~ Vossi ~

  11. Gravatar-Bild 11 labiculum 6. Mai 2007 um 13:37

    Vielen Dank für diese Anleitung. Ich trage mich schon länger mit dem Gedanken, ein RAID5 aufzubauen und bin mir nicht ganz sicher, wie man das anstellt. Sehe ich es richtig, dass hier ein RAID5 mit 3 Partitionen aufgebaut und dann eine vierte Partition nachträglich hinzugefügt wird?

    Das wäre dann genau mein Anwendungsfall: RAID mit 3 Partitionen aufbauen, Daten von der vierten Partition auf das RAID kopieren, dann die vierte Partition löschen und mit ins RAID aufnehmen. Kann mir jemand sagen, ob das funktionieren wird, bevor ich mit einem halb geRAIDeten System hängenbleibe?

  12. Gravatar-Bild 12 michi 6. Mai 2007 um 22:17

    Das RAID5 wird im degradierten Zustand mit nur 2 aktiven Platten aufgebaut, das aktive System bleibt vorerst auf der dritten Platte und wird auf das neue RAID kopiert. Erst nach einem erfolgreichem Start vom RAID System wird die dritte Platte ins RAID eingebunden, wodurch dieses nicht mehr degradiert sondern voll aktiv ist.

    @vossi: Danke für deine vielen zusätzlichen Tips!

  13. Gravatar-Bild 13 Mathias 15. Mai 2007 um 14:02

    Obwohl dies ein alter Beitrag ist und der Kommentar wahrscheinlich nicht gelesen wird, möchte ich mich bei dir für die Anleitung bedanken. Ich wäre wohl nicht so schnell auf die Idee gekommen, ein Array aufzubauen, das von sich aus zuerst einmal “degraded” ist …

    So konnte ich 150 Kröten für eine neue Festplatte sparen :)

    P.S. Lilo versteht offenbar, die “persistent superblocks” (die von mdadm automatisch erzeugt werden) auszulesen und das RAID von selbst vor dem Booten zu laden … Die Grub-Situation kenne ich nicht.

  14. Gravatar-Bild 14 Fabian 17. Jun 2007 um 16:23

    Hi.

    Auch von mir einen herzlichen Dank für dieses tolle Tutorial.

    Zwei Sachen sind mir allerdings aufgefallen:
    Wenn man z.B. über eine google-Suche ins Blog kommt, werden die code-Blöcke von deinem Blog beim ersten

  15. Gravatar-Bild 15 Ice Polar 9. Mrz 2008 um 22:12

    Hi,
    cooles How-to, echt kurz knapp und bündig. Ich habe dazu noch eine Frage:

    ice@feistybox: sudo mdadm /dev/md0 –detail
    sollte Informationen zum RAID ausgeben. Hat es auch schon mal, aber aktuell passiert nichts weiter als dass sofort der nächste prompt wieder kommt und auf eine Befehlseingabe wartet…

    ice@feistybox: cat /proc/mdstat
    liefert einige Info’s aber doch nicht soviele wie mdadm –detail.

    Was tun?
    Gruss
    Ice

  16. Gravatar-Bild 16 michi 11. Mrz 2008 um 11:21

    Du musst das –detail vor das Device nehmen:

    sudo mdadm –detail /dev/md0

    klapp bei mir wurderbar…

  17. Gravatar-Bild 17 action_papst 10. Feb 2009 um 8:49

    hi…

    ich plane mir mit nem alten pc (P4 1,5ghz, 512mb ram, geforce fx 5200, 2(evtl. 3)x40GB HDD ohne cache) ne “schnelle” ubuntu-kiste zu bauen… kann ich mit 2 platten á 40Gig was bauen oder sollte ich ne dritte 40er reinhaun ? die kiste ist schon ne ecke alt, lohnt sich ein raid mit platten ohne cache ? wäre das platzverschwendung oder würd das system dabńn voll abgehen?

    bin erstmal ne woche nicht zu hause, werd dann aber mal wieder hier vorbeisurfen und mal schaun, ob ich hier ein bisschen support kriegen konnte ^^

  18. Gravatar-Bild 18 michi 14. Feb 2009 um 21:04

    Ein RAID lohnt sich auf jeden Fall - auch ohne Cache. Mit zwei Platten kannst du ein Raid 0 oder Raid 1 einrichten. Raid 0 (Stripping) verteilt die Daten auch zwei Disks und ist dadurch einiges schneller; als Nachteil verdoppelt dich die Möglichkeit einen Plattencrash zu haben. Bei Raid 1 werden die die Daten doppelt geschrieben und ist dadurch aus langsamer; dafür er wird die Möglichkeit einen Plattencrash zu haben halbiert. Ich selber habe noch nie ein Raid 0 gehabt, von dem her kann ich den Geschwindigkeitsvorteil nicht abschätzen…

  1. 1 fabianonline.de Trackback am 17. Jun 2007 um 20:01
Kommentare sind zur Zeit deaktiviert.

September 2010
M D M D F S S
« Jun    
 12345
6789101112
13141516171819
20212223242526
27282930  

Werbung


Buttonitis