Meine aktuelle Idee ist, mit mdadm
ein Software-Array der Klasse RAID-6 mit 4 Mitgliedslaufwerken zu erstellen .
Insbesondere wären die Laufwerke 1-TB-HDDs auf SATA in einem kleinen Server Dell T20.
Betriebssystem ist GNU/Linux Debian 8.6 (später aktualisiert:Jessie ⟶ Stretch ⟶ Buster)
Das würde in meinem Fall 2 TB Speicherplatz mit 2 TB Parität ergeben.
Ich hätte es auch gerne mit GPT-Partitionstabelle, damit das funktioniert, bin ich mir nicht sicher, wie ich vorgehen soll, speziell angenommen, ich würde es vorziehen, dies rein über das Terminal zu tun.
Da ich noch nie ein RAID-Array erstellt habe, können Sie mir erklären, wie ich vorgehen soll?
Hinweise:
-
Dieses Array dient nur für die alleinigen Daten. Kein Boot oder Betriebssystem darauf.
-
Ich habe mich aufgrund des Zwecks dieses Arrays für RAID-6 entschieden. Zwei Laufwerksausfälle muss das Array überstehen können. Da ich per Hardware auf 4 Laufwerke beschränkt bin, gibt es meines Wissens keine Alternative zu RAID-6. (So hässlich die RAID-6-Verlangsamung auch erscheinen mag, in diesem Array spielt sie keine Rolle.)
Akzeptierte Antwort:
Machen Sie in dieser Antwort deutlich, dass alle Daten auf allen Array-Mitgliedern (Laufwerken) zerstört werden, also sichern Sie sie zuerst!
Öffnen Sie das Terminal und werden Sie root
(su
); wenn Sie sudo
haben aktiviert ist, können Sie beispielsweise auch sudo -i
ausführen; siehe man sudo
für alle Optionen):
sudo -i
Zuerst sollten wir die Laufwerke löschen, falls vorher Daten und Dateisysteme vorhanden waren. Angenommen, wir haben 4 Mitglieder:sdi
, sdj
, sdk
, sdl
. Um ein visuelles Feedback zu diesem Vorgang zu erhalten, wird die Datei pv
(Pipe-Viewer ) wurde hier verwendet:
pv < /dev/zero > /dev/sdi
pv < /dev/zero > /dev/sdj
pv < /dev/zero > /dev/sdk
pv < /dev/zero > /dev/sdl
Alternativ können Sie, um nur zu überprüfen, ob nichts zurückgeblieben ist, mit GParted auf allen Laufwerken nachsehen, und wenn es eine Partition mit oder ohne Dateisystem gibt, könnte es ausreichen, sie zu löschen, obwohl ich selbst das obige Nullsetzen vorziehe die beteiligten Laufwerke, denken Sie daran, alle Partitionen auszuhängen, bevor Sie dies tun, es könnte ähnlich wie in diesen Einzeilern gemacht werden:
umount /dev/sdi?; wipefs --all --force /dev/sdi?; wipefs --all --force /dev/sdi
umount /dev/sdj?; wipefs --all --force /dev/sdj?; wipefs --all --force /dev/sdj
umount /dev/sdk?; wipefs --all --force /dev/sdk?; wipefs --all --force /dev/sdk
umount /dev/sdl?; wipefs --all --force /dev/sdl?; wipefs --all --force /dev/sdl
Dann initialisieren wir alle Laufwerke mit der GUID-Partitionstabelle (GPT), und wir müssen alle Laufwerke partitionieren, aber tun Sie dies nicht mit GParted, weil es dabei ein Dateisystem erstellen würde, was wir nicht wollen, Verwenden Sie gdisk
stattdessen:
gdisk /dev/sdi
gdisk /dev/sdj
gdisk /dev/sdk
gdisk /dev/sdl
Verwenden Sie in allen Fällen Folgendes:
o
Eingabe für neue leere GUID-Partitionstabelle (GPT)y
Eingabe um Ihre Entscheidung zu bestätigenn
Eingabe für neue Partition
Eingabe für Vorgabe der ersten Partition
Enter für Vorgabe des ersten Sektors
Enter für Vorgabe des letzten Sektorsfd00
Eingabe für Linux-RAID-Typw
Eingabe um Änderungen zu schreibeny
Eingabe um Ihre Entscheidung zu bestätigen
Sie können die Laufwerke jetzt untersuchen:
mdadm --examine /dev/sdi /dev/sdj /dev/sdk /dev/sdl
Es sollte heißen:
(type ee)
Wenn ja, untersuchen wir jetzt die Partitionen:
mdadm --examine /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Es sollte heißen:
No md superblock detected
Wenn dies der Fall ist, können wir das RAID6-Array erstellen:
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Wir sollten warten, bis das Array vollständig erstellt ist, diesen Vorgang können wir leicht watch
:
watch cat /proc/mdstat
Nach der Erstellung des Arrays sollten wir uns dessen Details ansehen:
mdadm --detail /dev/md0
Es sollte heißen:
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Jetzt erstellen wir ein Dateisystem auf dem Array, wenn Sie ext4
verwenden , die unten ausgeblendet Befehl ist wegen ext4lazyinit
besser zu vermeiden würde bei einem großen Array merklich viel Zeit in Anspruch nehmen, daher der Name „lazyinit “, deshalb empfehle ich Ihnen, diesen zu vermeiden:
mkfs.ext4 /dev/md0
Stattdessen sollten Sie eine vollständige sofortige Initialisierung erzwingen (wobei 0 % für root
reserviert sind da es sich um ein Datenarray handelt):
mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
Durch Angabe dieser Optionen werden die Inodes und das Journal sofort während der Erstellung initialisiert, was für größere Arrays nützlich ist.
Wenn Sie sich für eine Abkürzung entschieden und die Datei ext4
erstellt haben Dateisystem mit dem „besser vermiedenen Befehl“, beachten Sie, dass ext4lazyinit
wird merklich viel Zeit in Anspruch nehmen, um alle Inodes zu initialisieren, Sie können es beobachten, bis es fertig ist, z. mit iotop
oder nmon
.
Wie auch immer Sie sich entscheiden, das Dateisystem zu initialisieren, Sie sollten es mounten, nachdem es seine Initialisierung abgeschlossen hat.
Wir erstellen jetzt ein Verzeichnis für dieses RAID6-Array:
mkdir -p /mnt/raid6
Und einfach mounten:
mount /dev/md0 /mnt/raid6
Da wir im Wesentlichen fertig sind, können wir GParted erneut verwenden, um schnell zu überprüfen, ob es linux-raid
anzeigt Dateisystem zusammen mit dem raid
Flag auf allen Laufwerken.
Wenn dies der Fall ist, haben wir das RAID6-Array ordnungsgemäß mit GPT-Partitionen erstellt und können nun Dateien darauf kopieren.
Sehen Sie, welche UUID der md
hat Dateisystem hat:
blkid /dev/md0
Kopieren Sie die UUID in die Zwischenablage.
Jetzt müssen wir fstab
bearbeiten , mit Ihrem bevorzugten Texteditor habe ich nano
verwendet , obwohl sudoedit
könnte besser verwendet werden:
nano /etc/fstab
Und fügen Sie einen Eintrag hinzu:
UUID=<the UUID you have in the clipboard> /mnt/raid6 ext4 defaults 0 0
Ich selbst empfehle die Verwendung von defaults
nicht Satz von Flags, ich wollte lediglich, dass die Zeile nicht zu komplex wird.
Hier ist, welche Mount-Flags ich auf einem UPS-gesicherten Daten-RAID verwende (anstelle von defaults
):
nofail,nosuid,nodev,noexec,nouser,noatime,auto,async,rw,data=journal,errors=remount-ro
Sie können überprüfen, ob es korrekt ist, nachdem Sie die Änderungen gespeichert haben:
mount -av | grep raid6
Es sollte heißen:
already mounted
Wenn dies der Fall ist, speichern wir die Array-Konfiguration; falls Sie kein md
haben Gerät noch nicht erstellt haben, können Sie einfach Folgendes tun:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Falls bereits Arrays vorhanden sind, führen Sie einfach den vorherigen Befehl ohne Umleitung zur Konfigurationsdatei aus:
mdadm --detail --scan
und fügen Sie das neue Array manuell zur Konfigurationsdatei hinzu.
Verwandt:Startzeit des Prozesses mit Zeitzone?
Vergessen Sie am Ende nicht, Ihr initramfs
zu aktualisieren , da Ihr neues Array sonst nur automatisch schreibgeschützt assembliert wird, wahrscheinlich als /dev/md127
oder ähnlich:
update-initramfs -u -k all
Überprüfen Sie, ob Sie alles nach Plan gemacht haben, und wenn ja, können Sie neu starten:
reboot