Inhalt
Mit omv-Bordmitteln lässt sich ein Einzellaufwerk nicht in ein RAID-Mitglied umwandeln. Ein paar Kommandos auf der Konsole schaffen aber Abhilfe.
Das Szenario
Die Situation ist sicher nicht selten: im NAS werkelt nur ein einzelnes Laufwerk, weil man für die vielen Tests am Anfang nicht gleich in ein zweites investieren wollte. Jetzt hat man die Testphase hinter sich und ein zweites Laufwerk des (nahezu) gleichen Typs gekauft. Um die Datensicherheit zu verbessern, will man aus beiden Laufwerken einen RAID1-Verbund erstellen, also die Daten auf beiden Laufwerken spiegeln.
Openmediavault lässt einen solchen Umstieg auf seiner Web-Oberfläche leider nicht direkt zu. Ein RAID kann man dort nur aus „leeren” Laufwerken erzeugen, weil omv immer auf allen Laufwerken ein neues Filesystem anlegen will. Man müsste also zunächst die Daten sichern, dann beide Laufwerke löschen, mit ihnen ein RAID1 erstellen und danach die Datensicherung wieder zurückspielen.
Aber da omv hinter den Kulissen auch nur mit Hausmitteln wie mdadm arbeitet, kann man mit ein paar Befehlen auf der Kommandozeile zumindest einen Kopiervorgang einsparen.
Der Plan
Das Zauberwort heißt degraded RAID, also ein RAID-Verbund, der nicht alle Laufwerke enthält. In unserem Fall erzeugen wir aus dem neuen Laufwerk ein degraded RAID mit nur einer Platte und fügen erst später das alte Laufwerk zum RAID hinzu. Kurz zusammengefasst geht man so vor:
- Datensicherung prüfen
- Neue Platte einbauen und partitionieren
- RAID erzeugen und Filesystem anlegen
- Daten kopieren
- Altes Laufwerk zum neuen RAID hinzufügen
Schritt 1: Datensicherung prüfen
Das mag trivial klingen, aber ein Tippfehler während unserer Prozedur kann in Sekundenbruchteilen zum vollständigen Datenverlust führen, wenn man zum Beispiel die Laufwerksbezeichnungen verwechselt und das falsche Laufwerk löscht. Also wirklich wichtig: nicht nur eine Datensicherung haben, sondern sich auch sicher sein, dass sie die vollständigen Daten enthält und lesbar ist.
Schritt 2: Neue Platte einbauen und partitionieren
Wie die Platte eingebaut werden muss, hängt vom NAS-Gehäuse ab. Hat man ein hot-plug-System, kann man die Platte im laufenden Betrieb hinzufügen. Trotzdem sollte man, nachdem die neue Platte eingebaut ist, das NAS einmal neu booten, denn möglicherweise werden die Laufwerksbezeichnungen durch eine geänderte Reihenfolge der Laufwerke verändert. Ohne hot-plug muss man das NAS ohnehin zum Einbau herunterfahren.
Hat man zweifelsfrei festgestellt, welches Laufwerk das Neue ist, kann man es partitionieren. Zunächst prüfen wir noch einmal, ob das neue Laufwerk (hier: /dev/sda) auch wirklich leer ist:
# fdisk -l /dev/sda Disk /dev/sda: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Die Ausgabe listet uns Größe und Organisation des Laufwerks, sollte aber noch keine Partitionen anzeigen.
Die Partition kann man per Master Boot Record (MBR) oder als GUID Partition Table (GPT) einrichten. Der MBR ist ein Relikt aus DOS-Zeiten, das die Partitionstabelle im ersten Block des Laufwerks speichert. Für die MBR-Variante gibt es eigentlich nur zwei zwingende Gründe:
- Wenn man das Laufwerk als Boot-Laufwerk für Windows im Legacy BIOS Modus verwenden will
- Wenn man sehr alte Hardware verwendet, deren BIOS die GPT-Partitionierung nicht unterstützt
Da beides hier nicht zutrifft, wird die Partitionierung also mit dem moderneren GPT erledigt. Es soll lediglich eine große Partition erstellt werden, die das Laufwerk vollständig belegt. fdisk erledigt diesen einfachen Job:
# fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x12667a34. Command (m for help): g Created a new GPT disklabel (GUID: 4B985E31-4030-4400-ACCF-B7CA9F493E0D). Command (m for help): n Partition number (1-128, default 1): First sector (2048-3907029134, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-3907029134, default 3907029134): Created a new partition 1 of type 'Linux filesystem' and of size 1,8 TiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@omv0:~# fdisk -l /dev/sda Disk /dev/sda: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: 4B985E31-4030-4400-ACCF-B7CA9F493E0D Device Start End Sectors Size Type /dev/sda1 2048 3907029134 3907027087 1,8T Linux filesystem
Die minimalistischen Ein-Zeichen-Befehle von fdisk kann man sich mit m auflisten lassen. g erzeugt die neue GPT-Partition. Nimmt man jeweils die Standardwerte an, wird die Linux Partition 1 so angelegt, dass sie den gesamten freien Platz einnimmt. Erst w schreibt die Änderungen wirklich auf die Platte. Ein fdisk -l /dev/sda sollte jetzt die eben angelegte GPT-Partition anzeigen.
Schritt 3: RAID erzeugen und Filesystem anlegen
Jetzt erzeugen wir mit mdadm unser neues RAID - zunächst nur mit der neuen Platte, also im degraded Zustand. Die Warnung über die Eignung als boot-Device interessiert uns nicht, da wir nicht von diesem Laufwerk booten wollen.
# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sda1 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
Die Datei /proc/mdstat sollte danach das neue RAID als aktive anzeigen.
# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sda1[1] 1953382464 blocks super 1.2 [2/1] [_U] bitmap: 0/15 pages [0KB], 65536KB chunk unused devices: <none>
Jetzt muss noch das Dateisystem auf dem RAID angelegt werden.
# mkfs.ext4 /dev/md0 mke2fs 1.44.2 (14-May-2018) Creating filesystem with 488345616 4k blocks and 122093568 inodes Filesystem UUID: 9c159e30-4c96-486a-9a0b-f37d8f519130 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done
Ab sofort sollte auch omv das RAID-System unter Datenspeicher → Dateisysteme listen.
Nach dem mounten über die omv-Oberfläche (Zeile /dev/md0 auswählen und Einbinden klicken) ist auch die Größe sichtbar.
Schritt 4: Daten kopieren
Bevor wir mit dem Kopieren der Daten starten, sollten wir dafür sorgen, dass sie während der Kopie nicht verändert werden. Dafür sollten alle Referenzen auf das alte Laufwerk entfernt, das Laufwerk ausgehängt und von Hand an anderer Stelle eingehängt werden.
Zunächst müssen alle Freigaben des Laufwerks (nfs, smb/cifs, ftp etc.) gelöscht werden. Das geschieht in der omv-Oberfäche bei den entsprechenden Diensten.
Ist die Konfiguration gespeichert, sollte bei Zugriffskontrolle → Freigegebene Ordner bei allen Ordnern des Laufwerks unter Referenziert ein Nein gelistet sein, ansonsten existieren noch andere Freigaben. Erst dann können die freigegebenen Ordner entfernt werden. Dazu wählt man den jeweiligen Ordner aus und klickt auf Löschen. Wichtig: nur den Ordner, nicht die Daten löschen!
Danach ist unter Datenspeicher → Dateisysteme auch für das alte Laufwerk die Schaltfläche Aushängen freigegeben, die wir jetzt klicken können.
Auf der Kommandozeile hängen wir das alte Laufwerk dann unter /mnt wieder ein.
# mkdir /mnt/alt # mount /dev/sdb3 /mnt/alt
Zum Kopieren brauchen wir noch den Namen des neuen RAID-Filesystems, den man zum Beispiel mit mount|grep md0 herausbekommt.
# mount|grep md0 /dev/md0 on /srv/dev-disk-by-id-md-name-omv0-0 type ext4 (rw,noexec,relatime,jqfmt=vfsv0,usrjquota=aquota.user,grpjquota=aquota.group)
Schließlich können die Daten per rsync auf das neue RAID übertragen werden - das wird je nach Größe und Auslastung des Laufwerks einige Zeit dauern.
# rsync -auxHAX /mnt/alt/ /srv/dev-disk-by-id-md-name-omv0-0
Nach fehlerfreier Beendigung des Kopierens kann das alte Laufwerk wieder ausgehängt werden.
# umount /mnt/alt
Wenn nötig, kann die Partitionstabelle des alten Laufwerks jetzt noch mit fdisk angepasst werden.
An dieser Stelle ist es besonders wichtig, sich eines funktionierenden Backups sicher zu sein, denn dabei oder spätestens beim Einhängen in das RAID wird der Inhalt des alten Laufwerks gelöscht.
Schritt 5: Altes Laufwerk zum neuen RAID hinzufügen
Das alte Laufwerk wird schließlich mit mdadm zu unserem neuen RAID hinzugefügt.
# mdadm /dev/md0 -a /dev/sdb1
Unter /proc/mdstat sollte jetzt das RAID mit seinen beiden Laufwerken angezeigt werden.
# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sdb1[2](S) sda1[1] 1953382464 blocks super 1.2 [2/1] [_U] bitmap: 15/15 pages [60KB], 65536KB chunk unused devices: <none>
Sieht man jetzt in der omv-Oberfläche unter Datenspeicher → RAID Verwaltung nach, wird der RAID-Verbund zwar immer noch als degraded angezeigt, aber auch als recovering mit dem entsprechenden Prozentsatz der Fertigstellung. Das bedeutet, das jetzt der Inhalt des neuen Laufwerks auf das alte, eben zum RAID hinzugefügte Laufwerk gespiegelt, also kopiert wird.
Erst nach einigen Stunden ist das RAID dann voll einsatzfähig.
Als letzte Aktion müssen jetzt über die omv-Oberfläche wieder die vorhin gelöschten Ordner, Freigaben und Nutzerprivilegien eingerichtet werden.
Ab sofort sind unsere Daten ein ganzes Stück sicherer. Der Ausfall eines Laufwerks bedeutet dann keinen unmittelbaren Datenverlust mehr - natürlich nur, wenn man den Ausfall auch erkennt und das entsprechende Laufwerk so schnell wie möglich austauscht.
Quellen:
- wiki.archlinux.org: Convert a single drive system to RAID
- guyrutenberg.com: Setting up RAID using mdadm on existing drive
Vielen Dank für die Anleitung. Ich bin per Zufall auf diese Seite gestoßen und frage mich, da ich selber aktuell meinen ersten Homeserver mit OMV, Nextcloud erstellen möchte, was Sinn macht mit einer System-Festplatte (SSD) und zwei Datenfestplatten (HDD).
Es gibt haufenweise Informationen und jeder will es besser wissen. RAID1 wäre, so denke ich, die für mich evtl. einfachste Art und Weise die zwei HDDs mit dem NAS laufen zu lassen.
Was halten Sie von ZFS oder Snapraid und Unionfilesystem oder ähnliches? Ich sehe den Wald vor lauter Bäumen nicht mehr.
Vielleicht antwoten Sie auf diesen Kommentar und können mir ein wenig in der Findungssuche behilflich sein.
Das kann man nicht so pauschal beantworten. Es kommt immer auf das Ziel und das verfügbare Know-How an.
Linux-Spezialisten werden sicher von den Vorteilen spezieller Dateisysteme wie ZFS oder Btrfs profitieren und ihre relative Komplexität beherrschen können. Das läuft aber meines Wissens alles komplett unterhalb von Openmediavault ab.
Will man ein NAS vornehmlich als Werkzeug zum Speichern benutzen, fährt man um einiges sicherer, wenn man von den eingelaufenen Wegen nicht allzu weit abgeht. RAID und EXT sind bewährt und von daher sicher eine gute Wahl, wenn man nicht gute Gründe hat, etwas anderes zu nutzen.
Ansonsten lässt einem omv aber auch die Freiheiten, unter der Oberfläche fast jede denkbare Spezialschraube zu drehen.