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. Nach 2-3 Monaten funktioniert nichts mehr, das habe ich selbst erfahren.

Als Ausweg bietet sich die Verwendung einer USB-Festplatte an. Es gibt zwei Möglichkeiten der Umstellung:

  1. Betriebssystem und Anwendungen auf SD-Karte, Daten auf USB-Disk
  2. 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 4GB-SD-Karte aus.

Auswahl der USB-Festplatte

Für den Raspberry Pi reicht eine kleinere 2,5"-Harddisk mit USB2.0-Interface aus, also etwa 320 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.

Installation

Für die nächsten Schritte wird der Raspberry Pi mit folgenden Kabeln angeschlossen:

Raspbeery Konfiguration  

 

Achtung Die Festplatte darf noch nicht angeschlossen werden! Maus und Tastatur sind an der oberen Reihe der USB-Buchsen anzuschließen.

Die folgende Anleitung wurde an Hand meiner eigenen Installation erstellt und sofort mit dokumentiert. Das Nachvollziehen der Befehle sollte Euch deshalb sofort gelingen. Alle Arbeiten sind als Benutzer "pi" direkt an der Konsole durchzuführen, SSH steht noch nicht zur Verfügung.

Einstellen eines höheren USB-Stromes

Für Raspberry Pi Model B+ und Raspberry Pi 2 Model B besteht die Möglichkeit, eine externe Festplatte direkt an den USB-Ports zu betreiben. Über SSH als Benutzer "pi" anmelden und einen Parameter in der config.txt hinzufügen:

sudo nano /boot/config.txt

den Parameter

max_usb_current=1

am Dateiende hinzufügen und abzuspeichern. Bei älteren Wheezy-Versionen kann der Parameter statt dessen

safe_mode_gpio=4

heißen. Dies ist abhängig von der Betriebssystemversion. Anschließend speichern und neu booten:

sudo reboot

Hier steht ein Image zur Verfügung!

Festplatte konfigurieren

Zuerst überprüft man, ob die Namen der Gerätedateien der SD-Karte dem Standard entsprechen.

ls -l /dev | grep 'mmc'*

Gerätedateien SD-Card

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 an der unteren USB-Buchsenreihe mit dem Y-Kabel der Platte anschließen:

Raspberry Pi 2 mit Harddisk

Nach dem Booten anmelden als Benutzer Pi

ls -l /dev | grep 'sda'*

liefert die Namen für die Gerätedatei der gesamten USB-Platte: sda Gerätedatei USB-Platte - Partition 1: sda1

Achtung! Werden hier keine Gerätedateien für die USB-Platte angezeigt, dann hat das System zu wenig Strom. Herunterfahren und über ein stärkeres Netzteil versorgen. Nach dem Boot sind die Gerätedateien zu sehen.

 

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

Gerätedateien Harddisk

Die vorhandene Partition 1 wird gelöscht:

d1

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 300 Gbyte-Partiton zu erhalten:

n > p > 1 > 2048 > +300G

Passt die Werte der Partitionen bitte auf Eure Erfordernisse an!

Jetzt legt man noch eine eigene Partition mit 200GB für die Datensicherung an:

n > p > 2 >Default > Default

Partitionen Harddisk

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 C "fdisk" verlassen, ohne das "w"-Kommando einzugeben!

Auf die erste Partition (Root) legt man ein Ext4-Dateisystem an:

sudo mkfs.ext4 /dev/sda1

Filesystem anlegen

und noch ein Dateisystem in Partition 2:

sudo mkfs.ext4 /dev/sda2

Swap anlegen

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

Nach dem Kopieren ist das Dateisystem auf der Festplatte zu überprüfen und ggf. zu reparieren:

sudo e2fsck -f /dev/sda1
sudo e2fsck -f /dev/sda2

Nach der Überprüfung wird das Dateisystem der Kopie an die Größe der Partition 1 der Platte angepasst:

sudo resize2fs /dev/sda1

Jetzt wird die USB-Festplatte in das Filesystem temporär montiert:

sudo mount /dev/sda1 /mnt

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 (auf der Harddisk) angepasst wird:

sudo nano /mnt/etc/fstab

Der Eintrag

/dev/mmcblk0p2

ist nach

/dev/sda1

zu ändern. Die Datei wird gespeichert und der Editor beendet. Jetzt muß noch die fstab angepasst werden, damit beim nächsten Boot die Festplatte für Root verwendet wird:

more /mnt/etc/fstab

/etc/fstab

sudo nano /mnt/etc/fstab

proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/sda1 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off]  for that

Damit hat man die "fstab" auf der USB-Platte geändert. Diese wird beim nächsten Boot verwendet.

sudo umount /dev/sda1

Jetzt ist die Festplatte mit den Änderungen zu synchronisieren:

sync

und dann neu zu booten:

sudo reboot
more /etc/fstab
sudo mkdir /backup
sudo nano /etc/fstab
um diesen Eintrag in der letzten Zeile ergänzen:

/dev/sda2 /backup ext4 defaults 0 3

So sieht die geänderte Datei aus:


proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/sda1 / ext4 defaults,noatime 0 1
/dev/sda2 /backup ext4 defaults 0 3

 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:

dmesg Ausgabe

dmesg Ausgabe

dmesg Ausgabe

 

Außerdem kann man den Mount überprüfen:
mount -l

mount Befehl

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.

SWAP-Konfiguration

Entgegen früherer Anleitung verwende ich inzwischen keine eigene SWAP-Partition mehr. Das hat mehrere Gründe:

  • Raspbians Swap wurde auf sehr niedrige Priorität eingestellt. Es kommt praktisch kein SWAP mehr vor.
  • Raspbian verwendet einen Filesystem-SWAP, der ebenfalls auf die USB-Festplatte verlagert wird. Damit ergibt sich keine SD-Card-"Abnutzung" mehr

Der SWAP wird also so belassen, wie in Raspbian implementiert.

 

Raspbian auf den neuesten Stand bringen

Paketlisten aktualisieren:

sudo apt-get update

Pakete auf den neuesten Stand bringen:

sudo apt-get upgrade

Kernel und Firmware updaten:

sudo rpi-update

sudo reboot

Jetzt sind wir gerüstet, FTP und OpenHAB zu installieren.

Links

https://www.debian.org/doc/manuals/debian-reference/ch09.de.html