Linux Software-RAID

Redundant Array of Independend Disks ist ein Zusammenschluss mehrerer Festplatten zum Erreichen höherer Geschwindigkeiten, Datenausfallsicherheit oder beidem.

In diesem Kapitel zeige ich wie man ein RAID-1 (Mirror) anlegt, eine defekte Platte tauscht und eine Hot-Spare Platte (Reserveplatte) anlegt.

 

Grundsätzliches

Ein RAID ist keine Datensicherung! Man glaubt gar nicht was es für Einfallspinsel gibt. Da wird aus einem Server eine Platte einfach gezogen (RAID-1) und als Backup vom System weggelegt. Dabei muss man mal einige Dinge klar stellen.

 

Warum ein RAID-1?

Raid-1 ist ein Spiegeln von Festplatten. Zwei physische Festplatten werden zu einem logischen Laufwerk zusammengefasst, welches sich partitionieren und formatieren lässt. Dann kann man es mounten und ganz normal darauf arbeiten. Der Clou ist, dass alle Daten, die gespeichert, geändert und gelöscht werden, auf beiden Festplatten zur gleichen Zeit geschrieben werden. Fällt mal eine Festplatte aus so ist die zweite, absolut identische Festplatte vorhanden, dass der Benutzer weiter arbeiten kann.

 

Was brauchen wir?

Ich habe bereits ein laufendes System und möchte ihm ein RAID-1 mit zwei gleichen Festplatten geben, um es in das Verzeichnis /home/public/share/ zu mounten.  Die Platten sind bereits eingebaut und werden mit sdb und sdc im Sytem angezeigt.

Falls du wissen möchtest wie man ein RAID-1 nachträglich in sein System integriert, so musst du ganz nach unten scrollen zum Punkt "Raid-1 nachträglich installieren".

Zunächst müssen wir mdadm und parted installieren. mdadm ist die Schnittstelle zu den RAID-Funktionen des Kernels und ermöglicht uns die Konfiguration. Folgende Zeile installiert unsere Werkzeuge:

apt-get install mdadm parted

Einrichtung des RAID-1

Ich persönlich arbeite gerne  mit cfdisk oder fdisk, aber das mag nun mal nicht jeder. In diesem Beispiel wählen wir parted aus. Wir bereiten damit nun die Festplatten vor. Dabei wird im ersten Schritt ein GPT angelegt. Dann wird eine primäre Partition angelegt, die die gesamte Festplatte verwendet. Diese Partition bekommt dann das "Raid-Flag", damit das System weiß, dass es für ein RAID ist.

parted /dev/sdb mklabel gpt

parted -a optimal -- /dev/sdb mkpart primary "0% 100%"

parted /dev/sdb set 1 raid on

Das selbe Spiel wiederholen, allerdings dieses mal mit sdc.

Danach erstellen wir das RAID-Device. Dabei werden die beiden physikalischen Festplatten zu einem logischen Laufwerk zusammengefasst (md0).

mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2  /dev/sdb1  /dev/sdc1

Ab jetzt werden beide Festplatten synchronisiert. Das lässt sich mit folgender Zeile überprüfen:

watch cat /proc/mdstat

Nun kann das neu erstellte logische Gerät (md0) formatiert und gemountet werden.

mkfs.ext4 /dev/md0

mount /dev/md0  /home/public/share/

Die Festplatten sind synchronisiert, formatiert und in das Dateisystem eingebunden. Ab jetzt kann mit ihnen gearbeitet werden. Ein Ausfall einer einzelnen Festplatte wird abgefedert.

 

Ausfall einer Festplatte

Jetzt ist das passiert, wofür man sich vorher gewappnet hat. Eine Festplatte ist ausgefallen und muss getauscht werden. Wenn Festplatten ausfallen, dann passiert sowas immer

Wann denn bitte sonst? Entspannt gehen wir zum Server und loggen uns ein. :-) Dann schauen wir uns an was uns mdadm zu sagen hat. In diesem Beispiel ist die sdb defekt.

mdadm --detail /dev/md0

root@kobold:/mnt# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Aug 12 22:32:23 2017
     Raid Level : raid1
     Array Size : 10475520 (9.99 GiB 10.73 GB)
  Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Sun Aug 13 13:22:46 2017
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : kobold:0  (local to host kobold)
           UUID : 2f85c75e:9e2510a3:01cbebba:08413e5d
         Events : 40

    Number   Major   Minor   RaidDevice State
       0     254        1        0      active sync   /dev/sda1
       -       0        0        1      removed

 

 Verräterische Stellen habe ich mal gelb markiert. Wie man sieht fehlt offensichtlich eine Festplatte. Das "removed" weist darauf hin, dass die Festplatte vom Kernel schon aus dem Raid entfernt wurde. Jetzt wird es Zeit die alte Platte herauszuziehen und eine neue gleichwertige reinzustecken. Im besten Falle sogar eine identische Festplatte mit gleicher Seriennummer.

Ist sie erst mal eingesteckt, dann muss man sie wieder partitionieren und in das RAID hinzufügen:

parted /dev/sdb mklabel gpt

parted -a optimal -- /dev/sdb mkpart primary "0% 100%"

parted /dev/sdb set 1 raid on

Mit der folgenden Zeile wird sie dann hinzugefügt:

mdadm /dev/md0 --add /dev/sdb

Sofort können wir prüfen, ob sie gesynct wird:

watch cat /proc/mdstat

Ab jetzt sollte alles wieder gut sein. Außer ein paar Euro für eine neue Platte haben wir sonst nichts verloren. Es hätte schlimmer sein können. :-)

 

Hot-Spare Festplatte - Eine Reserver einbauen

Nun ist das ja so, dass Festplatte eben dann kaputt gehen, wenn man es nicht brauchen kann. Ein RAID stundenlang oder sogar tagelang in defektem Zustand laufen zu lassen ist nicht das gelbe vom Ei, da es langsam arbeitet und die ganze Performance des Servers in den Keller ziehen kann. Obendrein ist das so, dass niemand weiß wann die nächste Festplatte stirbt. Aus diesem Grund tut mal sich gut daran, wenn man eine weitere Festplatte als "heiße Reserve" im Sytem hat und das System im Falle eines Ausfalls selbst diese Platte einbinden kann. So eine heiße Reserve nennt man auch Hot Spare Disk. Der Vorteil ist jetzt klar, aber nicht zu vergessen, dass so eine Disk oft über Jahre hinweg mitläuft und sie über die Zeit ebenfalls verschleißt. Dieser Tatsache sollte man sich immer bewusst sein.

 

Hot Spare Disk einbinden

Das ist so leicht wie nichts anderes. Im Grund ist die Vorgehensweise genau so als würde man gerade eine neue Platte einbinden, die eine defekte ersetzen soll. Ist sie erst mal eingesteckt, dann wiederholen wir die folgenden Schritte:

Ist sie erst mal eingesteckt, dann muss man sie wieder partitionieren und in das RAID hinzufügen:

parted /dev/sdd mklabel gpt

parted -a optimal -- /dev/sdd mkpart primary "0% 100%"

parted /dev/sdd set 1 raid on

mdadm /dev/md0 --add /dev/sdd1

Jetzt haben wir die dritte Platte zum RAID-1 hinzugefügt. In einer der oberen Zeilen haben wir ja die Anzahl der Disks definiert, die zum RAID-1 gehören (mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2  /dev/sdb1  /dev/sdc1). Nun packen wir eine dritte Festplatte hinzu, aber in den RAID-Devices steht =2. Die dritte Platte versteht das System automatisch als Hot Spare Disk.

Schauen wir uns das mal genauer an:

cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdd1[4](S) sdb1[3] sdc1[2]
      10476480 blocks super 1.2 [2/2] [UU]

Hinter der Angabe der Disk steht noch ein (S) was bedeutet, dass diese Disk als Hot Spare verstanden wird. Fällt nun eine andere Disk aus, so wird sie automatisch synchronisiert und als Ersatzfestplatte verwendet.

 

Check des RAID-Sets

Ab und an sollte man das RAID ruhig mal einer Prüfung auf Konsistenz unterziehen, um Überraschungen zu vermeiden. So eine Prüfung läuft über einige Stunden, je nach Größe der Festplatten, aber es lohnt sich.

Eine Prüfung des Arrays stößt man wie folgt an:

/usr/share/mdadm/checkarray --status /dev/md0

Zwischendurch ruhig mal den Stand der Dinge anschauen mit

mdadm -D /dev/md0

 

 

Raid-1 nachträglich installieren (noch nicht fertig)

Es kann ja sein, dass man selbst vergessen hat das RAID-1 bei der Installation der Distribution zu installieren oder man erhält ein fertiges System und dem fehlt eben das RAID. Hier zeige ich wie man es nachträglich noch installiert bekommt.

 

Festplatte /dev/sdb vorbereiten

Zunächst muss mdadm installiert werden. Danach prüfen, ob es funktioniert. Das erreicht man mit:

apt-get install initramfs-tools mdadm -y

cat /proc/mdstat

Im zweiten Befehl erhalten wir die Information zurück dass dort kein RAID installiert ist. Das ist korrekt und bestätigt uns auch gleichzeitig, dass mdadm funktioniert.

Im nächsten Schritt müssen wir die neu hinzugefügte Festplatte wieder partitionieren. Je nach Menge der Partitionen macht es selten Spaß alles genau so einzurichten wie die erste Festplatte ist. Wir können uns aber die Partitionstabelle auch einfach kopieren. Das ist viel bequemer und obendrein viel sicherer.

sfdisk -d /dev/sda | sfdisk /dev/sdb

Im nächsten Schritt müssen wir wieder das RAID-Flag auf die Partitionen setzen, dass diese auch als RAID-Partitionen erkannt werden können. Dazu greifen wir einfach mal zu den Zeilen weiter oben.

parted /dev/sdd set 1 raid on

Stammt die neue Festplatte möglicherweise aus einem anderen RAID, dann muss auf jeden Fall der Superblock neu geschrieben werden.

mdadm --zero-superblock /dev/sdb1

mdadm --zero-superblock /dev/sdb2

mdadm --zero-superblock /dev/sdb3

mdadm --zero-superblock ... usw...

Die Rückgabeinformation "unrecognised md component device - /dev/sdb1" ist richtig und für uns ausreichend. Es ist keine Fehlermeldung. :-)

 

RAID Arrays erstellen

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1

mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2

mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb3