Sicherung und Wiederherstellung einer Raspberry-Pi-sdCard mit fsarchiver

Ein Linux-Betriebssystem (auf einem Laptop oder PC) sowie die Arbeit in einem Terminal ist Voraussetzung für die hier beschriebene Sicherung einer sdCard, auf der ein Raspberry-Pi-System installiert ist.

Die Sicherung der sdCard-Partitionen erfolgt mit der fsarchiver-Anweisung. Sie dürfte in den Systemrepositories der meisten Linux-Betriebssysteme enthalten sein.
Vorbereitung der sdCard-Sicherung:

  • sdCard mit Kartenlesegerät am Laptop/PC anschließen
  • sdCard mit der Anwendung Laufwerksverwaltung anzeigen lassen.

Man erhält Ausgaben, wie die folgenden beiden Abbildungen zeigen:

Ausgabe der Laufwerksverwaltung

In der Abbildung wird die boot-Partition als /dev/sdb1 angezeigt, die hier nicht eingehängt ist (Anmerkung: die Festplatte des Laptop/PC hätte die Gerätebezeichnung /dev/sda). Das Einhängen der Partition erreicht man durch einen LMT-Klick auf die mit einem Dreieck markierte quadratische Schaltfläche links unterhalb der blau markierten boot-Partition.

In dieser Abbildung wird die root-Partition als Gerät /dev/sdb2 angezeigt. Die root-Partition ist ebenfalls nicht eingehängt (nicht gemountet).

Zur Sicherung der Daten auf der boot- und der root-Partition ist es sinnvoll, ein Verzeichnis auf dem Laptop/PC zu erstellen, z.B. raspi-sdcard-sicherungen, indem dann die Sicherungsdateien abgelegt werden, die fsarchiver erzeugt.

Zur Daten-Sicherung mit fsarchiver wechselt man in dieses Verzeichnis und öffnet darin ein Terminal in dem die folgenden Anweisungen ausgeführt werden:

  • zur Daten-Sicherung der boot-Partition:
    • sudo fsarchiver savefs sdb1_boot_sdcard_raspi_1.10.2022.fsa /dev/sdb1 -v
  • zur Sicherung der Daten der root-Partition:
    • sudo fsarchiver savefs sdb2_root_sdcard_raspi_1.10.2022.fsa /dev/sdb2 -v -j2

Erklärung der Anweisungen:

  • sudo fsarchiver savefs ... /dev/sdb1 -v:
    • sudo: nur ein user, der der Gruppe sudo angehört kann die Anweisung ausführen
    • fsarchiver savefs ... /dev/sdb1: die Anwendung fsarchiver speichert den gesamten Dateisystem-Inhalt (⇒ savefs) der Partition /dev/sdb1 in einer Datei mit der freiwählbaren Bezeichnung sdb1_boot_sdcard_raspi_1.10.2022.fsa (⇒ ...). Die Daten-Sicherungsdatei *.fsa befindet sich in dem Datensicherungsverzeichnis, in das man zuvor gewechselt ist, bzw. in dem fsarchiver ausgeführt wurde. -v (= verbose) bewirkt, dass während des Sicherungsprozesses dessen Ablauf durch entsprechende Ausgaben zu verfolgen ist.
  • sudo fsarchiver savefs ... /dev/sdb2 -v -j2:
    • hier gilt das, was für /dev/sdb1 erklärt wurde entprechend nur für die root-Partition /dev/sdb2. -j2 bezieht 2 Prozessorkerne des Laptops/PC in die Datensicherung ein (falls eine Mehrkerne-Prozessor vorliegt), da bei /dev/sdb2 eine größere Datenmenge (größere Partition) zu verarbeiten ist.
      Die roten Dateibezeichner können frei gewählt werden.

Weiterführende Erläuterungen sind in der folgenden Abbildung zu lesen. Die Ausgabe erhält man bei Eingabe von fsarchiver (ohne weitere Parameter) im Terminal:

Zur Wiederherstellung (Recovering) einer Raspi-sdCard geht man vor, wie oben bei der sdCard-Sicherung beschieben.

Um die Wiederherstellung der sdCard mit fsarchiver vorzunehmen, wechselt man in das Verzeichnis, das die Sicherungsdateien enthält und öffnet dort ein Terminal. Weitere Vorgehensweise (Befehlseingabe im Terminal):

  • die wiederherzustellenden Partitionen mit gparted neu formatieren: sudo gparted /dev/sdb

Es öffnet sich ein Fenster wie das oben abgebildete, in dem jeweils mit einem RMT-Klick die root- und boot-Partition ausgewählt und als fat32 formatiert werden können. Vorhandene Daten werden dadurch überschrieben. Nach abgeschlossener Formatierung der sdCard-Partionen schließt man die Anwendung gparted mit einem LMT-Klick auf das x-Symbol rechts oben. Zum Zurückschreiben der Sicherungsdateien geht es wie folgt beschrieben weiter (wichtig: man hat das Terminal im Verzeichnis geöffnet, in dem die Sicherungsdateien abgelegt sind!):

  • Anweisung zum Zurückschreiben der Daten auf der boot-Partition /dev/sdb1:
    • sudo fsarchiver restfs sdb1_boot_sdcard_raspi_1.10.2022.fsa id=0,dest=/dev/sdb1 -v
  • Anweisung zum Zurückschreiben der Daten auf der root-Partition /dev/sdb2:
    • sudo fsarchiver restfs sdb1_boot_sdcard_raspi_1.10.2022.fsa id=0,dest=/dev/sdb2 -v -j2

Wichtig: Falls das Recovering der Partitonen auf einer anderen sdCard geschieht, als der, von der die Sicherung mit fsarchiver erfolgt war, sollte in 2 Dateien der Partitonen der 'Disk identifier' der neuen sdCard angepasst werden!
Durch die Eingabe der Anweisung 'sudo fdisk -l /dev/sdb' (im Terminal) lässt sich der Disk-identifier der sdCard herausfinden.

Der rote Pfeil zeigt auf den 'Disk identifier' der sdCard. Dieser hat hier den Wert c5ec8147.

In der boot-Partiton /dev/sdb1 muss in der cmdline.txt in der (einzigen) Zeile
    console=serial0,115200 console=tty1 root=PARTUUID=c5ec8147-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
der rot markierte Wert dem ermittelten 'Disk identifier' der sdCard angepasst werden (hier stimmen sie überein).

In der root-Partiton /dev/sdb2 muss im Verzeichnis /etc die Datei 'fstab' mit root-Rechten (sudo) geöffnet werden, s. Bild unten:
    sudo nano etc/fstab

Zu überprüfen sind in den beiden ersten Zeilen, beginnend mit 'PARTUUID=', der Wert nach dem Gleichheitszeichen; er muss dem ermittelten 'Disk indentifier' entsprechen (ist hier der Fall).

Verwendet man eine neue sdCard für das Zurückschreiben der Partitions-Sicherungen und passt die Werte in der cmdline.txt und fstab nicht an, dann kann der boot-Vorgang mit der neuen sdCard nicht abgeschlossen werden. Beim Booten wird der falsche 'Disk identifier' gelesen und deshalb die sdCard mit dem System nicht erkannt.

fsarchiver ist sehr gut geeignet, die Daten ganzer Partitionen, egal ob von Laptop- oder PC-Festplatten, zu sichern (fsarchiver savefs) und wieder zurückzuschreiben (fsarchiver restfs).