Verschlüsseltes NAS mit Raspberry Pi (2)

Gentoo-Blog Ersatz

Moderator: el_hakim

Antworten
Benutzeravatar
el_hakim
Beiträge: 1114
Registriert: 09.08.2007, 13:53
Kontaktdaten:

Verschlüsseltes NAS mit Raspberry Pi (2)

Beitrag von el_hakim » 28.03.2015, 21:17

Möchte man sich selbst ein NAS aufbauen liegt der Griff zum allseits beliebten Raspberry Pi eventuell nah. Ob das praktisch und sinnvoll ist - insbesondere wenn man seine Daten zusätzlich verschlüsselt ablegen möchte - habe ich mir mal etwas näher angeschaut.

1. Hardware

Benötigt wird logischerweise ein Raspberry Pi (2) sowie die gewünschte Anzahl Festplatten. Dies können z.B. 2,5" Platten im USB-Gehäuse sein oder 3,5" Platten mit USB-Adapter. Für die Stromversorgung der Platten kann eventuell ein USB-Hub mit Netzteil verwendet werden. Bringen die USB-Adapter für 3,5" Platten jeweils ein eigenes Netzteil mit, so kann mit einem Raspberry 2, der genug USB-Buchsen hat, sogar auf einen zusätzlichen Hub verzichtet werden.

Bild

2. Vorbereitung des Systems

Ausgangspunkt soll diesmal kein Gentoo sondern ein frisch installiertes Raspbian sein. Insbesondere auf den Raspberry 1(b) wird sonst schon das Installieren der benötigten Tools zur Geduldsprobe, :).

Kommen wir also zur Vorbereitung des Systems. Da bei einem NAS sehr wahrscheinlich auch Datensicherheit im Vordergrund steht, soll zusätzlich zur Konfiguration mit einer Festplatte der Verbund von 2 und 3 Disks jeweils als Raid1- und Raid5-Verbund untersucht werden. Benötigt wird also mdadm. Als Dateisystem kommt Btrfs zum Einsatz. Bei einem kurzen Test im direkten Vergleich zwischen ext4, reiserfs und xfs lieferte dies die beste Performance (möglich, dass sich durch den ein oder andern Parameter hier noch Verbesserungen erzielen lassen). Verschlüsselt werden soll mit cryptsetup. Und für ein kleinen Skript zur Performance-Messung wird noch der Kommandozeilen-Taschenrechner bc benötigt:

Code: Alles auswählen

pi@raspberrypi ~ $ sudo su
root@raspberrypi:/home/pi# apt-get install mdadm cryptsetup btrfs-tools bc
Des weiteren scheint es so, dass das Kernelmodul für die beschleunigte AES-Verschlüsselung mittels ARM-Register-Extensions nicht automatisch geladen wird. Insbesondere beim Raspberry 2 mit seinem NEON-Instruction-Set bringt dies einen signifikanten Geschwindigkeitsvorteil. Daher:

Code: Alles auswählen

root@raspberrypi:/home/pi# echo aes_arm_bs >> /etc/modules
root@raspberrypi:/home/pi# modprobe aes_arm_bs
3.1 Einrichten der Festplatten

Soll ein Raid-Verbund eingerichtet werden, ist dies der erste Schritt. War auf den Platten bereits ein Software-Raid installiert (z.B. auch wenn man mehrere Konfigurationen ausprobiert hat), sollte zuert der Superblock gelöscht werden. Danach kann z.B. ein Raid1 aufgesetzt werden:

Code: Alles auswählen

root@raspberrypi:/home/pi# mdadm --zero-superblock /dev/sda /dev/sdb
root@raspberrypi:/home/pi# mdadm --create /dev/md0 --force --level=1 --raid-devices=2 /dev/sda /dev/sdb
Oder ein Raid5 mit 3 Festplatten:

Code: Alles auswählen

root@raspberrypi:/home/pi# mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc
root@raspberrypi:/home/pi# mdadm --create /dev/md0 --force --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc
Soll fürs erste nur getestet werden und das Raid nicht produktiv eingesetzt, kann zusätzlich der Parameter "--assume-clean" hinzugefügt werden. Dies verhindert das initiale Synchronisieren der Festplatten, was je nach Größe und Anzahl der Platten durchaus viele Stunden wenn nicht sogar Tage in Anspruch nehmen kann (trotzdem kann aber mit dem Raid schon gearbeitet werden).

Das Raid ist nun als Blockdevice /dev/md0 verfügbar. Der Status kann über /proc/mdstat abgefragt werden. Wenn gewünscht kann jetzt z.B. mit fdisk noch partitioniert werden.

3.2 Verschlüsselung

Optional kann nun eine zusätzliche Verschlüsselung der Festplatte oder des Raid-Verbundes erfolgen. Getestet wurde hier mit AES mit einer Schlüssellänge von 128 und 256 Bit. Für die 256 Bit Variante erfolgt die Verschlüsselung und das anschließende Öffnen des Cryptodevices folgendermaßen:

Code: Alles auswählen

root@raspberrypi:/home/pi# cryptsetup --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/md0
root@raspberrypi:/home/pi# cryptsetup luksOpen /dev/md0 nas
Das entschlüsselte Cryptodevice ist als /dev/mapper/nas erreichbar.

3.3 Dateisystem

Als nächstes muss noch ein Dateisystem angelegt werden, z.B. Btrfs:

Code: Alles auswählen

root@raspberrypi:/home/pi# mkfs.btrfs /dev/mapper/nas
root@raspberrypi:/home/pi# mkdir /mnt/nas
root@raspberrypi:/home/pi# mount /dev/mapper/nas /mnt/nas
Das Dateisystem ist nun unter /mnt/nas gemountet und kann verwendet werden.

4.1 Messung der Schreib- und Leseperformance

Um nun die Performance der (verschlüsselten) Platte(n) zu messen, kann man entweder einen entsprechenden Benchmark (z.B. bonnie++) verwenden oder einfach selbst die Zeit messen, die bestimmte Operationen benötigten. Hier kommt ein kleines Skript zum Einsatz, welches mehrfach eine große Datei auf das Dateisystem schreibt, anschließend liest und aus der vergangenen Zeit die Schreib- und Leseleistung in MB/s ausrechnet. Um Effekte durch Dateisystemcaches auszuschließen, wird dieser zwischenzeitlich natürlich geleert sowie die Zeit für den Writeback mitgemessen.

Code: Alles auswählen

#!/bin/bash

LOOPS=6

SIZE=`stat -c "%s" $1`
sync

WSTART=`date "+%s.%N"`
for i in `seq 1 $LOOPS`; do
    cat $1 >> data.bin
done
sync
WEND=`date "+%s.%N"`

echo 3 > /proc/sys/vm/drop_caches

RSTART=`date "+%s.%N"`
dd if=data.bin of=/dev/null bs=1M &> /dev/null
REND=`date "+%s.%N"`

rm data.bin

WSPEED=`echo "scale=2; (($SIZE*$LOOPS)/($WEND-$WSTART))/1048576" | bc`
RSPEED=`echo "scale=2; (($SIZE*$LOOPS)/($REND-$RSTART))/1048576" | bc`

echo "Write speed on " `pwd` ": $WSPEED MB/s"
echo "Read speed on " `pwd` " : $RSPEED MB/s"
Das Skript benötigt als Input eine hinreichend große Datei. Um nun nicht die Leseleistung der SD-Karte zu messen, sollte diese auf einer Ramdisk liegen. Es bietet sich zudem an, Zufallswerte zu verwenden um nicht verfälschte Werte durch Effekte in der Verschlüsselung von gleichartigen Inputwerten zu erhalten (deshalb wurde nicht von /dev/zero gelesen):

Code: Alles auswählen

root@raspberrypi:/home/pi# mkdir /mnt/tmpfs
root@raspberrypi:/home/pi# mount -t tmpfs -o size=201M none /mnt/tmpfs
root@raspberrypi:/home/pi# dd if=/dev/urandom bs=1M count=200 of=/mnt/tmpfs/rnd.bin
root@raspberrypi:/home/pi# cd /mnt/nas
root@raspberrypi:/mnt/nas# /home/pi/rwspeed.sh /mnt/tmpfs/rnd.bin
Write speed on  /mnt/nas : 2.89 MB/s
Read speed on  /mnt/nas  : 5.23 MB/s
4.1 Performance mit dem Raspberry Pi 1b

Für den Raspberry Pi 1b ergibt sich folgendes Bild:

Bild

Ist die Schreib- und Leseleistung für eine unverschlüsselte Platte noch recht akzeptabel, so (über)fordert die Verschlüsselung den alten ARM11-Kern doch sehr.

4.2 Performance mit dem Raspberry Pi 2

Besser sieht es logischerweise beim neueren Modell aus:

Bild

Für eine unverschlüsselte Platte wird hier der über USB 2.0 mögliche Maximaldurchsatz erreicht. Ein Raid-Verbund limitiert entsprechend die Schreibleistung (es steht schließlich nur ein USB-Port zur Verfügung, auch wenn 4 Buchsen vorhanden sind). Eine zusätzliche Verschlüsselung fordert ebenfalls ihren Tribut. Allerdings scheint der Verschlüsselungsalgorithmus gut über die vier Kerne des Cortex-A7 zu skalieren.

4.3 Performance über NFS

Letztendlich ist noch die erzielbare Geschwindigkeit über ein entsprechendes Netzwerkprotokoll interessant. Der Netzwerkcontroller des Raspberry ist schließlich auch über den gleichen USB-Port angebunden wie die Festplatte(n). Getestet wurde hier daher der Durchsatz über NFS jeweils mit den beiden Randszenarien (eine unverschlüsselte Platte vs. Raid5 mit 256 Bit AES):

Bild

Der über den 100 Mbit Ethernet-Anschluss maximal mögliche Datendurchsatz wird auch mit dem Raspberry 2 nicht ganz erreicht. Samba Freigaben zeigen ähnliche Werte.

5 Fazit

Für eine einfache Dateifreigabe mit einer Festplatte und ohne Verschlüsselung tut es zur Not sogar noch ein Raspberry Pi 1. Bei höheren Anforderungen an die Datensicherheit kann man auf den Raspberry Pi 2 zurück greifen und bekommt so relativ einfach ein bis ins letzte Detail selbst konfigurierbares NAS mit für ein 100 Mbit Netz akzeptabler Geschwindigkeit ohne eventuelle Hintertüren, nervige Weboberflächen und notorisch veralteter Firmware mit Sicherheitslücken. Durch Übertakten lässt sich eventuell die Schreib- und Leseleistung noch etwas optimieren.

6 Offene Punkte

Den Gesamtenergieverbrauch eines solchen Aufbaus zu ermitteln wäre noch sehr interessant. Insbesondere mit einer Konfiguration in Hinblick auf ein automatisches Abschalten der Festplatten bei Nichtgebrauch.
Ubuntu: African word meaning "Gentoo is to hard for me"

Antworten