In diesem Artikel möchte ich euch eine NAS-Lösung im Eigenbau mit dem RaspberryPI vorstellen. Mit diesem Eigenbau NAS habt ihr den vollen Umfang wie Q-NAP oder ähnliche Systeme.
Erfahrungen im täglichen Einsatz haben gezeigt das System läuft sehr stabil im RAID 5. Hier mein Setup:
- Raspberry PI
- Installation (JESSY)
- OPENMEDIAFAULT
- 3 x 1,2TB externe USB-Festplatten
1.0 RaspberryPI Installation
die benötigte Software OpenMediaFault in der aktuellen Version
Ich habe das Image mit WinDisk32 auf die SSD-Karte geschrieben.
1.1 Eigenbau NAS OMV Startkonfiguration
Nachdem das OpenMediaFault auf dem RaspberryPI läuft erreicht man das Webinterface über folgende Adresse:
http://192.168.0.54/
Meldet euch zunächst mit dem Benutzer admin und dem Passwort openmediavault an. Klickt im linken Menü auf Allgemeine Einstellungen und ändert das Sitzungslimit auf 0, damit werdet ihr nicht mehr automatisch abgemeldet. Diese Einstellung ist meine persönliche Präferenz und optional, stellt hier ein was ihr für euch am geeignetsten empfindet.
Im Anschluss daran sollte unbedingt das Web Administrator Passwort geändert werden!
Es folgt die Einstellung von Datum&Zeit sowie Netzwerk. Die Netzwerkeinstellung im Detail erreicht ihr unter dem Reiter Schnittstellen. Wählt eure Netzwerkkarte aus und klickt auf bearbeiten. Hier könnt ihr die IP-Adresse des NAS festlegen, DHCP bedeutet, dass euer Router dem NAS automatisch eine IP-Adresse zuweist.
Ich empfehle euch auf eurem Router dem NAS eine feste IP-Adresse zuzuweisen.
2.0 Systemaktualisierung
es gibt zwei Möglichkeiten um das NAS zu aktualisieren. Eine Möglichkeit ist die Aktualisierung direkt im OpenMediaFault zu machen. Eine andere Möglichkeit ist die Aktualisierung über die shell. Ich bevorzuge diese Methode.
Hierzu startet ihr eine ssh zum Beispiel Putty und setzt folgende Befehle ab:
sudo -s
apt-get update
apt-get dist-upgrade
3.0 Benachrichtigungen
OpenMediaVault kann euch bei einem Fehler automatisch durch den Versand einer E-Mail benachrichtigen. Da man sich ja nicht täglich auf sein NAS einloggt, ist dies sehr zu empfehlen um möglichst schnell auf einen Ausfall reagieren zu können. Alles was ihr dafür benötigt ist ein E-Mail Account bei einem Provider eurer Wahl.
4.0 Eigenbau NAS RAID einrichten
da wir hier ein Software RAID aufbauen welches auf dem RaspberryPI läuft und die angeschlossenen Festplatten über den USB des RaspberryPI angesprochen werden dauert die Einrichtung eines RAID5 entsprechend lange! In meinem Fall dauerte die RAID Initialisierung der 3 TB-Platten gut 3 Tage!
Über die RAID Verwaltung lässt sich aus den Datenfestplatten mit Leichtigkeit ein Raid-Verbund erstellen. Dazu wählt man zuerst den gewünschten Raid-Typ (Raid 0,1,5,6 oder JBOD) aus.
Ist der RAID erstellt muss dieser initialisiert werden. Erst danach kann das Filesystem installiert werden. Hier empfehle ich EXT4
Nach dem Anlegen des Dateisystems muss der Raid noch eingebunden werden – ansonsten ist dieser nicht nutzbar. Sollte der Speicherplatz mit der Zeit nicht mehr ausreichen, ist es möglich den Raid-Verbund nachträglich – und ohne Datenverlust – um eine oder mehrere Festplatten zu erweitern. Dies ist allerdings nur bei einem 5 oder 6 möglich. Nachdem eine neue Festplatte hinzugefügt wurde muss unter dem Punkt „Dateisysteme“ die Partition des Raids auf die nun neue Größe erweitert werden. Dies geschieht alles ohne Datenverlust.
Achtung!!! Ein RAID ist kein Backup oder sollte als solches gesehen werden. Im Falle eines Ausfalls einer Platte und dem Austausch dieser Platte und anschließendem Neuberechnen (Rebuild) komplett ausgelastet. Sollte jetzt eine weitere Platte ausfallen ist der Datenverlust zu 100%
Kleine Codeschnipsel die den Rebuildvorgang etwas beschleunigen
sudo mdadm --grow --bitmap=internal /dev/md0
Nach dem Rebuild kann mit folgendem Code wieder auf die normale Geschwindigkeit gefahren werden:
sudo mdadm --grow --bitmap=none /dev/md0
Während des Rebuilds kann der Raid weiterhin benutzt werden und das NAS kann auch zwischendurch neugestartet oder heruntergefahren werden, der Rebuild wird nach dem Neustart an der Stelle fortgesetzt. Im wirklichen Ernstfall würde ich allerdings dazu raten das NAS während eines Rebuild nicht zu benutzen um die Wahrscheinlichkeit eines weiteren Ausfalls zu verringern.
5.0 S.M.A.R.T
S.M.A.R.T steht für Self-Monitoring, Analysis and Reporting-Technology und beschreibt einen in Festplatten eingebauten Standard. Die Festplatte kann unter einem Betriebssystem ausgelesen und die S.M.A.R.T-Werte analysiert werden.
Ich habe mit den folgenden Einstellungen sehr gute Erfahrungen gemacht
Klickt auf S.M.A.R.T. und setzt einen Haken bei aktivieren. Möchtet ihr die Festplatten alle 4 Stunden prüfen, wählt bei Prüfintervall 14400 (60 [Sekunden] * 60 [Minuten] * 4 [Stunden]) aus. Der Powermodus sollte auf Bereitschaft stehen, damit eure Festplatten nicht bei jeder Prüfung geweckt werden.
Anschließend müsst ihr unter dem Reiter Laufwerke manuell die S.M.A.R.T. Überprüfung für jede Festplatte aktivieren!
Ein NAS läuft meistens für mehrere Stunden, daher ist es sinnvoll die Festplatten in einen energiesparenden Zustand zu versetzen, sofern diese nicht benötigt werden – denn die Festplatten sind die größten Energieverbraucher in einem NAS. Klickt dazu auf den Punkt Reale Festplatten, wählt eine Festplatte aus und klickt auf Bearbeiten.
In meinem NAS benutze ich eine Spindownzeit von 30 Minuten, es kann aber auch Sinn machen die Zeit auf 60 Minuten zu erhöhen. Findet in der eingestellten Zeit kein Zugriff auf die Festplatten statt, werden diese in einen energiesparenden Zustand versetzt.
6.0 Erstellen einer Freigabe für andere Computer
Zunächst müsst ihr euch entscheiden ob ihr eine SMB/CIFS oder eine NFS Freigabe erstellen möchtet. Die meisten werden sich aufgrund der Windows-Kompatibilität sicher für SMB entscheiden. Klickt auf den Menüpunkt SMB/CIFS und aktiviert diesen Dienst. Danach könnt ihr über den Reiter Freigaben eine Freigabe erstellen. Ich nenne meine Freigabe als Beispiel Daten. Ich habe da ich auch un Linux einen Zugang in mein RAID haben möchte auch noch die Freigabe NFS eingerichtet.
Um darauf zugreifen zu können geben wir den freigegebenen Ordner an
7.0 Eigenbau NAS Freigabe in Windows einbinden
Unter Windows 10 gehst Du folgendermaßen vor:
Öffne zuerst die Windows-10-Suche mit [Windows] + [S] und gebe „Dieser PC“ ein.
Klicke anschließend oben in der Leiste auf „Computer“ und anschließend auf „Netzlaufwerk verbinden„.
Nun kann neben dem Punkt „Laufwerk:“ einen Laufwerksbuchstaben festgelegt werden, unter dem das spätere Netzlaufwerk angezeigt wird.
Hinter „Ordner“ muss der Pfad des Netzlaufwerks angegeben werden. Wenn Du den genauen Pfad nicht kennst und sich das Laufwerk in Deinem Heimnetz befindet, kannst Sie dieses auch mit einem Klick auf „Durchsuchen…“ auswählen.
Soll das Netzlaufwerk bei jedem Neustart automatisch verbunden werden, musst Du den ersten Haken setzen. Wenn Du dich mit einer anderen Benutzerkennung an dem Laufwerk anmelden möchtest, solltest Du den zweiten Haken setzen.
Mit einem Klick auf „Fertig stellen“ wird das Netzlaufwerk abschließend auf Deinem Computer eingerichtet.
Das war es auch schon. Ihr könnt nun auf das NAS zugreifen.
Was tun wenn eine Platte als defekt gemeldet wird?
Habe hierzu die Seriennummern der HDDs notiert, die HDD, die als defekt gemeldet wird deaktivieren. Dann die Sereiennummern unter „Reale Festplatten“ wieder angeschaut und somit die fehlende lokalisiert. Danach die Platte ausbauen und durch eine exakt gleiche Platte ersetzen, Kabel wieder verbinden. Die jetzt lokalisierte (vorher nicht eingebundene Festplatte) über „Reale Festplatten“ löschen, um abschließend über die „RAID-Verwaltung“ die Wiederherstellung für eben diese Festplatte laufen zu lassen.
Nachtrag:
Hinweis für alle Anderen:
– Festplatten, die einmal aus einem RAID-Verbund raus geworfen wurden, werden nicht automatisch wieder in den Verbund integriert
– dafür muss man die „entfernte“ Festplatte lediglich als „HotSpare“ dem „degraded Array“ wieder hinzufügen und der Rebuild startet sofort
– alternativ hat man über die Konsole noch die Möglichkeit, den Verbund mit Gewalt wieder zusammen zu bauen, was allerdings auch einen sofortigen Resync (ist fast das Gleiche wie ein Rebuild) zur Folge hat …
Mögliche RAID-Level
- Linear: Aneinanderhängen von mehreren Partitionen
- Multipath: Kein RAID, sondern ein Mapping einer Datei auf zwei verschiedene Pfade auf der gleichen Partition (Spiegelung)
- Faulty: Emuliert ein fehlerhaftes RAID-System für Testfälle
- Level 0 (Block Level Striping): Aneinanderhängen von mehreren kleinen Block-Devices zu einem großen.
- Level 1 (Mirror): Spiegelung einer Disk
- Level 4: Wie Level 0, aber mit einem zusätzlichen Device für Paritätsbits (erhöhte Ausfallsicherheit).
- Level 5: Wie Level 4, die Paritätsbits werden aber über alle Geräte verteilt.
- Level 6: Wie Level 5 aber mit zwei unabhängigen Paritätsbits pro Segment (erhöhte Ausfallsicherheit).
- Level 10: Kombination von Level 0 und Level 1.
Installation von mdadm
Wenn bei der Linux Installation kein RAID erstellt wurden muss das mdadm Paket aus den Repositories installiert werden.
:~$ sudo aptitude install mdadm
Nach der Installation sind keine weiteren Schritte zur Konfiguration nötig und das Tool kann verwendet werden.
Befehle zur Konfiguration und Verwaltung
Grundsätzliche Syntax
mdadm [mode] <raiddevice> [options] <component-devices>
Array erstellen
mdadm --create /dev/md/<Label> --level=<RAID-Level> --raid-devices=<Anzahl der physischen Partitionen im Array> /dev/sdX1 /dev/sdY1
Parameter:
--create
kann ein optionaler Parameter gegeben werden in welchem ein Label für das RAID festgelegt werden kann. Bsp.:/dev/md/md_1
--level=
: Spezifiziert den gewünschten RAID-Level. Erlaubte Eingaben sind:linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6, raid10, 10, multipath, mp, faulty, container
--raid-devices=
: Spezifiziert die Anzahl der physischen Partitionen im Software-RAID. Zusätzlich müssen noch die einzelnen Partitionen angegeben werden. Bsp.:--raid-devices=2 /dev/sda2 /dev/sdb3
RAID 0 mit MDADM
Um ein RAID 0 (Block Level Striping) Array zu erstellen werden mindestens 2 Partitionen benötigt. Diese sollten gleich groß, und sich auf verschiedenen physischen Festplatten befinden. Der RAID 0 Array kann mit folgendem Befehl initalisiert werden: mdadm --create /dev/md/<Label> --level=0 --raid-devices=<Anzahl> /dev/sdX1 /dev/sdY1
Beispiel (2 physische Festplatten):
root@swraid:~# mdadm --create /dev/md/md_test --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md/md_test started.
RAID 1 mit MDADM
Um ein RAID 1 (Block Level Mirroring) Array zu erstellen werden wiederum mindestens zwei physische Partitonen benötigt. Diese sollten gleich groß und sich auf verschiedenen physischen Festplatten befinden. Der RAID 1 Array kann mit folgendem Befehlt initialisiert werden: mdadm --create /dev/md/<Label> --level=1 --raid-devices=<Anzahl> /dev/sdX1 /dev/sdY1
Beispiel (2 physische Festplatten):
root@swraid:/dev# mdadm --create /dev/md/md_test --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 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? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md/md_test started.
Array löschen
Um ein RAID-Array auszubinden muss das Array ausgehängt sein (umount
) und der Befehl mdadm --stop /dev/md/<Name des RAID>
aufgerufen werden. Dadurch wird das Array zwar aus dem System ausgebunden allerdings bleibt das RAID-Array physisch vorhanden.
Um das Array zu entfernen muss bei jeder Festplatte der Superblock, welcher die Festplatte/Partition als RAID-Device festlegt, auf Null gesetzt werden. Dies kann mit dem Befehl mdadm --zero-superblock /dev/<physische Partition>
durchgeführt werden.
Beispiel:
root@swraid:/dev# umount -l /mnt/test root@swraid:/dev# mdadm --stop /dev/md/md_test mdadm: stopped /dev/md/md_test root@swraid:/dev# mdadm --zero-superblock /dev/sdb1 root@swraid:/dev# mdadm --zero-superblock /dev/sdc1
Arrays/Partitionen auflisten
RAID-Arrays können mit zweierlei Befehlen aufgelistet werden --detail
bezieht sich auf ein gesamtes aktives Array wohingegen sich --examine
auf die einzelnen physichen Devices in einem RAID-Verbund bezieht.
root@swraid:/mnt/test# mdadm --examine --brief --scan --config=partitions ARRAY /dev/md/md_test metadata=1.2 UUID=81c1d8e5:27f6f8b9:9cdc99e6:9d92a1cf name=swraid:md_test
Dieser befehlt kann auch mit -Ebsc partitions
abgekürzt werden.
root@swraid:/dev/md# mdadm --detail /dev/md/md_test /dev/md/md_test: Version : 1.2 Creation Time : Fri Apr 7 09:14:36 2017 Raid Level : raid0 Array Size : 16776192 (16.00 GiB 17.18 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Apr 7 09:14:36 2017 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Name : swraid:md_test (local to host swraid) UUID : 81c1d8e5:27f6f8b9:9cdc99e6:9d92a1cf Events : 0 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1
Hotspare
Bei Hotspare Festplatten/Partitionen handelt es sich um Festplatten/Partitionen welche im Normalfall nicht verwendet werden. Diese kommen zum Einsatz wenn eine der aktiven Festplatten/Partitionen des RAID-Verbundes einen Fehler aufweist oder defekt ist. Wenn in einem Software-Raid keine Hotspare Platte definiert ist muss der Rebuild eines defekten RAID-Verbundes manuell gestartet werden. Ist eine Hotspare vorhanden wird mit dem Rebuild automatisch begonnen. Eine Hotspare Festplatte kann mit dem Befehlt mdadm --add /dev/md/<RAID-Name> /dev/sdX1
hinzugefügt werden, wobei der erste Parameter der Name des RAID-Verbundes und der zweite der Name der hinzuzufügenden Festplatte ist. Soll eine Hotspare Festplatte aus dem RAID-Verbund entfernt werden, so muss der Befehl mdadm --remove /dev/md/<RAID-Name> /dev/sdX1
aufgerufen werden. Hierbei ist wiederum der erste Parameter die Bezeichnung des RAID-Verbundes und der zweite die Bezeichnung der Hotspare Festplatte.
Rebuild
Wenn eine Partition/Festplatte einen Defekt(Software oder Hardware) aufweist muss der RAID-Verbund rebuilded werden. Dazu muss zunächst das defekte Device aus dem RAID entfernt werden. Dazu wird der Befehl mdadm --manage /dev/md/<RAID-Name> -r /dev/sdX1
benötigt. Der erste Parameter von bezieht sich auf den RAID-Verbund. Der zweite auf das defekte Device. Wenn keine Hotspare Festplatte zur Verfügung steht muss eine neue Festplatte partitioniert werden. Wichtig dabei ist das die neue Festplatte die selbe partitionierung wie die defekte Festplatte aufweist. Zum Partitionieren einer Festplatte helfen die tools fdisk /dev/sdX
, cfdisk /dev/sdX1
sowie parted /dev/sdX1
. Ist die neue Festplatte korrekt partitioniert kann sie dem RAID-Verbund wieder hinzugefügt werden. Dies geschieht mit mdadm --manage /dev/md/<RAID-Name> -a /dev/sdX1
. Wenn dabei keine Fehler aufgetreten sind, kann mit der eigentlichen Wiederherstellung(Rebuild) begonnen werden. Dazu muss die neue Partition im RAID-Verbund auf „faulty“ (=fehlerhaft) gesetzt werden: mdadm --manage --set-faulty /dev/md/<RAID-Name> /dev/sdX1
. Dadurch wird der rebuild des RAID-Verbundes angestoßen. Mit watch cat /proc/mdstat
kann der Fortschritt des Rebuilds verfolgt werden.
Every 2.0s: cat /proc/mdstat Fri Jul 5 09:59:16 2013 root@swraid:/dev# watch cat /proc/mdstat Personalities : [raid0] [raid1] md127 : active raid1 sdc1[1] sdb1[0] 8384448 blocks super 1.2 [2/2] [UU] [==============>......] check = 74.7% (6267520/8384448) finish=0.1min speed=202178K/sec unused devices: <none>
Sobald der Rebuild des RAID-Verbundes abgeschlossen ist muss die Partition aus dem RAID-Verbund entfernt und wieder hinzugefügt werden um den Status „faulty“ zu entfernen. mdadm --manage /dev/md/<RAID-Name> -r /dev/sdX1
zum entfernen und mit mdadm --manage /dev/md/<RAID-Name> -a /dev/sdX1
wieder hinzufügen. Mit dem Befehl mdadm --detail /dev/md/<RAID-Name>
kann der Status des RAID-Verbundes noch einmal überprüft werden. Dieser sollte nun den State: clean aufweisen.
E-Mail Adresse für Array-Überwachung einrichten
Um eine Benachrichtigung per E-Mail im Falle eines Defekts zu erhalten kann in der Konfigurationsdatei von mdadm (/etc/mdadm/mdadm.conf
) bei MAILADDR root
statt root die gewünschte E-Mail Adresse eingetragen werden. Dazu muss ein E-Mail Dienst (postfix, exim, ...
) auf dem System konfiguriert sein. /etc/mdadm/mdadm.conf mit einem Editor öffnen und folgende Zeile editieren:
Statt MAILADDR root
deshalb eine E-Mail Adresse wie zum Beispiel MAILADDR email@example.com
eintragen und abspeichern.
Array überprüfen
Um ein konstantes Monitoring zu betreiben wird das tool checkarray
benötigt. Dies kann mit crontab -e
in die Liste der Cronjobs eingetragen werden.
/usr/share/mdadm/checkarray --cron --all --quiet