Mein Mini Backup NAS mit Rock64 Single Board Computer
Nach meinem Umzug nach Passau habe ich leider nicht mehr die schnelle Internetverbindung, die ich ich vorher hatte. Das betrifft vor allem den Uplink. Ärgerlich, wenn das früher genutzte NAS im Elternhaus steht, und die Bandbreite beim Hochladen über das Internet so gering ist, dass man Backupvorgänge immer wieder frustriert abbrechen muss, um überhaupt noch im Internet surfen zu können.
Um das Problem zu entschärfen, habe ich beschlossen, ein weiteres, aber deutlich kleineres NAS für meine Wohnung zu bauen. Es sollte keine Speichererweiterung darstellen, sondern lediglich Backups meines Laptops beherbergen. Im Folgenden will ich euch die Komponenten meines NAS und das Resultat vorstellen.
Anforderungen an das neue System waren:
- Geringer Stromverbrauch
- Geringe Lärmemissionen (kleine Wohnung, Nähe zum Bett)
- Geringe Anschaffungskosten (immer noch Student …)
- Hohe Performance (Backups sollen möglichst schnell von der Bühne gehen)
- Die Möglichkeit, das System auch für andere Zwecke einsetzen zu können (DNS, VPN, …)
Hardware
Auf meiner Suche nach einer Hardware-Basi für meine Eigenbau-NAS-Lösung bin ich auf das Pine Rock64 Board gestoßen. Das kurze SBC Vergleichsvideo von ExplainingComputers zeigt verschiedene Single Board Computer im Hinblick auf ihre NAS-Tauglichkeit. Das Rock64 Board hat mir vor allem wegen des USB 3.0 Anschlusses und der Gigabit Ethernet Schnittstelle gut gefallen. Beide Schnittstellen können gleichzeitig intensiv genutzt werden, ohne dass die eine Schnittstelle die andere Ausbremst (wie es bei den meisten anderen Single Board Computern der Fall ist). Häufig hängen Ethernet und USB an einem (USB 2.0) Bus, sodass die Leistung stark reduziert wird, wenn beides genutzt wird. Vor allem bei NAS-Anwendungen ist das hinderlich, denn so kann man keine der beiden Schnittstellen voll ausschöpfen.
Beim Rock64 ist das anders: Die Schnittstellen sind an verschiedene USB-Hosts angebunden und müssen sich die Bandbreite daher nicht teilen. Ethernet und USB 3.0 können damit unabhängig voneinander voll ausgelastet werden.
Für den Datenspeicher habe ich mich für eine 1 TB SSD von Crucial entschieden. Eine SSD sollte es vor allem wegen des Strombedarfs und des Lärmpegels sein. Zudem sollte bei diesem NAS auf ein RAID zur Datenabsicherung verzichtet werden. Um dennoch ein zuverlässiges System zu erhalten, empfiehlt sich der Einsatz eines nichtmechanischen Datenspeichers. Und nicht zuletzt sorgt eine SSD natürlich für ein angenehm schnelles System. Der Flaschenhals des NAS sollte am Gigabit-Ethernet liegen - nicht am Datenspeicher.
Zusammen mit einem USB-Festplattengehäuse und einem zum Rock64 passenden Acrylglasgehäuse lässt sich ein einfaches und leistungsfähiges, aber optisch durchaus ansprechendes NAS bauen.
Teileliste und Preise
* Pine
* Pine Rock64 Board 4 GB | ~ 38,00 €
* Pine Rock64 Kühlkörper (optional) | ~ 0,40 €
* Steckernetzteil EU | ~ 6,00 €
* Acrylgehäuse Rock64 | ~ 6,80 €
* Versand aus China nach Europa | ~ 10,00 €
* Samsung EVO Plus Micro SDXC 64 GB Class 10 U3 | ~ 20,00 €
* ICY BOX Case 2,5 Zoll SATA USB 3.0 Festplattengehäuse | ~ 18,00 €
* 1000GB Crucial MX500 2.5" (CT1000MX500SSD1) | ~ 210,00 €
--------------------------------------------------------------------------------------------
Gesamtkosten: 309,20 €
(Stand: Juli 2018)
Software
Ursprünglich hatte ich vor, das NAS mit FreeBSD zu betreiben. Einerseits wegen des nativen ZFS-Supports, aber auch, um in der Praxis mehr in den Kontakt mit FreeBSD zu kommen. Leider gab es zum Zeitpunkt des Zusammenbaus noch kein FreeBSD-Image für das Rock64 Board, sodass ich mich stattdessen für die schlanke Linuxdistribution DietPi entschieden habe, die auf Debian aufbaut. Die Distribution ist speziell auf Single Board Computer getrimmt, sehr schlank und unterstützt das Rock64 Board offiziell.
Meine Entscheidung habe ich nicht bereut: Standardmäßig ist nur das nötigste Installiert. Probleme mit Treibern oder ähnlichem konnte ich bisher nicht finden.
Meine Backups mache ich übrigens mit dem Backup-Tool “Restic”. Als Zugang zum Backup-NAS genügt mir daher ein ganz normaler SSH-Zugang. Der Zugriff auf den Speicher erfolgt dann via SFTP.
Leistung
SSD
Lesen von SSD via USB 3.0:
hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 588 MB in 2.00 seconds = 293.31 MB/sec
Timing O_DIRECT disk reads: 992 MB in 3.00 seconds = 330.25 MB/sec
Schreiben auf die SSD via USB 3.0:
dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.80873 s, 282 MB/s
Die Datenraten fallen in Verbindung mit dem Rock64 SBC geringer aus als bei direkter Nutzung am Laptop:
Möglicherweise ist der USB-Controller des Rock64 nicht so leistungsfähig wie der meines Laptops und kann deshalb keine höhere Bandbreite erreichen. Bei der Nutzung des NAS fällt die geringere Leistung allerdings nicht ins Gewicht, da hier die Ethernet-Schnittstelle mit einer theoretischen maximalen Datenrate von 120 MB/s der limitierende Faktor ist.
Ethernet
Die Gigabit-Schnittstelle erreicht die praktisch zu erwartende Maximalleistung von ~940 MBit/s. Gemessen habe ich mittels iperf
:
iperf -c 192.168.178.100 -r
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 192.168.178.100, TCP port 5001
TCP window size: 196 KByte (default)
------------------------------------------------------------
[ 5] local 192.168.178.28 port 46066 connected with 192.168.178.100 port 5001
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.0 sec 1.09 GBytes 938 Mbits/sec
[ 4] local 192.168.178.28 port 5001 connected with 192.168.178.100 port 42658
[ 4] 0.0-10.0 sec 1.08 GBytes 923 Mbits/sec
Im Upload werden also ~ 938 MBit/s erreicht, im Download sind es ~ 923 MBit/s.
SD-Karte
Lesen:
hdparm -tT --direct /dev/mmcblk1
/dev/mmcblk1:
Timing O_DIRECT cached reads: 46 MB in 2.08 seconds = 22.17 MB/sec
Timing O_DIRECT disk reads: 68 MB in 3.04 seconds = 22.35 MB/sec
Schreiben:
dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 61.1467 s, 17.6 MB/s
Nicht nur die SSD, sondern auch die SD-Karte erreicht an Rock64 eine geringere Leistung, als an meinem Laptop. So konnte ich die SD-Karte am Laptop mit 44 MB/s lesen. Das ist schade, aber nicht weiter tragisch. Denn die Zugriffe auf die SD-Karte halten sich während des Betriebs ohnehin in Grenzen und spielen bei Backupvorgängen keine Rolle. Mit dem System lässt sich trotzdem relativ flüssig arbeiten (Softwareinstallation, Konfiguration, …).
SFTP
Die Übertragung einer großen Datei von meinem Laptop auf die NAS-SSD via SFTP lief mit ~ 67 MB/s. Nicht besonders schnell, wenn man die vorherigen Einzelmessungen von Ethernet-Schnittstelle und SSD berücksichtigt. Ein Grund für die eher mäßige Leistung könnte Overhead durch das SFTP-Protokoll und/oder die Verschlüsselung der Datenübertragung sein.
Einiger Quellen im Netz zufolge scheint SFTP tatsächlich nicht besonders gut für schnelle Dateiübertragungen zu sein. Zum einen wegen der Verschlüsselung/Entschlüsselung, zum anderen wegen seines Designs:
- Cerberus FTP - Why is SSH2 SFTP so much slower than FTP and FTPS?
- Daniel Stenberg: Making SFTP transfers fast
Ich habe verschiedene Cipher für die Datenübertragung ausprobiert - keiner davon brachte eine Verbesserung im Vergleich zum Standardcipher AES256-GCM
.
Samba
Schreiben einer Datei auf ein Samba Share: ~ 56 MB/s
Lesen eines Samba Shares: ~ 64 MB/s
Warum die Leistung auch im Samba-Betrieb vergleichsweise gering ist, konnte ich bisher nicht herausfinden. Der YouTube-User ExplainingComputers konnte (unter Windows) beispielsweise mit etwa 93 MB/s mittels Samba Share auf eine SSD schreiben.
Möglicherweise kann eine höhere Leistung durch Optimierung der Konfiguration erreicht werden.
NFS v4
Die Datenübertragung mittels NFS (Version 4) war mit Abstand die schnellste: Die Gigabit-Anbindung konnte hiermit voll ausgenutzt werden. Datenraten von ~ 118 MB/s wurden so erreicht.
Zu beachten ist allerdings, dass die Datenübertragung hier (wie auch beim Samba-Share) standardmäßig unverschlüsselt abläuft. Wer die Verschlüsselung über die Kerberos-Erweiterung aktiviert, muss auch hier mit drastischen Performanceeinbußen rechnen NFS mit Kerberos: Vergleichstest
Fazit
Ich bin mit meinem neuen NAS insgesamt zufrieden. Die Einzelleistungen der Komponenten sind für meine Zwecke für sich genommen völlig ausreichend. Schade zwar, dass SD-Karte und SSD nicht so schnell arbeiten, wie sie es an einem ausgewachsenen x86-Laptop tun, aber darüber kann ich hinwegsehen. Im Betrieb fällt das kaum ins Gewicht.
Etwas ärgerlich ist, dass ich mit dem eigentlich fokussierten SFTP nicht so schnell auf den Speicher zugreifen kann, wie ich mir das ausgemalt hatte. 67 MB/s sind zwar schon ganz gut, aber dennoch würde ich ich die Ethernet-Verbindung gerne ganz ausreizen. Das gelingt mir aktuell nur mit einer ungesicherten NFS-Verbindung. Weil ich meine Daten nur ungern unverschlüsselt (auch über eigene) Netze übertrage, werde ich mich erst einmal mit der eingeschränkten Leistung abfinden.
In nächster Zeit werde ich nach Möglichkeiten suchen, die Leistung bei SFTP-Übertragungen zu erhöhen. Vielleicht finde ich auch eine andere Art der schnellen und sicheren Datenübertragung - oder ich entscheide mich doch für ungesichertes NFS in Kombination mit einer Ende-zu-Ende Absicherung meiner Daten. Sollte ich zu einem Ergebnis kommen, das mit gefällt, wird das in diesem Beitrag natürlich ergänzt.
Ansonsten peile ich noch an, die Daten auf dem NAS auf mein älteres, größeres NAS zu replizieren. Idealerweise natürlich Nachts, wenn ich die Internetverbindung selbst nicht nutze. So hätte ich zum einen einen schnellen lokalen (Zwischen?) Speicher, und müsste zum anderen nicht auf Geo-Replizierung verzichten.