Homeserver 18: Das RAID erweitern

Mein RAID läuft ja als RAID 5. Ich habe das RAID mit der Mindestanzahl von drei Festplatten erstellt. Somit war ich in der Lage, den Server bereits zu nutzen, da ich ja schon Daten auf ihm lagern kann. Mein Time Machine Backup läuft darauf, Daten werden Stück für Stück kopiert und später kommen noch Webserver-Daten dazu.

Der Server war aber von Anfang an für ein wesentlich größeres RAID ausgelegt. Denn nicht nur für mich, sondern auch für den Rest meiner Familie, dient der Server als Datenablage. Und da kommt bei HD-Camcordern und hochauflösenden Digitalkameras so einiges an Daten zusammen. Das RAID wird jetzt also, je nach Bedarf, erweitert.

Vorher

Schauen wir uns doch mal an, wie viel Speicherplatz wir auf dem RAID gerade haben. Dazu benutze ich den Befehl „df“, kann man sich gut mit „Disk Free“ als Eselsbrücke merken. 🙂

df -h /raid1

Das vorangestellte sudo ist hier nicht nötig. Der Parameter -h sorgt dafür, dass die Ausgabe für Menschen lesbar wird. Sonst bekommen wir monströse Zahlen, die nur die Dateisystemblöcke angeben. Rechnen dürfen wir dann selber… Und zum Schluss das Verzeichnis /raid1, an dem ja unser RAID angedockt ist. Die Ausgabe sieht dann so aus:

Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        7.3T  4.4T  2.9T  62% /raid1

Sagt doch eigentlich alles, oder? Um die 62 % sind schon belegt, weil ich schon mit dem Kopieren der Daten angefangen habe. Ich werde aber nicht fertig, weil mir der Speicherplatz nicht ausreichen wird, das weiß ich jetzt schon. Die Zahl, die für uns jetzt interessant ist, ist die Zahl unter Size, also 7,3T (Terrabyte). Nur, damit wir später den Unterschied sehen.

RAID Erweitern

Jetzt werde ich dem RAID also zwei Festplatten hinzufügen. Wieso gerade zwei? Nun, eine, damit ich alle Daten von meinem QNAP NAS kopieren kann. Danach wird das QNAP NAS nicht mehr benötigt. Dort steckt aber schon eine ST4000VN000 drin, weil ich ursprünglich dessen RAID neu anlegen wollte. Später habe ich mich dann aber für den Bau dieses Servers entschieden. Diese Festplatte nehme ich dann natürlich aus dem NAS raus und baue sie in meinen Server ein. Hier wird nix verschwendet… 🙂

Festplatten vorbereiten

Genau so, wie ich im Teil 12 beschrieben habe, müssen nun die neuen Festplatten partitioniert werden. Das sind dann die Laufwerke /dev/sde und /dev/sdf. Insbesondere bei der Festplatte, die ich aus dem QNAP NAS rausgenommen habe muss ich darauf achten, dessen Partitionstabelle mit O zu löschen und mit einer leeren zu überschreiben. Danach läuft alles wie bisher ab, Partition erstellen, Typ auf FD00 stellen und Daten mit W auf die Platten schreiben.

Festplatten in den RAID-Verbund aufnehmen

Dies passiert in mehreren Schritten. Laut einer Webseite im Internet ist es möglich, den Prozess auch mit mehreren Festplatten gleichzeitig durchzuführen. Das ist mir auch lieber, weil ich sonst für jede Festplatte erst warten müsste, bis der Synchronisationsvorgang abgeschlossen ist. Das kann Tage dauern. Die Wartezeit halbiert sich quasi, wenn man das nur ein mal tun muss… Ich Probiere es mal, falls es nicht klappt, dann halt einzeln.

Um die nun partitionierten Festplatten in den RAID-Verbund aufzunehmen, nutze ich diesen Befehl:

sudo mdadm --add /dev/md0 /dev/sde1 /dev/sdf1

Mit dem Parameter --add wird MDADM mitgeteilt, dass nun neue Festplatten hinzugefügt werden, nämlich dem RAID-Verbund /dev/md0. Und die Platten sind /dev/sde1 und /dev/sdf1.

Wir können uns auch gleich angucken, ob das zumindest schon mal geklappt hat, indem wir uns mal die mdstat angucken. Die sieht nach dieser Aktion nämlich so aus:

Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdf1[6](S) sde1[5](S) sdb1[0] sdd1[3] sdc1[4]
      7813772544 blocks super 1.2 level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

Wie ihr jetzt sehen könnt, sind die Platten sde1 und sdf1 als Spares, also als Ersatzplatten hinzugefügt worden. Daher steht neben diesen Platten ein S in Klammern. Würde jetzt eine der ursprünglichen aktiven Platten ausfallen, würde MDADM sofort eine der Ersatzplatten nehmen, um das RAID wiederherzustellen. Das will ich ja nicht, also muss ich jetzt das RAID auf die beiden zusätzlichen platten erweitern.

RAID vergrößern

Der Grow-Modus von MDADM kann ziemlich viel. Man kann viele Parameter des RAIDs ändern. Wenn man z. B. merkt, die Chunk-Size von 128K ist zu klein, könnte man sie auf 512K erweitern oder sogar auf 64K verkleinern. Auch ein Wechsel des RAID-Level wäre möglich. Das will ich jetzt gar nicht machen, ich will die Anzahl der an dem RAID beteiligten Platten erhöhen.

sudo mdadm --grow /dev/md0 --raid-devices=5

Zuvor waren es ja 3, nun habe ich es auf 5 Platten erweitert. Die Platten sind bereits im Verbund, also erweitert MDADM das RAID auf die Spares, die schon hinzugefügt wurden.

MDADM fängt sofort damit an, das RAID auf die zusätzlichen Platten auszuweiten. Das kann man an der mdstat-Datei gut sehen, die jetzt so aussieht:

Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdf1[6] sde1[5] sdb1[0] sdd1[3] sdc1[4]
      7813772544 blocks super 1.2 level 5, 128k chunk, algorithm 2 [5/5] [UUUUU]
      [>....................]  reshape =  0.0% (927744/3906886272) finish=2565.2min speed=25377K/sec

unused devices: <none>

Das kann jetzt eine gehörige Zeit dauern. MDADM verteilt die Daten und ihre Wiederherstellungsinformationen jetzt auf die 5 Platten. Hierbei müssen eine ganze Menge Daten bewegt werden.

Die ersten paar Sekunden sind kritisch. Fällt jetzt der Strom aus, oder sonst irgendwas passiert, ist das RAID futsch. Das sind, wie gesagt, nur die ersten paar Sekunden, so um die 5 bis 10. Danach ist das RAID wieder ausfallsicher. Man könnte jetzt den Rechner sogar herunterfahren, und MDADM würde nach dem Einschalten dort weitermachen. Ich lasse ihn aber mal durchlaufen, der Prozess dauert so schon lange genug.

Auch auf die Daten kann man zugreifen. Aber auch hier, jeder Zugriff verlangsamt die Rekonstruktion des RAIDs. Und fertig sind wir ja noch nicht, es müssen noch ein paar Dinge erledigt werden. Dies können wir aber erst machen, wenn das RAID fertig ist mit Daten Umverteilen.

Man kann sich den Fortschritt des Reshape auch ganz bequem anschauen, ohne dass man ständig die mdstat-Datei aufrufen muss. Hierfür gibt es den Watch-Befehl. Der Aufruf sähe so aus:

watch cat /proc/mdstat

Das Terminal-Fenster wird jetzt komplett geleert und die mdstat-Datei angezeigt. Alle zwei Sekunden wird die Anzeige aktualisiert. Die Anzeige der Datei unterbricht man mit STRG+C, somit steht man wieder im Terminal-Fenster und kann weitere Befehle eingeben.

Natürlich macht es keinen Sinn, sich den Fortschritt die ganze Zeit anzugucken, aber wenn man mal über eine Minute sich anschauen will, was da passiert, ist das eine bequemere Lösung, als die Datei ständig immer wieder aufzurufen.

Dateisystem anpassen

Na, das hat ja mal richtig lange gedauert! Anfänglich sah es so aus, als bräuchte er ganze 2 Tage, aber so ab 50 % hat er mal so richtig Gas gegeben und war schon in 1,5 Tagen fertig.

Wir sind aber noch lange nicht fertig damit, das RAID zu erweitern. Bis eben noch sah die 3. Zeile von mdstat so aus:

      7813772544 blocks super 1.2 level 5, 128k chunk, algorithm 2 [5/5] [UUUUU]

Erst, seit der Prozess ganz fertig ist, steht die volle Größe zur Verfügung. Jetzt sieht die Zeile so aus:

      15627545088 blocks super 1.2 level 5, 128k chunk, algorithm 2 [5/5] [UUUUU]

Noch steht uns die volle Kapazität aber nicht zur Verfügung, da müssen wir noch einiges tun.

Dateisystem erweitern

Zwar hat das RAID jetzt eine höhere Kapazität, das Dateisystem ist weiterhin auf 7,3T. Wir haben quasi das bestehende Dateisystem von 3 auf 5 Platten verteilt. Also muss es auf die volle Kapazität erweitert werden.

Um die folgenden Schritte gefahrlos für Daten ausführen zu können, werde ich das Dateisystem aushängen. Dies geht mit folgendem Befehl:

sudo umount /dev/md0

Es könnte sein, dass umount den Dienst verweigert, weil das Dateisystem angeblich noch in Benutzung ist. Dies passiert vor allem dann, wenn man mit seinem Windows-Rechner verbunden war. Um das Problem zu lösen, kann man einfach vorübergehend den Samba-Service stoppen:

sudo service samba stop

Dann sollte auch das Aushängen klappen.

Um Problemen vorzubeugen, werde ich zunächst das Dateisystem auf Fehler prüfen. Klar, es ist noch neu und viel passiert ist ja darauf nicht, aber sicher ist sicher. Also starte ich die Prüfung mit folgendem Befehl:

sudo e2fsck -f -C 0 /dev/md0

Dieser Befehl erzwingt die Fehlerprüfung, auch wenn das Dateisystem als sauber markiert ist, zeigt einen Prozentbalken an und führt die Prüfung auf dem RAID /dev/md0 aus. Mit dem Prozentbalken sehe ich wenigstens, ob das Programm noch arbeitet, oder ob etwas hängt.

Die Dateisystemprüfung war jetzt bei mir problemlos durchgelaufen und keine Fehler gefunden. Also kann ich jetzt das Dateisystem erweitern. Hierzu nehme ich den Befehl:

sudo resize2fs -p /dev/md0

Der Parameter -p zeigt mir wieder einen Fortschritt an, so dass ich sehe, ob das Programm noch was tut. Die Änderung soll auf /dev/md0 ausgeführt werden. Ich habe hier jetzt hinter /dev/md0 keine Größe angegeben. Dann wird das Dateisystem auf die maximal mögliche Größe erweitert. Ich könnte aber natürlich auch eine feste Größe hier eingeben. Das möchte ich aber nicht, sondern ich will die ganze Kapazität für mich alleine! 🙂 Dieser Vorgang kann eine ganze Weile dauern.

Zur Sicherheit mache ich noch mal eine Dateisystemprüfung, vielleicht ist beim Vergrößern ja was schiefgelaufen? Dafür nehme ich wieder den gleichen Befehl wie oben.

Stride und Stripe-Width

Ihr erinnert euch? Der Stride-Wert ist die Chunk-Größe dividiert durch Dateisystem-Blockgröße. Diese Werte haben sich nicht geändert, also ist es immer noch 128 / 4 = 32. Aber der Stripe-Width-Wert ist der Stride-Wert mal Nutzplatten. Zuerst waren es 2 Nutzplatten, jetzt sind es 4, also 5 Platten minus eine Paritätsplatte, gleich 4. Also hat sich der Stripe-Width-Wert geändert, 32 * 4 = 128. Dies müssen wir dem Dateisystem natürlich auch klar machen.

Diese Werte lassen sich ganz einfach nachträglich anpassen. Hierzu nimmt man das Programm tune2fs. Der Befehl würde hier also so lauten:

sudo tune2fs -E stride=32,stripe-width=128 /dev/md0

Dateisystem mounten

Nun muss das Dateisystem nur noch wieder in den Verzeichnisbaum eingehängt werden. Da das RAID bereits in der fstab-Datei eingetragen ist, ist die Prozedur ziemlich einfach. Der Befehl lautet:

sudo mount /raid1

Und das war es auch schon. Schauen wir doch mal, wie viel Platz wir jetzt haben. Vorher waren es ja 7.3T. Zwischenzeitlich habe ich weiter Daten auf das RAID kopiert, aber mich interessiert ja nur der Wert unter Size. Ich verwende wieder den gleichen df-Befehl wie oben. Jetzt ist der Wert unter Size bei 15T. Ja, das sollte für die nächste Zeit reichen. 🙂

Fazit

Wenn man Platz im Server hat, könnte man das RAID noch um wer weiß wie viele Platten erweitern. Ich weiß ehrlich gesagt gar nicht, wo da die Grenze ist. Aber für den Hausgebrauch reicht es alle mal.

Und jetzt noch ganz schnell die Daten vom QNAP kopieren! Weil ich eine der Platten, nämlich die 4-TB-Platte, aus dem RAID-Verbund gepflückt habe, läuft dieses jetzt im degraded mode, also im herabgesetzten Modus. Ich kann drauf schreiben, ich kann davon lesen, aber die Ausfallsicherheit ist dahin! Gut, die platten sind noch nicht alt und ein Ausfall daher nicht zu erwarten, aber sicher ist sicher, je eher ich damit fertig bin, desto besser.

Super, das hat auch geklappt. Nun ist mein Server vollständig einsatzbereit. Das war’s! Nein, natürlich nicht für das Projekt Homeserver im Eigenbau. Aber der erste große Meilenstein, das QNAP NAS zu ersetzen, ist erreicht. Alles, was jetzt kommt, ist Bonus!

Ich habe noch einige Dinge mit dem Server vor. Was sich aber wie bewerkstelligen lässt, wird sich nach und nach ergeben. Daher mache ich jetzt auch erst mal keinen Ausblick darauf, was wohl als nächstes kommt. Das weiß ich selbst noch nicht so genau. Eines der Ziele, die in nächster Zeit angegangen werden, wird wohl ein Webserver sein, der auf dem Server läuft. Nicht, weil ich Webseiten im Internet damit anbieten will, sondern weil ich z. B. von außen auf meine eigenen Daten zugreifen können will, oder vielleicht auch einen CalDAV und CardDAV Dienst für die Synchronisation meiner Handydaten betreiben will. Aber wie gesagt, ob und wie, das muss ich selbst erst noch rausfinden.

Also, auch wenn es jetzt etwas länger dauert, bis wieder ein Beitrag kommt, es kommt sicher noch mehr.

Von Kamil Günay

Ich betreibe TuKSuB schon seit 2010. Ich interessiere mich für Computer, Kommunikation, Technik, Astronomie und vieles mehr.