Heimische NAS

Jeder mit verschiedenen Geräten im Netzwerk kennt das Problem: Dokument X ist auf Gerät A, wird aber auf Gerät B benötigt. Dabei wollen wir nicht bei irgendeinem Hoster unsere Daten zu liegen haben sondern wollen der eigene Herr über unsere Daten sein.

Inhalt:

Der Begriff NAS

An dieser Stelle wende ich mich der Bezeichnung NAS zu. Wofür steht der in der IT häufig verwendete Begriff NAS?

NAS steht für Network Attached Storage, oder um es mit einfachen Worten zu sagen: es handelt sich um einen netzwerkgebundenen Speicher auf dem Dateien im Netzwerk verfügbar gemacht werden. Wer nicht basteln möchte kann sich auch einfach eine NAS von renomierten Herstellern kaufen. Bei der eigenen Lösung sind aber mehr möglichkeiten für die spätere Verwendung offen.

Material

  • Raspberry Pi (am besten aktuelles Modell, siehe hierzu https://www.raspberrypi.org/ für mehr Informationen)
  • microSD Karte mit 32 GB
  • 2 (Externe) Festplatten mit USB Anschlussmöglichkeit (z.B. 500 GB oder 1TB), beide müssen gleich dimensioniert und über USB anzubinden sein

Der Raspberry Pi sollte möglichst aktuell sein da so die besten Leistungswerte erreicht werden können. Der Raspberry Pi Zero eigent sich an dieser Stelle aber wenig. Bitte auch an das passende Netzteil (Handynetzteil oder passendes Pi Netzteil) denken. Ich habe mich für ein Komplettset in dem der Pi, ein passendes Netzteil, ein Gehäuse und eine microSD Karte enthalten sind entschieden.

Die microSD Karte kann frei gewählt werden wobei hier auch auf Geschwindigkeit und angemessene Größe geschaut werden sollte. Ich habe mich für eine Class 10 microSD Karte mit 32 GB Speicher entschieden.

Ich habe normale Festplatten in alte externe Festplattengehäuse eingebaut um sie so per USB anzubinden. An dieser Stelle kann aber frei gewählt werden. Auch was den Speicher betrifft gilt es zu schauen was überhaupt benötigt wird.

Sofern alles beschafft wurde kann es auch schon los gehen!

Der Aufbau

Folgendes Bild verdeutlicht den Aufbau des NAS:

Aufbau

Es empfiehlt sich die beiden Festplatten (HDD's) noch nicht an den Raspberry Pi anzuschließen. Zusätzlich wird eine Tastatur (inkl. Maus, sofern eine GUI installiert wird) und ein Monitor benötigt. Diese sollten beim ersten Start bereits angeschlossen sein. Für das Netzwerk habe ich ein Gigabit-Ethernetkabel verwendet. Ganz wichtig ist: den RaspberryPi noch nicht mit Strom zu versorgen!

Das Betriebssystem (OS)

Bevor wir aber loslegen können müssen wir uns für ein Betriebssystem (engl. Operating System oder kurz OS) entscheiden. Die bekanntesten und meines erachtens besten finden sich auf https://www.raspberrypi.org/. Für dieses Projekt habe ich mich für Raspbian, einem auf den Raspberry Pi sehr gut angepassten Debian OS, entschieden. Raspbian ist in 2 Versionen erhältlich:

Raspbian Lite Raspbian with Desktop 
  • geringe Größe des Images
  • nur auf Basis der Cosole bedienbar
  • benötigt weniger Hardwareperformance
  • GUI kann nach installiert werden
  • im Vergleich zur Lite Version hoher Speicherplatz bedarf
  • bietet GUI zur Bedineung
  • Durch GUI erhöhte Anforderungen an Hardware
  • es kann ein Terminal für die Console geöffnet werden

 

Auf Grund der Tatsache das wir eine NAS als Speicher nutzen entscheide ich mich an dieser Stelle für die Lite Version.

Sobald wir uns Entschieden haben müssen wir uns nur noch das Image herunterladen.

Sobald es auf unserem Computer ist können wir die SD Karte in den Card-Reader stecken und das Image (sofern es bereits entpackt ist, also keine .zip-Datein usw.) darauf kopieren. Hierfür empfehlen sich diverse Programme die sich im Netz überall finden. Hier eine kleine Aufstellung zu diversen Tools:

  • Rufus → Windows Tool mit klarer, strukturierter Oberfläche um Images auf Sticks, SD-Karten und anderen Speichermedien zu kopieren. Formatiert das Medium auch vorher. Bisher gute Erfahrungen.
  • Linux Live USB Creator oder kurz LiLi → Grafisch bunter gestaltet und eine gute alternative zu Rufus. Formatiert auf Wunsch auch das Medium. Auch für Linux erhältlich.
  • Win32 Disk Imager → Grafisch spartanischer aber zuverlässiger Image-Writer. Überzeugt durch seine kompakte Art. Nur für Windows erhältlich. Bisher formatierte ich das Medium vorher immer selber.

Über weitere Vorschläge freue ich mich an dieser Stelle sehr!

 Sobald das Image auf der microSD-Karte ist kann es weiter gehen. Bitte habe an dieser Stelle geduld, da der Schreibvorgang ein wenig Zeit in Anspruch nimmt.

Der erste Start

Nach dem das Image auf der microSD Karte ist geht es an die Grundlegende Installation und passenden Einstellungen. Zuerst wird die microSD Karte in den Raspberry Pi eingesteckt. Bitte sei dabei Vorsichtig! Sobald die SD Karte im Raspberry Pi ist kann er mit Strom versorgt werden. Bitte stelle hier sicher das mindestens eine Tastatur (optional auch Maus) und ein Display angeschlossen sind. 

Sobald der Raspberry Pi startet führt er einen POST aus. Der POST ist ein Power On Self Test oder zu deutsch ein Einschalt Selbsttest bei dem er alle komponenten überprüft und sicherstellt das diese Funktionieren. Es sollten in diesem Zuge auch mehrere Raspberry's auf dem Bildschirm erscheinen.

Nach erfolgreichen Start (boot) wird nach dem Login Namen gefragt. Standardmäßig ist der User pi mit dem Passwort raspberry hinterlegt. Die Eingaben werden jeweils mit [Enter] bestätigt.

Hinweis: Funktioniert ein hier aufgeführter Befehl ein mal nicht und wurde von mir auch nicht mit einem sudo notiert, versucht einfach ein sudo davor zu setzen.

Grundlegende Einstellungen

Rasbian liefert von Hause aus ein Tool mit, durch das der Raspberry Grundlegend konfiguriert werden kann. Hierfür muss lediglich der Befehl:

 sudo raspi-config

eigegeben werden. Darauf hin öffnet sich folgendes Fenster:

 raspi config1

Im Raspberry Pi Software Configuration Tool wird über die [Pfeiltasten] zwischen den Menüpunkten Navigiert. Die [Tab] Taste kann zum springen und die [Leertaste] für Markierungen genutzt werden. Bestätigt wird per [Enter].

1. Als erstes muss das User Password geändert werden, da das Standardkennwort " raspberry " jedermann bekannt ist und ein Sicherheitsrisiko darstellt.Am besten ändern wir es in ein mindestens 8 Zeichen langes mit Zahlen und Zeichen versehenes Passwort.

2. Unter Network Options ändern wir unseren Hostnamen. Diesen Namen trägt unsere NAS im Netzwerk und ist darunter im Netzwerk ansprechbar. Ich habe mich für " Share " entschieden.

3. In den Localization Options sollten alle Punkte bis auf " I1 Change Locale " auf unser jeweiliges Land angepasst werden. Ich habe mich für Deutschland bzw. DE enschieden. Bitte achtet auf die UTF-8 konformität. Ihr solltet also ein UFT-8 Format wählen. Euer Keyboard Layout sollte an eure Tastatur angepasst sein. Testet das Layout bitte!

4. Als nächstes schalten wir die Interface frei welche wir benötigen. Dafür wählen wir " 5 Interfacing Options " aus. Folgend eine Aufstellung der Interface und wann wir sie benötigen:

Interface Beschreibung Benötigt?
Camera käuflich zu erwerben ist ein Kamera-Modul für den Raspberry. Um diese zu nutzen muss hier das Interface freigeschaltet werden. Nein, wir möchten eine NAS und keine Kamera.
SSH Um nicht immer einen Monitor mit Tastatur anzuschließen kann hier der Zugriff mittels SSH (Secured Shell) -Protokoll freigeschaltet werden. Kurz gesagt: Wir sehen hierüber unsere Shell auf einem entfernten Computer. Unbedingt, damit wir von jedem Gerät, welches uns SSH ermöglicht, auf die NAS zugreifen können.
VNC  schaltet das Virtual Network Computing Interface frei bzw. stellt einen Server Dienst hierfür zur verfügung. Hiermit kann der Bildschirminhalt an einen entfernten Computer gesendet werden. Falls wir uns für die Desktop Version von Raspbian entschieden haben, ja. Ansonsten sinnfrei da wir über SSH administrieren können.
SPI  schaltet die möglichkeit frei auf den GPIO Pins per Serial Peripheral Interface zu kommunizieren. Nein. Wir nutzen die Pins nicht.
I2C Interface für einen seriellen Datenbus. Nein. Wird in unserem Beispiel nicht benötigt.
Serial schaltet Shell Nachrichten auf der seriellen Schnittstelle frei. Nein. In unserem Fall ehr unwichtig
1-Wire dient der Ansteuerung von z.b. Temperatur Sensoren. Nein. In unserem Fall ehr unwichtig.
Remote GPIO dient dem ansteuern der GPIO Pins über das Netzwerk.

Nein. In unserem Fall ehr unwichtig.

 

5. Um unsere microSD-Karte komplett zu nutzen müssen wir das Filesystem auf die gesamte SD-Karte vergrößern. Hierfür wählen wir im Menü " Advanced Options " den Punkt " A1 Expand Filesystem ". 

Die Restlichen Punkte sind in unserem Fall ehr uninteressant, können aber gerne bearbeitet werden. Aber Achtung: Änderungen können den Raspberry oder das OS beschädigen!

Das Netzwerk

Damit wir auch an unsere Daten kommen bzw. unsere NAS administrieren können müssen wir das Netzwerk Interface konfigurieren.

I.d.R. nutzen wir Zuhause DHCP im Netzwerk. DHCP adressiert Geräte selbstständig und teilt ihnen alle nötigen Informationen mit. Jede IP hat unter DHCP eine leasing-time, welche dazu führt das nach einer Zeit X eine neue Adresse zugewiesen wird. Dies wäre fatal da wir eine feste IP benötigen um auf unsere NAS zu gelangen. Deshalb müssen wir eine feste IP-Adresse konfigurieren.

Mit dem Befehl:

 ifconfig

zeigt uns Raspbian die momentane IP Konfiguration. Hier taucht auch unsere DHCP Adresse auf dem eth0 Interface auf, sofern wir im Netzwerk DHCP nutzen.

Um die Adresse zu ändern müssen wir in die Datei interfaces welche unter /etc/network/ liegt. Dafür navigieren wir zuerst in das Verzeichnis und öffen sie in einem Editor.

 cd /etc/network/
 sudo nano interfaces

Anstelle von Nano kann auch jeder andere Editor genutzt werden. Eine Alternative wäre vi. Dafür ist nano durch vi im Befehl oben zu ersetzen. Sobald der Editor geöffnet ist können wir loslegen. Es muss folgendes in der Datei stehen:

auto lo

iface lo inet loopback

auto eth0

iface eth inet static

        address 192.168.1.100

        netmask 255.255.255.0

        gateway 192.168.1.1

Um die Änderungen zu speichern müssen wir lediglich [Strg] + [X] drücken. Der Dateiname darf auf keinem Fall verändert werden! Mit Ja/Yes bestätigen wir das überschreiben.

Damit unsere Namenauflösung bzw. DNS funktioniert müssen wir noch unser Gateway als nameserver eintragen. Dies geschiet in der resolv.conf welche sich unter /etc/ befindet. Um diese anzupassen machen wir folgendes:

cd /etc 
sudo nano resolv.conf

 

In der Datei resolv.conf wird nun unser Gateway ,welches wir in der interfaces Datei angegeben haben, eingetragen. Hierfür fügen wir folgende Zeile ein bzw. ersetzen die bestehende durch:

 nameserver 192.168.1.1

Damit wäre die Netzwerk Konfiguration abgeschlossen.

An dieser Stelle können Monitor und Tastatur angebaut werden und über die zuvor konfigurierte IP-Adresse 

Speicher

Jetzt geht es an die Speichermedien in Form der beiden Festplatten. Es kann die erste Festplatte angeschlossen werden welche unsere Daten speichern wird. Über den Befehl:

 dmesg

erhalten wir eine Ausgabe diverser Systemnachrichten. In diesen sollte dann auch die Meldung auftauchen das eine Festplatte angeschlossen wurde. Sie sollte mit "sda" gekennzeichnet sein. Diese Bezeichnung benötigen wir später für die Partitionierung der Festplatten.

Die Partitionierung habe ich über das bereits installierte Tool fdisk durchgeführt. Im Internet findet man aber auch andere alternativen. Über den Befehl:

 sudo fdisk /dev/sda

rufen wir das Tool auf und beschränken uns auf die angeschlossene Festplatte sda welche unter /dev/ zu finden ist.

Mit der Taste p rufen wir uns die Partitionstabelle auf. Sofern noch partitionen zu finden sind müssen diese gelöscht werden. Dies wird über die Taste d und der passenden Auswahl in der Abfrage erledigt. 

Ist die Partitionstabelle leer kann über die Taste n eine neue Partition erstellt werden. Ich habe mich für folgende Partitionierung entschieden: 

Device  Start End Sectors Size
/dev/sda1    2048 781250001 781250001 372,5G
/dev/sda2  781252608 1953127608 1171875001   558,8G
/dev/sda3  1953128448   2050784698   97656251 46,6G
/dev/sda4  2050785280 2930277167 879491888 419,4G

 

Die Anzahl der Partitionen als auch die Größe können nach eurem belieben variieren. Nach jeder Partition muss erneut die Taste n betätigt werden. Die Aufteilung ist egal und kann nach euren Vorstellungen skaliert werden. Nach der Partitionierung der einzelnen Partitionen können die Dateisysteme geändet werden. Hier reicht eigentlich der Linux Standard. Es kann aber auch ein anderer Typ wie NTFS (Treiber müssen ggf. installiert werden) genutzt werden. 

Um die Ändereungen in die Partitionstabelle zu schreiben muss die Taste w betätigt werden. Achtung! Überprüft lieber noch ein mal eure Konfiguration mit p!

Jetzt könnt ihr die vorherigen Schritte des Kapitels für die zweite Festplatte wiederholen. Denkt daran das es sich hier mit hoher warscheinlichkeit um sdb handelt und Pfade angepasst werden müssen. Auf der Festplatte selber habe ich nur eine große Partition, wobei auch die gleiche Aufteilung wie bei sda genommen werden kann (dann den Backup Ordner noch in die einzelnen Bereiche aufteilen).

Wenn ihr fdisk wieder verlassen habt müsst ihr neue Verzeichnisse für eure Daten erstellen. Diese wären in meinem Fall Bilder, Daten, Dokumente, Medien und Backup welche sich im /media Verzeichnis befinden.

Dies realisiert ihr über den Befehl:

mkdir /media/Ordnername

Und führt diesen für jeden Ordner eurer Wahl aus. Hintergrund ist das die erstellen Partitionen in die Ordner gehangen werden. So können auch spätere Festplatten oder andere Speichermedien in weitere Ordner gehangen werden. Beim einhängen spricht man auch vom mounten. Daher leitet sich der folgende Befehl ab:

sudo mount /dev/sdXX /media/passenderOrdner

welcher die Partition sdXX (X ist durch den Namen der Partition zu ersetzen) in den Ordner eurer wahl einhängt. Dies führt ihr für alle eure Partitionen durch.

Damit wir nicht bei jedem reboot des Raspberry alle Partitionen neu mounten müssen tragen wir sie in die sogennante fstab ein.

Über den Befehl:

sudo blkid

werden die sogenannten UUID's (eindeutige Addressen / Universally Unique Identifier) angezeigt. Eine Ausgabe könnte so aussehen:

/dev/sda1: LABEL="Bilder" UUID="3A10707AF56B331B" TYPE="ntfs" PARTUUID="10b6e096-01"

/dev/sda2: LABEL="Daten" UUID="9CEE488BE488E1D0" TYPE="ntfs" PARTUUID="10b6e096-03"

Mit den nun bekannten UUID's können wir in der fstab die Partitionen so eintragen das sie beim start an den richtigen Ort gemountet werden. Über den Befehl:

sudo nano /etc/fstab

gelangt man in die fstab Datei. Hier findet man in der Regel bereits Einträge. Wichtig sind die UUID, mounting Ort (Mountpoint), Dateisystem und die Parameter der Partition. Einträge in der fstb könnten so aussehen:

UUID=3A10707AF56B331B   /media/Bilder/  ntfs    defaults,users,auto     0       2
UUID=9CEE488BE488E1D0   /media/Daten/   ntfs    defaults,users,auto     0       2
UUID=9CE488E1E488BED0   /media/Dokumente ntfs   defaults,users,auto     0       2
UUID=38AA8F9EAA8F56F2   /media/Medien   ntfs    defaults,users,auto     0       2

UUID=32E8100CED5380FC   /media/Backup   ntfs    default,users,auto      0      2

Die einzelnen Spalten enthalten Folgende Informationen:

Device  Mountpoint  FStype  Options  Dump  Pass 
 Hier wird das Gerät mit seiner UUID oder seinem Pfad (/dev/sdX) angegeben Pfad an dem das Gerät/die Partition eingehangen (gemounted) wird Dateisystem z.B. ntfs, fat usw. Automatische mounten, Lese-Schreibberechtigungen, Default-Einstellungen Angabe ob per Dump gesichert werden soll  Angabe ob Dateisystem per fsck beim booten überprüft werden soll

(Optional) HDPARM

Nicht alle Festplatten unterstützen das automatische Abschalten bei nicht Nutzung unter Linux. An dieser Stelle hilft das Programm hdparm welches via 

sudo apt-get install hdparm

installiert wird. Nach der Installation kann über die hdparm.conf, welche sich unter /etc befindet, die Konfiguration vorgenommen werden. Innerhalb der hdparm.conf werden nun die Festplatten mit ihrer Spindowntime angegeben.

Ein Beispiel wäre:

/dev/sda { spindown_time = 60 }

/dev/sdb { spindown_time = 60 }

Hierbei ist zu beachten das eine Spindowntime von 60 einer Zeit von 5 Minuten entspricht. Es wird der eingetragne Wert mal 5 genommen.

Samba

Um den Raspberry Pi wie eine NAS zu nutzen benötigen wir noch Freigaben. Hierfür Nutzen wir Samba welches über den Befehl:

sudo apt-get install samba

installiert wird. Etwaige Fragen zu Abhängigkeiten können mit ja bestätigt werden. Nach der Installation muss Samba noch konfiguriert werden. Dies wird in der smb.conf unter /etc/samba liegt. Hier wäre eine Beispielkonfiguration:

[global]
workgroup = WORKGROUP
server string = HOME-SHARE
#=============Netzwerk ==================
log file = /var/log/samba/log.%m
max log size = 1000
#===========Authentication ================
security = user
encrypt passwords = true
passdb backend = tdbsam
#==============Share====================
[Freigabe Media]
        comment = "gesamte Freigabe"
        path = /media/
        browsable = yes
        guest ok = no
        public = no
        writeable = yes

Diese kann erweitert werden. So unter anderem mit weiteren Freigaben oder erweiterten Userzugriffsrechten.

Backup

Um unsere Daten sicher zu Speichern und Datenverlust vorzubeugen nutzen wir eine zweite Festplatte und erstellen ein Skript zur Sicherung. Im vorherigen Punkt Speicher wurde bereits die zweite Festplatte partitioniert und gemounted. Jetzt kann ein Skript und der passende Cronjob erstellt werden. Für unser Backup benötigen wir rsync, welches im Linux bereits installiert sein sollte. 

Als erstes erstellen wir einen neuen Ordner in dem wir unsere Skripte ablegen:

sudo mkdir /opt/skripte

Mit dem Befehl:

sudo nano /opt/skripte/backup.sh

erstellen wir ein neues Skript. Der Inhalt des Skriptes sieht in meinem Fall so aus:

#!/bin/bash
rsync -avh --delete /media/Bilder /media/Backup/
rsync -avh --delete /media/Daten /media/Backup/
rsync -avh --delete /media/Medien /media/Backup/
rsync -avh --delete /media/Dokumente /media/Backup/
echo Backup fertig gestellt. Keine Fehler oder Störungen. Programm läuft innerhalb normaler Parameter.
exit 0

Die Erklärung der Zeilen:

#!/bin/bash  sogenannte "Shebang" welche dem OS sagt das es sich um ein Skript handelt das mit dem Systeminterpreter ausgeführt werden soll.
 rsync -avh --delete /media/XXX /media/XXX übergibt dem Interpreter den Kommandozeilenbefehl für rsync und folgenden Attributen: a=vereint viele weitere Attribute um z.B. Rechte und Ordnerstrukturen beizubehalten, v=zeigt alle ausgeführten Schritte an, h=macht Ausgaben für uns lesbarer, --delete=löscht gelöschte Dateien auch im Backup
 echo ... gibt die nachfolgenden Zeichen aus, z.B. um den Abschluss des Skriptes zu Melden
 exit 0 Ende des Skriptes

Der Editor wird mit [Strg] + [X] verlassen. Abfragen werden mit yes bestätigt.

Nun muss unser Skript in die Crontab aufgenommen werden.

Dazu nutzen wir den Befehl:

sudo crontab -e

und tragen folgendes in die Crontab ein:

0 0 * * * sh /opt/skripte/backup.sh >>/opt/skripte/backup_log 2>&1

Die beiden Nullen am Beginn der Zeile geben an das um 00:00 Uhr das backup.sh Skript ausgeführt und Ausgaben in das backup_log umgeleitet werden sollen. Die Zeit kann durch Angabe der Stunde und Minute verändert werden.

Wir verlassen den Editor und Speichern die Änderungen.

Damit ist unsere NAS im Netzwerk erreichbar und einsatzbereit.

Social (2)

Dir gefällt die Seite!? Dann "like" sie auf folgenden Netzwerken:

facebook       Twitter Logo Blue     Bildergebnis für Instagram    youtube logo 2018     

 

© 2019 Technik-Kiste.de. All Rights Reserved.
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Weitere Informationen Ok Ablehnen