Leserartikel Ubuntu Selfmade NAS: HowTo, Hardware, Software, Scripts, Tipps

LieberNetterFlo

Rear Admiral
Registriert
Feb. 2006
Beiträge
5.831
Hallo Zusammen,

ich hab mir die letzten paar Wochen ein Ubuntu Selfmade-NAS zusammen gebaut, und will euch hier meine Erfahrungen schildern, vielleicht findet ihr Anreize euch selbst sowas zu bauen :)

Zuerst musste ja die Hardware her, der Plan war es, möglichst klein zu bleiben, irgendwie doch Erweiterbarkeit zu wahren, also hab ich am Ende dann auf MiniITX gesetzt. Eine CPU braucht das Teil zwar auch, aber ich empfand dass der Netzwerkcontroller auch gut sein sollte, und da kommt für mich nur Intel in Frage. Ich hab mich auch erstmal auf 3 HDDs eingeschossen, da das Board auch nur 4 SATA hat hab ich zur Erweiterung einen PCIe SATA Controller benötige. Hier nun meine Hardware:

Board: Intel DH67CF
CPU: Intel Celeron Dual-Core G1620
CPU-Kühler: Intel Boxed
Case: Fractal Design Node 304
RAM: 2x4 GB DDR3 G-Skill 1333 MHz CL9
NT: FSP Fortron/Source FSP200-50GSV
Belüftung: 2x92mm Front, 1x140mm Back (war beim Gehäuse dabei)
Sys-HDD: Intel X25-E 32GB
Storage-HDD: 3x500GB 7200er HDDs

HINWEIS: Die entgültigen HDDs sind noch nicht vorhanden, es kommen 3x3TB rein

Und bevor das große Konfigurieren los geht, hier als "Leckerli" mal die Performance und Stromverbrauchswerte:

Verbrauch Off: <1W
Verbrauch S3/Standby: <1W
Verbrauch IDLE ohne HDD: 13-14W
Verbrauch IDLE mit HDD Standby: 17W
Verbrauch IDLE mit HDD On: 26W
Verbrauch Read/Write: 40W

Performance 1Gbit LAN Write: 105 MB/s
Performance 1Gbit LAN Read: 90 MB/s

Boottime from Off: 11 Sekunden
Boottime from S3/Standby: 1 Sekunde

WakeOn-LAN: funktioniert
HDD Spindown: funktioniert

So, das große "Problem" war nun die Software. Ich wollte UNBEDINGT maximale flexibilität, auch wenn das heißt ich muss vieles selbst konfigurieren. Da blieb mir nur noch Ubuntu, auch desshalb weil ich mit Ubuntu bereits meinen kleinen Alix-Server betreibe, auch einen HTPC auf Ubuntu-Basis habe und schon öfters auf der Konsole aktiv war.

Erster Schritt (die Basics)
  • Ubuntu Installieren, ich empfehle Ubuntu Server 12.04 LTS.
  • am Besten alle Festplatten bis auf die Systemplatte abziehen und von USB Stick oder CD booten.
  • Netzwerkkonfiguration: nach dem Zuweisen der IP Adresse durch DHCP einmal auf zurück und die IP Manuell vergeben.
  • Standardsetup, und bei Serverollen noch "Basic Ubuntu Server", "Samba Server" und "SSH Server".
  • Benutzer: ich nehme immer "nas" (genau so wie Rechnername "nas")
  • komplette Festplatte verwenden, GRUB in den MBR installieren.
  • System neu starten, dabei USB Stick abziehen/CD raus, einloggen und
    sudo apt-get update
    sudo apt-get upgrade
  • kurz die kleinen Helferli installieren
    sudo apt-get install python-software-properties software-properties-common unp
  • wieder runterfahren
    sudo shutdown -h now
  • Storage HDDs anschießen, hoch fahren
Done! der Rest geht per Putty von eurem "normalen" PC aus.

Zweiter Schritt (das Storage)

Dritter Schritt (die Services)
  • Wir wollen bei den HDDs Strom sparen, also die HDDs nach 20 Minuten in den Standby, zuerst mal das entsprechende Programm installieren
    sudo apt-get install hdparm
    danach kann man folgendermaßen den Status einer HDD abfragen
    sudo hdparm -C /dev/sda
    und sie auch gerne mal manuell in den Standby schicken
    sudo hdparm -y /dev/sda
    aber wir wollen das ja automatisieren, also öffnen wir die Konfigurationsdatei
    sudo nano /etc/hdparm.conf
    und tragen ans Ende je nach Anschluss und Anzahl folgendes ein
    /dev/sda {
    spindown_time = 240
    }

    /dev/sdb {
    spindown_time = 240
    }

    /dev/sdc {
    spindown_time = 240
    }
    240 entspricht 20 Minuten, weitere Zeiten bekommt man über das Manual von hdparm

  • Ich bin ja ein Fan von Webmin, wesshalb der bei mir immer drauf kommt
    sudo nano /etc/apt/sources.list
    und folgendes ans Ende eintragen
    Code:
    deb http://download.webmin.com/download/repository sarge contrib
    deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
    und den Key noch installieren
    sudo wget http://www.webmin.com/jcameron-key.asc
    sudo apt-key add jcameron-key.asc
    die eigentliche Installation
    sudo apt-get update
    sudo apt-get install webmin
    danach ist Webmin auf Port 10000 Verfügbar, zb
  • Plex Media Server, wirklich ein super Teil, streamt eure Videos, Bilder, Musik und externe Medien wie Youtube etc an eure DLNA Geräte und euer Handy, übers Internet! Mit Transcoding! Irre! Zuerst die Installation
    sudo nano /etc/apt/sources.list
    dort eintragen
    danach den Key laden
    sudo wget http://plexapp.com/plex_pub_key.pub
    sudo apt-key add plex_pub_key.pub
    und nun die eigentliche Installation
    sudo apt-get update
    sudo apt-get install plexmediaserver

    Danach ist euer Plex Media Server als DLNA Gerät im lokalen Netzwerk erreichbar. Nun müssen wir den aber noch konfigurieren, dazu besuchen wir im Browser (und das geht nun NUR im lokalen Netzwerk)

    Dort klickt man sich das erste mal durch das Setup, einen myPlex Account benötigt man erst einmal nicht, auch eine Bibliothek und/oder einen Kanal erstmal nicht hinzufügen

    Bevor wir nun die ersten Verzeichnisse hinzufügen wollten wir ja alles auf Deutsch, desshalb: Wenn man nun auf seinem Dashboard ist klickt man auf Kanäle Alle Anzeigen (das sind die kleinen Punkte rechts) -> Verzeichnis -> More... -> Metadata Agents -> OFDB installieren + Moviepilot installieren

    Danach rechts oben Einstellungen -> Plex Media Server -> Agenten -> Filme -> Freebase -> so sortieren das OFDB ganz oben steht, direkt darunter Moviepilot und als drittes Freebase. Dann das auf OFDB Anbieter Einstellungen (das kleine Zahnrad) und alle Häckchen setzen -> Speichern, dann Moviepilot Anbieter Einstellungen (das kleine Zahnrad) und KEIN Häckchen bei Lade Zusammenfassung von ... und eins setzen bei Lade Filmplakate von ... -> Speichern und als drittes noch Freebase Anbieter Einstellungen (das kleine Zahnrad) -> ein Häckchen bei Localized Titles

    Wieder zurück auf das Dashboard (das Haus links oben) und bei Meine Bibliothek auf Neue Sektion (das Plus Zeichen) -> Filme -> einen Namen vergeben, auf Einen Ordner hinzufügen klicken -> dort dann zb /storge/filme eintragen, bestätigen mit Ordner hinzufügen -> WICHTIG: klickt nun auf Erweiterte Optionen anzeigen und wählt bei Sprache -> Deutsch und schließt das dann durch Neue Sektion ab

    Danach Scannt der Server eure Filme und listet sie bei Meine Bibliothek auf, könnte dann so aussehen:

    plex1.jpg plex2.jpg

    Nun sind diese Filme via Webinterface (Flash) und via DLNA im Netzwerk verfügbar zB bei einem entsprechenden TV, oder einer App auf dem iPad. Wenn man beim Router noch den Port 32400 auf das NAS weiterleitet kann man in den Einstellungen noch myPlex aktivieren (Konto benötigt!) und auf sein Handy streamen. Der Server übernimmt dann das Transcoding (Bitrate in der App einstellbar). Kein Transcoding von BD ISO Dateien, bitte vorher mit MakeMKV umwandeln bzw. remuxen, geht ganz schnell.

  • Mit den PowerManagement-Utils kann man seinen Rechner sehr komfortabel in die entsprechenden Power-Safe Modi fahren, entweder Manuell oder man benutzt die Befehle in einem Script oder von Cron. Also ganz schnell installieren
    sudo apt-get install pm-utils
    und danach sind die 3 Befehle verfügbar
    usr/sbin/pm-suspend

    /usr/sbin/pm-hibernate

    /usr/sbin/pm-suspend-hybrid
  • Noch mehr Stromsparen: wir fahren automatisch in StandBy und wieder hoch! Hierzu hab ich ein kleines Script geschrieben (naja, eigentlich kommt es größtenteils von Ubuntuusers.de, alle Credits gehen an sie) das so grob folgende Eigenschaften aufweist:
    • Fährt den Rechner in Standby und stellt eine Zeit zum automatischen Wecken
    • deaktivierung durch anlegen einer kleinen Datei = quasi manuelles deaktivieren
    • kann per Parameter überprüfen ob
      • einer o. mehrere PCs im Netzwerk aktiv ist
      • eine o. mehrere Applikationen laufen
      • eine Sambafreigabe gerade in Benutzung ist
      • ein Benutzer eingeloggt ist (auch SSH)
      sollte ein Punkt zutreffen und der Check Parameter ist gesetzt, dann bricht der Vorgang ab und das NAS bleibt aktiv
    • Kann komfortabel über ein paar Zeilen angepasst werden
      CLIENTS='192.168.178.24'
      APPLICATIONS='"^wget$" "^screen$" "^apt-get$" "^aptitude$" "^dpkg$" "^cp$"'
      SAMBANETWORK='192.168.178.'
      FILE=/home/nas/off
    Script runterladen
    Code:
    wget https://www.dropbox.com/s/d3pf6g91x79wrb0/check_busy.sh
    ausführbar machen
    und per
    eine Aufgabe hinzufügen
    0,30 0-8,22-23 * * * /home/nas/check_busy.sh 15:00 1 #standby bis 15 Uhr
    in meinem Beispiel für er immer um xx.00 und xx.30 Uhr, zwischen 0-8 und 22-23 Uhr das Script aus mit den Parametern "15:00" und "1" welche bedeuten, dass er um 15 Uhr wieder aufwachen und die checks vornehmen soll.

    Hier müsst ihr eventuell noch beachten, dass wenn eure Uhr auf Lokal oder UTC läuft man das Script in der Zeile mit dem rtcwake aus dem -u ein -l machen müsst

Comming Soon:
- Samba Freigabe
- S.M.A.R.T. Utilities
- Temperaturüberwachung
- OpenVPN Client
- Snapshots


Bitte Fragen stellen, ich ergänze Sie dann direkt im Tutorial :)
 
Zuletzt bearbeitet:
das ist ja ganz nett, aber bisher ist das eine ganz normale Ubintu Installation und hat mit NAS eigentlich gar nix zu tun!

Die (derzeitige) Funktionalität wird von meinem Synology NAS bei weitem getoppt (entspricht der ToDo Liste), Performance ist vergleichbar und STromverbrauch beim 2-Bay Gerät niedriger beim 4-Bay wieder vergleichbar.

Also ohne ein funktionierendes S.M.A.R.T Monitoring System, Powermanagement (kontrolliertes Herunterfahren bei niedrigem USV Stand), Mail-Alerts usw. von einem NAS zu sprechen, ist schon etwas weit aus dem Fenster gelehnt, meiner Meinung nach.

Eigentlich kommen erst jetzt die interessanten Schritte und Konfigurationen!
 
Performance 1Gbit LAN Write: 105 MB/s
Performance 1Gbit LAN Read: 90 MB/s

Womit gemessen? Sind für LAN schon sehr gute Werte, mit RaidZ selbst gut, immerhin wird die Berechnung der Parity doch vom Prozessor gemacht. Könntest du mal ein paar richtige Performance Tests machen? Mit Programmen und evtl. nen Ram rausnehmen?

Ansich würde mich ja die Kombination von deinem ZFS mit der Hardware von gigges91 interessieren. Ob der AMD da ausreicht.

Wie sieht es aus mit Erweiterung des RaidZ? Kannst du einfach eine Platte dazuhängen oder dasselbe Problem wie mit jedem Raid, dass du erst auflösen musst und dann neu erstellen? Hätte das Ganze auf nem USB Stick gepasst oder ist die Intel SSD Pflicht?

Danke schonmal für den Thread und ein paar Antworten.

Die (derzeitige) Funktionalität wird von meinem Synology NAS bei weitem getoppt (entspricht der ToDo Liste), Performance ist vergleichbar und STromverbrauch beim 2-Bay Gerät niedriger beim 4-Bay wieder vergleichbar.
Das bezweifel ich stark. Bei einem Raid-5 würde die Berechnungsperformance exorbitant steigen, ich bezweifel ob das diese Fertig-NAS Dinger bei der Bandbreite schaffen. Er hat 3 Festplatten und eine SSD drin.
 
nice....den thread hab ich mir schon angepinnt :-)
 
@Onkelhitman

also Performance war Windows SMB Freigabe kopieren, aber auch auch mit ATTO

x675.png

Wie meinst du "richtige Performance Tests"? Brauch ich Tutorials :D
ZFS profitiert MASSIV von mehr RAM, im Grunde sagt man sogar pro TB Platz 1 GB RAM mindestens.

Erweiterung bei ist bei ZFS leider auch nicht möglich, also der RAIDZ den ich erstellt habe kann ich nicht erweitern. Man kann nur den gesamten Pool erweitern, aber halt nur durch neue Platten und die alten bleiben in ihrem Verbund. Was woll gehen soll: eine Platte nach der anderen austauschen gegen eine Größere und jedes mal wiederherstellen. Wenn man nun alle Ausgetauscht hat, zB gegen 4TB platten hat man 3x4TB bei RAIDZ = 8 TB Nutzspeicher.

Klar hätte das ganz auch auf einen USB Stick gepasst, ich hatte halt noch eine Intel SLC hier, und die ist ja fast unkaputtbar wenns um schreiben/lesen geht, aktuell belegt 2,1 GB, ich denke es wird mehr wenn der Media Server mehr Metadaten hat :) am besten nimmt man da einen USB3.0 Stick (Achtung! Spezielle vorgehensweise für Ubuntu benötigt, damit er auch als 3.0 läuft ... siehe Google)

Das ZFS hat übrigens automatische Deduplizierung, was bedeutet das? ich kann die gleiche MP3 2000 mal in 2000 Ordner auf das NAS kopieren und sie belegt nur ein mal den Platz :)
 
Zuletzt bearbeitet:
Sehr interessant! Und vor allem nett, dass du deine Erfahrungen weitergibst.
Bin dabei, was Ähnliches zu basteln, nur mit Solaris und napp-it, hab aber schon überlegt, ob Linux als Unterbau nicht zukunftstauglicher ist. Allerdings ist die ZFS-Implementierung auf Solaris vermutlich weiter und ausgereifter.
 
Meines wissens nach musst du den pool sehr wohl noch mounten nachdem man ein Dateisystem erstellt hat: zfs set mountpoint=[...]

Und außerdem kenne ich das so, dass man zumindest eine Partition über die gesamte platte anlegt und daraus einen pool erstellt, statt das gesamte Gerät zu verwenden, aber ob das einen Unterschied macht weiß ich nicht :confused_alt:

Und in meinen Augen ist ein NAS ohne Samba, also Freigaben im Netzwerk, und ohne OpenVPN und so noch kein NAS....

Ach ja und bist Du sicher, dass die Platten wirklich alle 5 Min aus gehen sollen? Das könnte in meinen Augen dazu führen, dass sich die Drives etwas oft an- und wieder abschalten. ist ja auch nicht so gut für die dinger.

Für eine Temperaturüberwachung eignet sich LM-Sensors.

Der Speed ist auf jeden Fall nett!
 
Zuletzt bearbeitet:
joa, weiß nicht ob man Partitionen nimmt oder gleich die ganze Platte, oder ob das Eine oder das Andere besser ist , so funktionierts zumindest :)
Wenn ich meine 3TB Platten hab dann erweitere ich noch um die 4K Sektoren und deren spezifische Einstellungen (Advanced Format)

Den Mountpoint macht er selbst beim Anlegen des Pools, der wird wirklich einfach auf root gemounten.

5 Minuten könnte wirklich ein bisschen wenig sein, ich werde das wohl noch ein bisschen höher machen ;)

Samba kommt noch ... is aber eine harte Nuss, zumindest so wie ich ihn gerne hätte ;)
 
eigentlich dachte ich, so wäre er perfekt:

[Filme]
comment = Filme HD und SD
browsable = yes
guest ok = yes
write list = nas
writable = no
path = /storage/filme
force user = root
force group = root
directory mask = 755
force directory mode = 755
directory security mask = 755
force directory security mode = 755
create mask = 644
force create mode = 644
security mask = 644
force security mode = 644

aber stimmt wohl nicht :D

hätte ihn halt gerne so, dass Dateien 644 werden, Verzeichnisse 755, der Benutzer "nas" nach einem Login Schreiben/Löschen/Lesen kann, und ein Gast (am besten ohne Login) nur Lesen kann. Generell wollte ich auch dass die Dateien dem root gehören (ist das vereinbar mit der Anforderung dass der Samba-Server lesen/schreiben kann?)
 
Bei Samba ist es so, dass bei einer korrekten authentifizierung alle aktionen im namen dieses Users ausgeführt werden. Hat dieser die berechtigung Lesen schreiben ausführen, ist aber nicht besitzer der dateien aber in dessen gruppe, wird das auch so klappen. Will man einen gast zugang so kann man diesem mit dem eintrag map to guest einem nutzer zuweisen, der ggf in der Gruppe des Authentifizierten Benutzers ist (user- Gruppe). Oder man vergibt einfach read rechte auf alle anderen als besitzer und gruppe. Dann gelten für ihn diese berechtigungen und da kann man ja einfach read reinsetzen. Diese User müssen Samba auch bekannt sein (Samba user anlegen). Schreibt jetzt aber der authentifizierte benutzer neue dateien auf das share ist auch er der besitzer, da ja immer in dessen namen gearbeitet wird! daher klappt das nicht was du dir da ausgedacht hast mit dem root besitz. Root gehört aber per se alles, von daher.

Das Problem ist, bei Security = user wird dem samba server die credentials des Windows clients übergeben, stimmen diese nicht mit dem nas user überein (was schonmal nich sein kann außer dein profil heißt "nas" an deinem rechner) wirst du automatisch als guest gemappt. Man würde jetzt also her gehen und alle user mit Name und Passwort als unix und samba user anlegen, in eine gruppe packen und noch einen separaten guest account erstellen. Dann kann sich jeder mit seinen credentials AUTOMATISCH am Share anmelden, und der Guest wird auch automatisch gemappt mit ensprechenden rechten. Für alle in der gruppe gelten dann die rechte wie sie konfiguriert sind also zB 664 für rw- rw- r-- wenn ich das richtig sehe. So wird der gast user automatisch nix löschen können :)

Um unterschiedliche berechtigungen zwischen dateien und ordnern zu setzen bietet sich folgendes als globale einstellung an:

create mask = 0664
directory mask = 0775
security mask = 0664
directory security mask = 0775

War das verständlich?

[global]
security = user
map to guest = bad user
guest account = gast
create mask = 0664
directory mask = 0775
security mask = 0664
directory security mask = 0775
force security mode = 664

[Filme]
comment = Filme HD und SD
browsable = yes
guest ok = yes
writable = yes //sonst kann keiner schreiben
path = /storage/filme
read list = gast

EDIT: hab nochmal ein bisschen dran rumgebaut, so müsste es aber passen.
 
Zuletzt bearbeitet:
ne, noch nicht ganz ... ich wollte eigentlich für den Gast keinen extra Account anlegen. Auch meinen Benutzer auf dem normalen PC will ich auf dem NAS nicht anlegen, wenn ich was schreiben will verbinde ich über Netzwerklaufwerk Verbinden und gebe dort die Daten ein von meinem sudo Benutzer.

Wenn ich "writable = yes" mache und "write list = nas" (so heißt mein Benutzer) dann verbiete er doch automatisch das schreiben für alle anderen, oder? und mit "force user = root" und "force group = root" müsste ich doch Besitzer und Besitzergruppe erzwingen können beim schreiben/erstellen, oder?

p.s. hab Tutorial ergänz mit Stromsparscript :)
 
Zuletzt bearbeitet:
Denn musst du den gast einfach auf nobody mappen.

das mit deinem force user bewirkt, das der nas user die dateien, die er geschrieben hat hinterher nicht lesen kann weil er ja nicht root ist. außer du packst ihn in die root gruppe. Das halte ich aber vom sicherheitsaspekt für unsauber. Man könnte dann force group = user machen, da bin ich mir aber nicht sicher ob das klappt.
 
Aber wie frühstückst du dann deinen gast account ab, der hat dann ja die gleichen rechte wie der nas user, da er auch über others läuft wenn er nicht in der gruppe ist? Dann kannst Du dir gleich den nas user sparen und einfach mit root mappen wenn du schreiben willst und alles andere über den gast machen. Das macht man übrigens aus sicherheitsgründen eigentlich nicht. Es wird empfohlen root garnicht nach außen zu führen und alles mit einem separaten admin account und sudo zu machen. Oder ist das dein nas user? denn hab ich das nur falsch verstanden...
 
Code:
[global]
security = user
map to guest = bad user
guest account = nobody
create mask = 0644
directory mask = 0755
security mask = 0644
directory security mask = 0755
force security mode = 644

[Filme]
comment = Filme HD und SD
browsable = yes
guest ok = yes
writable = yes //sonst kann keiner schreiben
path = /storage/filme
write list = nas

Da der nas user alles schreibt brauchst du keine gruppen und eigentümer forcieren. wenn du dich mit nas anmeldest wird eh alles mit dessen berechtigungen geschrieben nach den defiierten masken. Was die Gruppe treiben darf ist auch wurscht, da du ja immer mit dem nas user drauf gehst. Durch den gast account und die write list und die berechtigungen kann der gast lesen und ordner öffnen aber nix verändern und schreiben. so wie es sein soll :) Das muss aber auch im Dateisystem für bestehende Ordner also den Share Ordner einmal eingerichtet werden :)
 
Zuletzt bearbeitet:
ich habs mal nun eingestellt wie du geschrieben hast ... nun musste ich halt den kompletten /storage/ dem user "nas" überschreiben (chown nas:nas) ... schade dass ich das nicht dem root lassen kann :)
 
Zurück
Oben