Eine SD-Karte hat nur eine begrenzte Lebensdauer von etwa 100.000 Schreibzyklen. Danach können einzelne Speicherbereiche korrupt werden, Datenverluste oder Abstürze sind die Folge. Bei einer Raspberry-Anwendung, welche mit Datenbanken und Massendaten arbeitet (z.B. HomeAutomation-Messwerte speichern) ist das Versagen der SD-Karte vorprogrammiert.
Als Ausweg bietet sich die Verwendung einer USB-Festplatte an. Es gibt zwei Möglichkeiten der Umstellung:
- Betriebssystem und Anwendungen auf SD-Karte, Daten auf USB-Disk
- Betriebssystem, Anwendungen und Daten auf USB-Disk
Ich habe mich für die zweite Möglichkeit entschieden. Die Umstellung auf USB-Festplatte ist jederzeit möglich, also bei einem neu aufgesetzten Pi oder wenn er mit Applikationen und Daten schon längere Zeit läuft. Die SD-Karte benötigt man in jedem Fall immer noch, da sich dort der Bootbereich befindet, welchen man nicht auf die Harddisk verschieben kann. Sie wird jedoch nur während des Bootens verwendet. Dazu reicht eine langsame 2GB-SD-Karte aus.
Material und Vorbereitung des Raspberry Pi
Folgendes Material wird für dieses Projekt benötigt:
- Raspberry Pi Model B 34,19€
- Transcend SD-Karte Class 10 10,95€
- Aktiver USB2.0-Hub mit 2A-Netzteil 13,08€
- Kühlkörper für Raspberry Pi 1,75€
- Externe USB2.0-Festplatte 500 GB 45,80€
Das Material (insgesamt etwa 106€) ist nach folgenden Anleitungen zu konfigurieren, bevor mit dieser Anleitung weitergemacht werden kann:
- Benötigte Hardware
- Kühlkörper für den Raspberry Pi
- Image auf SD-Karte schreiben
- Erste Inbetriebnahme und Konfiguration
Auswahl der USB-Festplatte
Für den Raspberry Pi reicht eine kleinere 2,5"-Harddisk mit USB2.0-Interface aus, also etwa 320 GByte bis 500 GByte. Fertig eingebaut im externen Festplattengehäuse gibt es sie bereits für 50 €. Wer noch eine einzelne Platte in der Schublade hat, kann im Zubehörhandel einen SATA/USB-Adapter für etwa 14 € kaufen.
Diese USB3.0-Festplatte (2.5") hat etwa 50€ gekostet. USB2.0-Modelle zu finden, wird schwer. Da die Schnittstelle abwärtskompatibel ist, lässt sich die Harddisk am Raspberry Pi betreiben. | |
So sieht der fertig konfigurierte Raspberry mit USB-Festplatte aus. Die Platte ist am aktiven Hub anzuschliessen, die Stromversorgung des Raspberry reicht nicht aus! |
Installation
Die folgende Anleitung wurde an Hand meiner eigenen Installation erstellt und sofort mitdokumentiert. Das Nachvollziehen der Befehle sollte Euch deshalb sofort gelingen.
Alle Arbeiten sind als Benutzer Pi durchzuführen. Die USB-Festplatte ist noch nicht am Raspberry angesteckt!
Zuerst überprüft man, ob die Namen der Gerätedateien der SD-Karte dem Standard entsprechen.
ls -l /dev | grep mm*
liefert die Namen für
Gerätedatei gesamte SD-Karte: mmcblk0
Gerätedatei SD-Karte - Partition 1 (Boot): mmcblk0p1
Gerätedatei SD-Karte - Partition 1 (Root): mmcblk0p2
Der Raspberry Pi wird jetzt heruntergefahren:
sudo shutdown - h 0
Anschließend den Strom ausschalten, die USB-Platte am aktiven HSB-Hub anstecken (nicht am Pi, der Strom reicht nicht aus!) und wieder einschalten. Nach dem Booten anmelden als Benutzer Pi
ls -l /dev | grep s*
liefert die Namen für
Gerätedatei gesamte USB-Platte: sda
Gerätedatei USB-Platte - Partition 1: sda1
Die angezeigte Partition auf der Harddisk stammt vom Hersteller, meist ist es eine Windows-kompatible FAT32-Partition. Jetzt ist der letzte Zeitpunkt, sich zu überlegen, ob nicht doch noch wertvolle Daten auf der Harddisk sind. Der nächste Befehl zerstört alle Daten unwiderruflich. Bei "fdisk" ist die Gerätedatei der gesamten Platte (/dev/sda) anzugeben, nicht die der Partition (/dev/sda1):
sudo fdisk /dev/sda
Jetzt befindet man sich im Kommandomodus von "fdisk". Überblick über die vorhandenen Partitionen bekommt man über:
p
Die vorhandene Partition 1 wird gelöscht:
d<Enter>1<Enter>
und noch einmal nachsehen, ob der Befehl erfolgreich war:
p
Um eine neue Partition für das Root-Filesystem zu erzeugen, gibt man Folgendes ein, um eine 32 Gbyte-Partiton zu erhalten:
n<Enter>p<Enter>1<Enter>2048<Enter>+32G<Enter>
Passt die Werte der Partitionen bitte auf Eure Erfordernisse an!
Jetzt legt man noch eine eigene Partition für den Swap (Auslagerungsdatei) an:
n<Enter>p<Enter>2<Enter>Default<Enter>+32G<Enter>
Jetzt ist die Partitionierung mit Verify zu überprüfen:
v
Anschließend Partititionstabelle auf Festplatte schreiben und beenden:
w
Wenn man sich bei den Partitionsgrößen vertan hat, dann mit <Ctrl>C "fdisk" verlassen, ohne das "w"-Kommando einzugeben!
Auf die erste Partition (Root) legt man ein Ext4-Dateisystem an:
sudo mkfs.ext4 /dev/sda1
und noch einen Swapbereich in Partition 2:
sudo mkswap /dev/sda2
Nun muß Partition 2 (Root) von der SD-Karte auf Partition 1 (Root) der Festplatte kopiert werden:
sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync
das dauert etwa eine halbe Stunde bei 32GB...
Nach dem Kopieren ist das Dateisystem auf der Festplatte zu überprüfen und ggf. zu reparieren:
sudo e2fsck -f /dev/sda1 file system check root
Nach der Überprüfung wird das Dateisystem der Kopie an die Größe der Partition 1 der Platte angepasst:
sudo resize2fs /dev/sda1
Die Boot-Konfigurationsdatei (auf der SD-Karte) muss jetzt auf die Festplatte angepasst werden. Zuerst wird eine Sicherungskopie angelegt:
sudo cp /boot/cmdline.txt /boot/cmdline.org
und dann wird die Datei angepasst:
sudo nano /boot/cmdline.txt
Es ist der Eintrag /dev/mmcblk0p2 nach /dev/sda1 zu ändern. Dann speichern und beenden.
Das Betriebssystem liest beim Boot eine Konfigurationsdatei für die Filesysteme ein, welche jetzt angepasst wird:
sudo nano /etc/fstab :
Der Eintrag /dev/mmcblk0p2 ist nach /dev/sda1 zu ändern.Dann folgende Zeile hinzufügen:
/dev/sda2 none swap sw 0 0
Die Datei wird gespeichert und der Editor beendet.
Damit hat man aber nur die "fstab" auf der SD-Karte geändert. In der Partition der Festplatte /dev/sda1 befindet sich aber eine Kopie (siehe "dd"-Befehl)davon, bei welcher die Änderungen ebenfalls gemacht werden müssen. Dazu montiert man "/dev/sda1" temporär, kopiert die Datei und löst den Mount wieder auf:
sudo mount /dev/sda1 /mnt
sudo cp /etc/fstab /mnt/etc
sudo umount /dev/sda1
Raspbian verwendet normalerweise eine Swap-Datei im Root-Filesystem (keine Partition wie jetzt auf der Festplatte erzeugt). Diese Swap-Datei beseitigt man mit:
sudo update-rc.d dphys-swapfile remove
Jetzt ist die Festplatte mit den Änderungen zu synchronisieren:
sync
und dann neu zu booten:
sudo reboot
Überprüfung der Umstellung
Nachdem der Boot durchgeführt wurde, möchte man auch wissen, ob Raspbian von der Festplatte oder immer noch von der SD-Karte gebootet wurde. Das kann man mit
dmesg
feststellen. Hier werden die Kernel-Messages geloggt. Man sucht die Einträge, welche mit der Festplatte zu tun haben:
Außerdem kann man den Mount überprüfen:
mount -l
Damit ist die Umstellung fertig. Puristen könnten jetzt noch die Partition 2 der SD-Karte entfernen, weil sie nicht mehr verwendet wird. Ich habe darauf verzichtet, weil es auch nicht mehr nutzbaren Speicherplatz bringt.
Links
https://www.debian.org/doc/manuals/debian-reference/ch09.de.html