Homeserver 12: RAID-Grundlagen und Festplatten partitionieren

Kommen wir nun also zu einem der Kernaufgaben des Servers, das Speichern von Daten. Dazu ist es nötig, in den Server mehrere Platten einzubauen und diese als ein Software-RAID anzusprechen. Es gibt auch Hardware RAID-Kontroller, aber die sind zum einen Teuer, und falls man mal das System umbauen muss, evtl. inkompatibel. Muss also mal der RAID-Kontroller ausgetauscht werden, sind die Daten evtl. weg. Daher werde ich mit den Mitteln des Linux-Systems ein Software-RAID aufbauen. Wenn hier z. B. die Hardware ausgetauscht werden muss und Linux neu installiert wird, kann man das RAID recht einfach wieder zusammenstellen und wieder in Betrieb nehmen.

Da dieses Thema doch recht umfangreich ist, werde ich es in mehrere Teile aufteilen.

Vorüberlegungen

Ich möchte gerne ein RAID mit sehr viel Speicherplatz, schnellem Zugriff und einer gewissen Ausfallsicherheit. Also bietet sich für mich ein RAID Level 5, kurz RAID5, an.

Für eine Erklärung, was RAID ist und was die einzelnen RAID Levels sind und wofür sie gedacht sind, könnt ihr euch ja mal den Wikipedia-Artikel zu RAID durchlesen. Und im Linux RAID Wiki gibt es eine sehr ausführliche Anleitung zum Thema Software-RAID unter Linux. Das Linux RAID Wiki ist aber in Englisch.

Für ein RAID5 benötige ich ein Minimum von 3 Festplatten, vorzugsweise gleicher Größe und gleicher Geschwindigkeit. Es ist nicht so tragisch, wenn es Platten unterschiedlicher Hersteller sind, aber die Gesamtleistung und Größe des RAIDs richtet sich nach der kleinsten und/oder langsamsten Platte. Es ist also vorzuziehen, Festplatten des gleichen Herstellers und Modells zu nehmen.

Außerdem will ich das RAID hinterher im Linux-Verzeichnisbaum unter /raid1 einhängen. Das ist nummeriert für den Fall, dass ich statt einem großen RAID lieber mehrere kleine RAIDs anlegen möchte. Zunächst will ich aber ein großes RAID anlegen.

Vorbereitung

Um unser RAID also anlegen zu können, müssen mehrere Dinge getan werden. Zunächst mal muss der Mountpunkt, also der Ordner, wo das RAID später eingehängt wird, erstellt werden:

sudo mkdir /raid1

Dies legt im Hauptverzeichnis den Ordner „raid1“ an, in den wir später das RAID einhängen werden.

Nun muss noch die RAID-Verwaltung installiert werden. Dies ist unter Linux MDADM. Damit werden alle Werkzeuge und Module installiert, die für das Einrichten des RAIDs und dessen Betrieb notwendig sind.

sudo apt-get install mdadm

Hierauf öffnet sich ein Fenster, in dem mehrere Fragen zur Konfiguration von MDADM gestellt werden. Im ersten Fenster wird uns erklärt, was wir eingeben müssen, wenn unser System auf dem RAID installiert ist. Es geht darum, welches RAID schon beim Bootvorgang gestartet werden soll. Die einzige Schaltfläche hier ist OK, die wir auch drücken. Hier kommt nun das Eingabefeld, in das wir entweder „all“ für alle RAIDs starten beim Bootvorgang, „none“ für keines oder ein bestimmtes Array angeben können. Zum Boottzeitpunkt muss noch kein Array gestartet werden, da unser Array kein Systemdatenträger, sondern nur für Nutzerdaten gedacht ist. Also trage ich hier „none“ ein.

Im nächsten Fenster werden wir gefragt, ob wir alle in der Konfiguration eingetragenen RAIDs nach dem Systemstart automatisch starten wollen. Das möchten wir natürlich, daher gebe ich hier „Ja“ an. Wie wir das RAID in die Konfigurationsdatei eintragen, kommt später noch dran.

Eine Kleinigkeit wollen wir dann aber doch noch in der Konfigurationsdatei von MDADM ändern. Ich möchte, dass mir MDADM eine Mail schickt, wenn es zu Problemen mit dem RAID kommt. Es gibt in der Datei bereits eine Zeile „MAILADDR“, die wir modifizieren, und eine Zeile hinzufügen. Die Konfigurationsdatei für MDADM öffnen wir mit:

sudo nano /etc/mdadm/mdadm.conf

Und die Zeilen sehen nach unserer Änderung dann so aus:

MAILADDR eure_mailadresse@gmx.de
MAILFROM mdadm

Die MAILFROM-Zeile sorgt dafür, dass die Mail auch erkennbar von MDADM kommt. Dann noch alles mit STRG+X speichern, fertig.

Festplatten vorbereiten

Achtet beim Anschließen der Platten darauf, an welchen Anschluss ihr sie angeschlossen habt. Das wird sehr wichtig, wenn es darum geht, eine defekte Platte auszubauen. Bei mir sind die 6 SATA-Anschlüsse am Board so aufgebaut: Senkrecht sind 3 Blöcke mit je 2 Anschlüssen. Oben rechts Port 0, links Port 1, darunter rechts Port 2, links Port 3, darunter rechts Port 4, links Port 5. Die Festplatten werden bei mir im Gehäuse von unten nach oben eingebaut. Festplatte an Port 1 ist also ganz unten, Festplatte an Port 5 ganz oben im Rahmen des Gehäuses.

Wenn eine Festplatte defekt ist, so können wir mit lshw abfragen, an welchem Port sie angeschlossen ist. Das werden wir später auch noch ausprobieren, und damit ihr nicht die falsche Platte ausbaut, solltet ihr euch, falls nicht anders möglich, von einem Sehenden erklären lassen, welcher SATA-Anschluss welche Nummer hat.

An meinem Port 0 ist die SSD angeschlossen, von der wir booten. An Port 1 bis 5 kommen die platten dran.

Ich habe jetzt also 3 Seagate ST4000VN000 Festplatten mit je 4 TB eingebaut und von Port 1 bis 3 angeschlossen. Nun müssen diese Platten noch partitioniert werden.

Ausrichtung der Partitionen

Das Problem der Ausrichtung der Partition, auch Alignment genannt, ist gar nicht so zu unterschätzen. Vor allem bei SSDs kommt das sehr zum Tragen.

SSDs lesen und schreiben immer ganze Blöcke, die zwischen 4 KB und 8 KB groß sein können. Ein Sektor hat aber nur 512 Bytes, daher sind erst 8 Sektoren 4 KB. Nun beginnt eine Partition aber nicht bei 4 KB, weil davor noch Platz für diverse technische Daten bleiben muss. Oft beginnt bei so großen Platten die eigentliche Partition bei einem Sektor weit über 1024. Das Tool parted kann die Ausrichtung der Partition automatisch vornehmen, bei fdisk müssen wir Start- und Endsektor angeben. Und wenn wir eine Partition so anlegen, dass sie in der Mitte eines Blocks beginnt, passiert folgendes: Da die Daten, die nun gelesen und geschrieben werden sollen jetzt auf 2 physische Blöcke verteilt sind, werden 2 Blöcke gelesen und auch 2 Blöcke geschrieben. Das macht die SSD nicht nur langsamer, sondern halbiert ihre Lebensdauer. Denn wo nur 1 Block zu belasten war, werden jetzt 2 Blöcke belastet.

Bei magnetischen Festplatten ist das nicht ganz so tragisch, verlangsamt ihre Leistung aber doch merklich. Gerade dann, wenn viel gelesen und geschrieben wird, fällt das auf. Daher sollte man die Partitionen auch hier korrekt ausrichten.

Die meisten Tools, die ich unter Windows gesehen habe, machen das auch schon automatisch, fdisk geht aber davon aus, dass man weiß, was man tut. Mit viel lesen könnte ich mir evtl. das Wissen aneignen, ich habe aber ehrlich gesagt keine Lust dazu. 🙂 Daher nutze ich parted, das kümmert sich schon um das richtige Alignment.

Wir können das mit der SSD übrigens mal testen. Startet mal partedt:

sudo parted /dev/sda

Hier werden Kommandos zum Steuern von parted eingegeben. Um zu überprüfen, ob /dev/sda1 also korrekt ausgerichtet ist, geben wir folgendes ein:

align-check optimal 1

Wenn die Ausgabe „1 aligned“ ist, dann ist die Partition korrekt ausgerichtet.

Mit dem Befehl „quit“ verlassen wir parted wieder.

Festplatte partitionieren

Was ihr hier macht, macht bitte mit der größten Vorsicht. Überprüft alles doppelt und dreifach, wenn es sein muss. Wenn ihr z. B. die Partitionstabelle der falschen Disk löscht, sind alle Daten futsch! Geht also mit besonderer Sorgfalt beim partitionieren vor. Überprüft mit dem Befehl „print“ innerhalb von parted lieber mehrmals, ob ihr wirklich die richtige Platte manipuliert. Und bedenkt, ihr handelt auf eigene Gefahr. So, nachdem das gesagt ist, kann’s los gehen.

Am Beispiel von /dev/sdb, also der ersten Platte des zukünftigen RAIDs, zeige ich euch nun, wie die Platte partitioniert werden muss.

Nach mehreren Experimenten habe ich mich dazu entschlossen, weder fdisk noch parted zum Partitionieren der Platten zu nutzen. fdisk kann nicht mit GPT-Partitionstabellen umgehen, und parted ist teils wegen seiner Befehle umständlich. Stattdessen habe ich gdisk entdeckt, was im Grunde eine Weiterentwicklung von fdisk ist, wodurch auch GPT-Partitionstabellen unterstützt werden. Allerdings muss gdisk erst installiert werden:

sudo apt-get install gdisk

Noch ein Wort zu GPT-Partitionstabellen: Bisher waren die Partitionstabellen im Format MBR, Master Boot Record, angelegt. Diese haben aber gewisse Begrenzungen, die sie für größere Platten eher ungeeignet macht. Daher wird oft für Platten, die größer als 2 TB sind , die GPT-Partitionstabelle verwendet. Näheres zu GPT-Partitionstabellen könnt ihr im entsprechenden Wikipedia-Artikel nachlesen.

Also rufen wir zum Partitionieren der ersten platte des zukünftigen RAIDs das Programm so auf:

sudo gdisk /dev/sdb

Nun könnt ihr mit einzelnen Buchstaben die Befehle ausführen. Um euch alle verfügbaren Befehle anzeigen zu lassen, gebt ihr ein „?“ ein.

Da ich diese Platte schon mal für was anderes genutzt hatte, und auch, wenn man sich nicht darüber sicher ist, legt man einfach eine neue Partitionstabelle an. Dazu drückt ihr einfach die Taste „o“ und Enter. Anschließend werdet ihr gefragt, ob ihr das wirklich wollt, weil dann die Partitionstabelle überschrieben wird. Dies bestätigt ihr mit „y“. wie gesagt, bei mir ist ja alles noch englisch.

Bevor ihr das macht, schaut mit dem Befehl „p“ nach, ob ihr wirklich die richtige Platte gewählt habt. Nicht, dass ihr eine wichtige Datenplatte kaputt macht.

Mit der Taste „n“ legt ihr eine neue Partition an. Anschließend kommen noch einige Fragen:

  • Partitionsnummer?: Hier gebt ihr eine 1 ein.
  • Erster Sektor: Der Standardwert ist bei meiner Platte 2048, und den übernehme ich, ohne etwas einzugeben. Dadurch ist das Alignment der Partition OK.
  • Letzter Sektor: Der Standard ist der letzte verfügbare Sektor auf der Platte. Ihr könntet aber auch eine Größe angeben, oder z. B. -100m, so dass am Ende etwa 100 MB frei bleiben. Ich übernehme den Standardwert mit Enter.
  • Partitionstyp: Hier gebe ich „FD00“ an.

In vielen Anleitungen lese ich, dass der Typ der Partition auf 0xFD gestellt werden soll. Das sei der richtige Partitionstyp für RAIDs.

Nun können wir uns mit dem Befehl „p“ das Ergebnis angucken. Und wenn es uns gefällt, können wir es mit „w“ auf die platte schreiben und das Programm verlassen.

Diesen Vorgang müssen wir jetzt mit allen 3 Festplatten durchführen, wobei, die erste haben wir ja schon geschafft. 🙂

Aufbau des RAIDs

Wenn nun alle 3 Festplatten korrekt partitioniert sind, können wir im nächsten Teil das eigentliche RAID aufbauen, ein Dateisystem anlegen und, bevor noch wirklich wichtige Daten auf dem RAID sind, ein paar Experimente machen. Wie z. B. wie erkennt man eine fehlerhafte Platte und welche von denen ist es denn nun? Das sind Dinge, die man gemacht haben sollte, bevor es um wirklich wichtige Daten geht… 🙂