Es ist ja bekannt, dass der Raspberry Pi als Datenspeicher eine SD-Karte verwendet, aber diese hat nur begrenzte Kapazitäten. Deshalb kommt man irgendwann zu dem Punkt, wo man mehr Speicher möchte. SD-Karten liegen bei maximal 128 GB bei knapp 100€. Möchte man mehr Speicherplatz haben, kommt man um eine externe Festplatte oder einen USB Stick nicht herum. Daher schreibe ich hier, wie man einen externen Speicher in Raspbian einbindet und welches Dateisystem wie verwendet wird.
Welches Dateisystem?
Die meisten kleineren USB-Sticks können ohne Probleme eingebunden werden, da diese meist vorab mit FAT/FAT32 formatiert sind. Linux kann das Dateisystem ohne Probleme lesen. Größere USB Sticks von mehr als 4 GB und externe Festplatten sind stattdessen meist mit NTFS formatiert, das Standard-Dateisystem für Windows. Linux kann dies erst lesen, wenn der entsprechende Treiber installiert ist. Als dritte Möglichkeit würde das Linux eigene ext4 Dateisystem zur Verfügung stehen, welches von Linux natürlich ohne Probleme gelesen werden kann, bei Windows Rechnern allerdings nicht auf Gegenliebe stößt.
Mal ein kleiner Vergleich von NTFS und ext4 bei Geschwindigkeit und Kompatibilität unter Raspbian:
NTFS: | ext4: | |
Übertragung großer Dateien | knapp über 3 MB/s | 9-10 MB/s |
Übertragung kleiner Dateien | etwas weniger als 3 MB/s | 6-8 MB/s |
Kompatibilität mit Windows | vollfunktionsfähig | mit zusätzlicher Software die Möglichkeit zum Einbinden, sehr fehleranfällig |
Kompatibilität mit Linux(Raspbian) | mit zusätzlicher Software ohne Probleme verwendbar, Dateiberechtigung nicht vollkompatibel, Jeder kann alles | vollfunktionsfähig |
Also stellt sich die Frage möchte man die Festplatte auch an einem Windows-System verwenden oder soll der Speicher nur noch für den Raspberry zur Verfügung stehen, zum Beispiel als Medienfestplatte oder Backup. Die geringe Schreibgeschwindigkeit im NTFS System unter Linux kommt wegen der sehr hohen Prozessorlast während des Zugriffs. Diese Daten sind im Zusammenspiel mit einer Samba-Freigabe entstanden. Videodateien und Musikdateien wurden dabei auf den Pi hochgeladen.
Erstmal zum leichten: NTFS auf Linux installieren
Das NTFS Dateisystem für Raspbian nachzurüsten ist extrem einfach. Folgende Zeile in die Konsole eingeben und der Treiber ist installiert.
sudo apt-get -y update && sudo apt-get -y install ntfs-3g
Ich empfehle, wenn die Festplatte in NTFS formatiert werden soll, die Windows-eigene Anwendung zu verwenden. Es ist nach der Treiber Installation zwar auch unter Linux möglich, allerdings muss man auf einige Dinge achten, bevor die NTFS HDD anschließend auch von Windows erkannt wird.
Nun die schwierigere Variante: Den Speicher auf ext4 formatieren
Wenn man sich entschieden hat den zusätzlichen Speicher dauerhaft für den Raspberry zu verwenden, lohnt es sich von der Performance her, den Datenspeicher auf ext4 zu formatieren. Vorher sollten alle Daten gesichert werden, diese sind nach der Formatierung nicht mehr abrufbar.
Zunächst sollte der Speicher nicht im System eingebunden aber am Raspberry angeschlossen sein.
Als nächstes schaut man, wo der Speicher liegt. Dazu einfach sudo fdisk -l in die Konsole eingeben.
Es wird die obenstehende Auflistung ausgegeben. Da mein USB Stick 4 GB hat, weiß ich nun, dass dieser auf /dev/sda1 zugewiesen wurde. Man kann auf diesen Pfad nicht zugreifen, der Pfad ist rein zur Interpretation für das System vorhanden.
/dev/mmcblk0p1 (Boot) und /dev/mmcblk0p2 (System) ist die SD-Karte. Jede Partition hat hier ihren eigenen Eintrag.
Nun geht es darum den USB-Stick Linux-konform zu formatieren. Zunächst sollte eine Linux Partition eingerichtet werden. Es funktioniert zwar auch mit der hier im Bild gezeigten HPFS/NTFS/exFat Partition, dies ist aber natürlich nicht so sauber und ich kann nicht sagen, was für Schwierigkeiten später auftreten können.
Man gibt in die Konsole den Befehl sudo cfdisk ein. Nun seht ihr ein Benutzerinterface. Dort wählt ihr mit der Pfeiltaste-Unten sda1 bzw. euer Pendant aus. Mit den Pfeiltasten-Links und -Rechts könnt ihr nun das Menü unten bedienen.
Dort geht ihr zunächst auf Delete und löscht damit die Partition. Anschließend sieht man nur noch den Eintrag für Free Space. Wählt nun New aus. In der nächsten Frage wählt man Primary aus und gibt anschließend die Größe der Partition in MB an. Will man den gesamten Speicherplatz einer Partition zuordnen, lässt man den Standardwert und bestätigt mit Enter. Als letzten Schritt geht man auf Write. Es wird gefragt, ob man sich auch wirklich sicher ist. Dazu muss man yes eingeben und bestätigen. Fertig! Mit Quit schließt man nun den Assistenten. Mit sudo fdisk -l kann das Resultat überprüft werden. Unter System dürfte nun Linux mit der ID 83 stehen.
Nun führen wir sudo mkfs.ext4 -L USB-Stick /dev/sda1 aus. Das Argument -L USB-Stick ist hier optional. Es bewirkt das ein Label namens USB-Stick für das Dateisystem erstellt wird. Jetzt kann der Datenspeicher eingebunden und verwendet werden.
Ein- und ausbinden des Massenspeichermediums
Das Ein- und Ausbinden des Speichers ist recht einfach. Zuerst muss ein entsprechender Ordern erstellt werden. Rein technisch könnt ihr überall ein Mountpoint setzen, man hat sich aber einheitlich auf /mnt/ oder /media/ festgelegt. /mnt/ wird eher unter der Kommandozeile verwendet. /media/ wird hauptsächlich in der GUI verwendet, da die Festplatte automatisch in die Favoritenliste des Dateimanager eingefügt wird. Unter /mnt/ eingebundene Festplatte werden normalerweise nicht automatisch hinzugefügt.
Ich verwende normalerweise /media/, daher wird auch die Anleitung sich darauf beziehen. Also erstellt man per sudo mkdir /media/usb01 einen Ordner. Statt usb01 kann auch jeder andere Name verwendet werden.
Nun kann der USB-Stick mit sudo mount -t auto /dev/sda1 /media/usb01 eingebunden werden. Da als Typ Auto vorgegeben wurde, sucht sich das System selbst das beste Dateisystem raus, also NTFS oder ext4.
Mit dem Befehl df -h kann man nun schauen, ob der Datenspeicher gemounted ist und wie viel Speicherplatz zur Verfügung steht. Das Argument -h sorgt für eine bessere Aufbereitung der Daten.
Möchte man den USB-Stick wieder entfernen, führt man sudo umount /media/usb01 aus.
Automatisches einbinden des Speichermediums bei Systemstart
Man kann Speicher bei Systemstart automatisch einbinden lassen. Dazu muss in der fstab-Datei nur ein Eintrag hinzugefügt werden. Nachdem dieser Eintrag steht, kann später mit sudo mount -a eingebunden werden. -a bedeutet, dass versucht wird alle Einträge in der fstab-Datei zu mounten.
Um in die Datei zu schreiben, muss der Befehl sudo nano /etc/fstab ausgeführt werden. Anschließend muss man eine neue Zeile beginnen und die entsprechenden Daten eingeben. Das sieht dann wie folgt aus:
/dev/sda1 – ist der Gerätepfad
/media/usb01 – ist der Mountpoint
auto – das entsprechende Dateisystem, kann natürlich auch angegeben werden
defaults,noatime – sind entsprechende Optionen, eine komplette Liste gibt es unter http://wiki.ubuntuusers.de/mount#Optionen
0 – die erste Null ist für das Backup Programm dump und sagt aus, dass keine Sicherung erstellt werden soll
0 – die zweite Null gibt an, ob der Speicher bei der Dateisystemprüfung beim Systemstart mit einbezogen werden soll; hier findet keine Überprüfung statt.
Alle Einträge sind mit Tab getrennt. Allgemein werden Leerzeichen zur Trennung verwendet. Sollte ein Mountpoint also ein Leerzeichen besitzen muss 40 stattdessen geschrieben werden, also /media/usb 01 zu /media/usb4001.
Nun speichern wir die Datei mit [STRG]+[O] und schließend den Editor mit [STRG]+[X].
Beim nächsten Systemstart wird der USB-Stick nun automatisch an den vorgegeben Punkt eingebunden.
Einbinden per Gerätekennung
Da man nicht hundertprozentig sicher sein kann, dass die externe Festplatte immer an dem selben Gerätepunkt gesetzt wird, verwendet man meist auch die UUID. Diese findet man heraus, in dem man blkid in die Konsole eingibt. Hinter /dev/sda1 steht nun die UUID (Beispiel: UUID=“fc254b57-8fff-4f96-9609-ea202d871acf“). Diese kopieren wir nun und schreiben diese anstelle von /dev/sda1 in die fstab Datei. Achtet darauf die Anführungszeichen zu entfernen.
Nun wird der Speicher per Gerätekennung eingebunden.
Bei USB-Geräten ist die Verwendung von „defaults“ in der fstab äußerst kritisch, da die Option „async“ zu Datenverlust führen kann. Im Falle von USB-Sticks sollte man lieber alle Optionen auschreiben und sync verwenden: rw,suid,dev,exec,auto,nouser,sync,noatime
Servus Skeleter,
erst mal ein herzliches Dankeschön, für diese schöne und gute Anleitung.
Einen kleinen Verbesserungsvorschlag möchte ich dir gerne unterbreiten:
Bei der Einbindung per UUID hab ich lange gebraucht um zu überreissen, dass man nicht nur die Nummer, sondern auch das Präfix „UUID=“ kopieren muss und statt „/dev/sda1“ in die fstab einfügen muss.
LG
Alex
Pingback: Raspberry Pi: Dateifreigabe im Netzwerk | LierschIT
Pingback: Raspberry Pi: MiniDLNA Server installieren | LierschIT