Da eine SD-Karte nur eine begrenzte Lebensdauer (ca. 100.000 Schreibzyklen) hat, kann es sinnvoll sein anstelle der SD-Karte eine externe USB-Festplatte einzusetzen. Damit beugen wir dem Ausfall des Systems durch Versagen der Speicherkarte vor.
Auf die SD-Karte können wir dennoch nicht vollständig verzichten, da diese beim Booten benötigt wird. Nach dem Bootvorgang läuft das gesamte System dann aber auf der Festplatte.
Hinweis
Ab dem Raspberry Pi 3 ist es durch das Setzen spezieller Parameter möglich direkt von USB zu booten.
Der hier beschriebene Weg über eine Boot-Partition auf der SD-Karte funktioniert jedoch weiterhin problemlos.
Inhalt
- Vorbereitungen
- Dateisystem anlegen
- Dateien auf die Festplatte kopieren
- Boot-Einstellungen anpassen
- Neustart
- Swap anpassen
- Automount der Partition 2 der SD-Karte deaktivieren
Vorbereitungen
Abhängig von der USB-Festplatte und dem Raspberry Pi benötigen wir gegebenenfalls eine USB-Festplatte mit einer externen Stromversorgung oder einen zusätzlichen aktiven USB-Hub. Dies ist notwendig, da der Strom, den ältere Raspberry Pis über die USB-Ports liefern, für einige Festplattentypen nicht ausreicht. Im Zweifelsfall einfach ausprobieren, ob die Festplatte beim Anstecken an den Pi richtig anläuft (hörbar) und vom System erkannt wird.
Auf der Festplatte sollten sich keine Daten befinden (zumindest keine die man aufheben möchte), da diese bei den folgenden Schritten gelöscht werden.
Die USB-Festplatte wird an den Raspberry Pi angeschlossen und sollte als /dev/sda1
erkannt werden, was wir wie folgt prüfen können:
1 | ls -l /dev/sd* |
Dabei ist /dev/sda
die gesamte Festplatte und /dev/sda1
die erste Partition auf der Festplatte.
Tipp
Zur Sicherheit sollten bei dem gesamten Prozess keine weiteren Speichermedian an den Raspberry Pi angeschlossen sein.
Dateisystem anlegen
Warnung
Dieser Schritt löscht alle Daten auf der Festplatte unwiderruflich!
Als erstes müssen alle Partitionen von der Festplatte entmountet werden:
1 | umount /dev/sda? |
Anschließend legen wir das Dateisystem wie folgt mit fdisk
auf der Festplatte neu an:
1 | sudo fdisk /dev/sda |
Mit p
können wir uns die aktuellen Partitionen anzeigen lassen:
1 | Command (m for help): p |
Um die vorhandene Partition zu löschen drücken wir d
und prüfen anschließend den Vorgang mit p
:
1 | Command (m for help): d |
Anschließend erstellen wir zwei neue Partitionen (für Root und Swap) mit der gewünschten Größe (hier 32 Gb und 4 Gb) mit n
und prüfen daraufhin wieder mit p
. Die neue Root-Partition muss dabei mindestens so groß sein, wie die alte auf der SD-Karte.
1 | Command (m for help): n |
Bis hier wurden noch keine Veränderungen an der Festplatte vorgenommen und wir könnten mit STRG+C noch Abbrechen. Um die Änderungen auf die Platte zu schreiben verwenden wir nun w
:
1 | Command (m for help): w |
Sobald dies abgeschlossen ist beendet sich fdisk
und wir sind wieder normal im Terminal.
Nun fehlt noch das Anlegen der Dateisysteme. Diese erstellen wir wie folgt:
1 | sudo mkfs.ext4 /dev/sda1 |
1 | sudo mkswap /dev/sda2 |
Dateien auf die Festplatte kopieren
Die Daten der Root-Partition auf der SD-Karte (/dev/mmcblk0p2
) müssen nun auf die neue Root-Partition auf der Festplatte (/dev/sda1
) kopiert werden.
Hierfür verwenden wir dd
. Der Kopiervorgang kann einige Zeit dauern und dd
gibt keine Fortschrittsanzeige aus. Da heißt es also nur Kaffee trinken und abwarten.
1 | sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync |
Ist der Kopiervorgang abgeschlossen überprüfen wir das Dateisystem noch auf mögliche Fehler und lassen diese gegebenenfalls reparieren:
1 | sudo e2fsck -f /dev/sda1 |
Anschließend passen wir noch die Größe des kopierten Dateisystems auf die tatsächliche Größe der Partition an:
1 | sudo resize2fs /dev/sda1 |
Boot-Einstellungen anpassen
Bis hier wird die Festplatte noch nicht weiter vom System beachtet. Damit beim Booten die Root-Partition der Festplatte anstelle der SD-Karte verwendet wird, müssen wir die Boot-Konfigurationsdatei auf der Boot-Partition der SD-Karte anpassen, wobei wir aber zuerst eine Sicherheitskopie anlegen.
1 | sudo cp /boot/firmware/cmdline.txt /boot/firmware/cmdline.org |
Hinweis
Bei älteren Installationen befindet sich die Datei direkt unter /boot/cmdline.txt
.
In der Datei muss dann der Eintrag root=PARTUUID=157b1ec8-02
angepasst werden. Die aktuelle PARTUUID kennzeichnet dabei die zweite Partition auf der SD-Karte.
Um die neue PARTUUID für die Festplatte herauszufinden verwenden wir blkid
:
1 | blkid |
Die neue PARTUUID lautet somit d45af006-01
. Diese tragen wir nun in der Datei /boot/firmware/cmdline.txt
als root=PARTUUID=d45af006-01
ein und ersetzen damit den alten Eintrag.
1 | sudo nano /boot/firmware/cmdline.txt |
1 | console=serial0,115200 console=tty1 root=PARTUUID=d45af006-01 rootfstype=ext4 fsck.repair=yes rootwait |
Anschließend passen wir noch die Konfiguration des Dateisystems auf die neue Root-Partition an und fügen die neue Swap-Partition hinzu. Dies müssen wir aber auf der neuen Root-Partition auf der Festplatte machen, weshalb wir diese zuerst temporär mounten und abschließend wieder unmounten.
1 | sudo mount /dev/sda1 /mnt |
1 | proc /proc proc defaults 0 0 |
1 | sudo umount /mnt |
Zum Abschluss sollte das Dateisystem synchronisiert werden, um sicherzustellen, dass alle Änderungen auf die Festplatte geschrieben wurden:
1 | sync |
Dies kann einen Moment dauern, wenn noch Daten aus dem Puffer auf die Festplatte geschrieben werden müssen.
Neustart
Es ist an der Zeit für einen Neustart des Systems:
1 | sudo reboot |
Nach dem Neustart sollte der Raspberry Pi das System von der Festplatte laden. Dies können wir mit Hilfe von dmesg
und mount
überprüfen:
1 | dmesg | grep "root=\|root device\|sda1\|sda2" |
Wie wir sehen, wird sda1 als Root und sda2 als Swap verwendet.
Swap anpassen
Raspberry Pi OS verwendet standardmäßig keine Swap-Partition, sondern eine Swap-Datei auf der Root-Partition.
Da wir nun aber eine eigene Swap-Partition haben, können wir die Datei deaktivieren und das System noch einmal neu starten:
1 | swapon -s |
1 | sudo systemctl disable dphys-swapfile.service |
1 | sudo reboot |
Nach dem Neustart überprüfen wir, dass die Partition als Swap verwendet wird und löschen anschließend die Datei:
1 | swapon -s |
1 | sudo rm -f /var/swap |
Automount der Partition 2 der SD-Karte deaktivieren
Ab Raspbian Jessie wird die nun nicht mehr benötigte zweite Partition der SD-Karte automatisch immer wieder unter /media/pi/xxx
gemountet. Da wir diese nicht mehr benötigen können wir einen entsprechenden Eintrag in der Datei /etc/fstab
hinzufügen und wieder den Pi neu starten.
1 | df |
1 | sudo nano /etc/fstab |
1 | proc /proc proc defaults 0 0 |
Nach dem Neustart wird die Partition nicht mehr automatisch gemountet.
1 | df |
Alternativ wäre es auch möglich die Partition /dev/mmcblk0p2
einfach von der SD-Karte zu löschen, da diese durch unsere Änderungen nicht mehr benötigt wird.
Es ist somit auch möglich eine deutlich kleinere SD-Karte zu verwenden, auf der sich dann lediglich die recht kleine Boot-Partition befindet.
Wichtig
Beim Tausch der SD-Karte muss in der Datei /etc/fstab
auf der Root-Partition der Festplatte die neue PARTUUID der Boot-Partition auf der SD-Karte angepasst werden.