- chalblog - https://blog.is-a-geek.org -

Software RAID1 nachträglich für Datenplatten auf Ubuntu einrichten

Software RAID1 nachträglich für Datenplatten auf Ubuntu einrichten [1]Echte Hardware-Raid Controller können schon einiges an Euros kosten und passen nicht immer in das Budget eines Homeusers. Bei billigeren Alternativen handelt es sich meist um mehr oder weniger normale SATA/IDE Controller, welchen ein Bios zum Einstellen des RAIDs verpasst wurde und ohne Software nichts läuft. Diese Varianten werden auch als Fakeraid oder bei Adaptec als HostRaid bezeichnet. Eine bessere und kostengünstigere Lösung bietet hier ein Software-RAID in Linux.

Zur besseren Erklärung: Ein Fakeraid ist eigentlich nichts anderes als ein Softwareraid. Die anfallenden Rechenaufgaben werden in beiden Fällen von der CPU übernommen. Auch die verschiedensten RAID-Integrationen auf diversen Mainboards sind nur Fakeraid und es ist zum Teil unmöglich diese unter Linux oder anderen “alternativeren” Betriebssystemen zu nutzen, da es meist einfach am Support dieses hapert. Weiters kann es problematisch werden, wenn ein solcher Controller schlapp macht, denn jeder Hersteller kocht hier sein eigenes Süppchen und es gibt keinen einheitlichen Standard. Also entweder bunkert man sich einen baugleichen Ersatz oder benutzt von Anfang an das controllerunabhängige SoftwareRaid in Linux.

Ich werde euch hier an 2 Fällen zeigen, wie ihr ein solches SoftwareRaid (Raid1) auf Datenplatten (keine Systempartition) einrichten könnt.

Fall 1: Beide Platten sind leer bzw. die enthaltenen Daten werden nicht mehr benötigt.

Fall 2: Wir bauen eine zusäztliche Platte ein und wollen mit einer bespielten Festplatte ein Raid erzeugen.

In beiden Fällen wird “mdadm” benötigt, also installieren wir das Paket mit:

sudo apt-get install mdadm

Fall 1

Nehmen wir an die eigebauten Festplatten werden als “sdb” und “sdc” erkannt. Die vorhandenen Festplatten kann man sich mittels fdisk anzeigen lassen.

sudo fdisk -l

Haben wir die Festplattenbezeichnungen herausgefunden, starten wir zuerst das Partitionsprogramm mit der ersten Platte (abweichende Bezeichnung anpassen):

sudo fdisk /dev/sdb

Wir überprüfen jetzt ob schon eine oder mehrere Partitionen vorhanden sind, indem wir “p” und “Enter” drücken.

Command (m for help): p

Sind welche vorhanden, löschen wir diese mit “d” für “delete”.

Command (m for help): d

Erst danach erstellen wir eine neue Primary-Partition und markieren diese als Raid. Mit “n” erstellt man eine neue Partition und mit “p” wird dies eine primäre. Als Partitionnummer geben wir “1” ein und die restlichen Abfragen werden einfach mit “Enter” durchbestätigt.

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-243201, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-243201, default 243201):
Using default value 243201

Mit der Option “t” legt man den Partitionstyp fest, welcher in unserem Fall “fd” also Linux Raid ist.

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Bevor wir jetzt die neue Partitionstabelle auf die Festplatte schreiben lassen (“w“), gehen wir noch einmal in uns und überprüfen ob wir die richtige Platte erwischt haben.

Command (m for help): w

Die selben Schritte führt man nun mit der nächsten Festplatte aus.

Sind beide partitioniert, können wir das Raid1 erstellen:

sudo mdadm -C /dev/md0 --force --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

Das Raid wird nur noch formatiert (hier ext3) …

sudo mkfs -t ext3 /dev/md0

… und man kann es wie jede andere Partition (auch in der fstab) mounten.

sudo mount /dev/md0 /dein/verzeichnis

Mit dem Befehl …

sudo mdadm --detail /dev/md0

… kann man sich den derzeitigen Status des RAIDs anzeigen lassen:

/dev/md0:
        Version : 00.90
  Creation Time : Wed Feb 22 21:23:36 2012
     Raid Level : raid1
     Array Size : 488383936 (465.76 GiB 500.11 GB)
  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Feb 23 01:33:35 2012
          State : clean, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 17% complete

           UUID : 55b06196:b9407bc8:728f5ce2:8aeb1abd (local to host slave)
         Events : 0.64

    Number   Major   Minor   RaidDevice State
       0       8       81        0      active sync   /dev/sdf1
       2       8       33        1      spare rebuilding   /dev/sdc1

Damit “md0” auch nach dem Restart noch die selbe Bezeichnung hat führen wir diesen Befehl aus:

sudo mdadm --detail --scan

Wir kopieren uns die letzte Zeile der Ausgabe, welche ungefähr so aussieht:

ARRAY /dev/md0 level=raid1 num-devices=2 metadata=00.90 UUID=55b06196:b9407bc8:728f5ce2:8aeb1abd

Dann öffnen wir die Konfigurationsdatei von “mdadm” …

sudo nano /etc/mdadm/mdadm.conf

… und fügen die kopierte Zeile am Ende der Datei ein (Nano: speichern mit “Strg+o“, schließen mit “Strg+x”).

Fall 2

Nehmen wir wieder an, die bereits mit Daten befüllte Platte nennt sich “sdb” und die neu hinzugefügte oder leere “sdc”. Dies können wir wieder mit Hilfe von “fdisk” prüfen.

sudo fdisk -l

Wir kopieren die Partitionstabelle der existierenden (befüllten) Festplatte auf die neue:

sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sdc

Die kopierte Partition markieren wir mit …

sudo fdisk /dev/sdc

… als Linux Raid Partition (also “t“, “fd” und “w” für Partitionstabelle schreiben)

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd

Das Raid erstellen wir vorerst mit einem Platzhalter (missing), da wir die Daten dieser Festplatte noch kopieren wollen.

sudo mdadm -C /dev/md0 --force --level=1 --raid-devices=2 /dev/sdc1 missing

Das erstellte Raid hängen wir nun ein, indem wir ein Verzeichnis erstellen und danach den mount Befehl ausführen:

sudo mkdir /tmp/raid
sudo mount /dev/md0 /tmp/raid

Dann kopieren wir die vorhandenen Daten in das Raid:

cp -Rv /alte/platte/* /tmp/raid/

Nun markieren wir auch die diese Partiton mit “fdisk” …

sudo fdisk /dev/sdb

… als Linux Raid Partition (also wieder “t“, “fd” und “w” für Partitionstabelle schreiben)

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd

Nach fertiggestellter Kopierorgie und dem Ändern des Patitionstyps können wir auch die zweite Platte dem Raid hinzufügen:

sudo mdadm /dev/md0 --add /dev/sdb1

Das Raid synct sich jetzt und dies können wir mit diesem Befehl beobachten:

sudo mdadm --detail /dev/md0

Damit “md0” auch nach dem Restart noch die selbe Bezeichnung hat führen wir diesen Befehl aus:

sudo mdadm --detail --scan

Wir kopieren uns die letzte Zeile der Ausgabe, welche ungefähr so aussieht:

ARRAY /dev/md0 level=raid1 num-devices=2 metadata=00.90 UUID=55b06196:b9407bc8:728f5ce2:8aeb1abd

Dann öffnen wir die Konfigurationsdatei von “mdadm” …

sudo nano /etc/mdadm/mdadm.conf

… und fügen die kopierte Zeile am Ende der Datei ein (Nano: speichern mit “Strg+o“, schließen mit “Strg+x”).

Solltet die alte Platte in der fstab eingetragen gewesen sein, müsst ihr diesen Eintrag natürlich anpassen.

Eine HDD aus dem Raid entfernen

Angenommen wir wollen “sdc” aus unserem RAID-Verbund entfernen, müssen wir diese zuerst als fehlerhaft deklarieren:

sudo mdadm /dev/md0 --set-faulty /dev/sdc1

Danach wird diese aus dem RAID-Verbund entfernt:

sudo mdadm /dev/md0 -r /dev/sdc1

Um das Problem der automatischen Wiedererkennung der Raid-Partition auf der Platte löschen wir den Superblock:

sudo mdadm --zero-superblock /dev/sdc1

RAID auflösen

Etwaige vorhandene Daten sollten vorher gesichert werden. Um das RAID aufzulösen deaktivieren wir es …

sudo mdadm --stop /dev/md0

… und löschen dann ebenfalls die Superblöcke der Platten.

sudo mdadm --zero-superblock /dev/sdX1

 

Viel Spaß mit dem RAID!