Raspberry Pi Backups verkleinern

Ich habe schon einmal in einem Video gezeigt, wie du ein Backup deiner SD-Karte anfertigen kannst, falls die mal den Geist aufgeben sollte.
Die dort angelegten Backups, sind aber immer so groß, wie die Gesamtgröße des Speichermediums.
Wer also eine 64GB SD-Karte oder 256GB SSD nutzt, hat am ende eben ein 64GB oder 256GB großes Backup.
Das Problem: Man kann das Backup nur auf einem gleich großen oder größeren Speichermedium wiederherstellen und die Backups verbrauchen mit der Zeit einiges an Platz auf dem Backupspeicher.

Wie bekommen wir also unsere Backups kleiner?
Mit PiShrink!




PiShrink ist ein kleines Script, welches den nicht genutzt Speicher im Backup löscht.
Ist also z.B. bei deiner 64GB Speicherkarte nur rund 2GB belegt, werden die restlichen 62GB gelöscht.
Am Ende haben wir ein 2GB großes Image, welches wir auch z.B. auf eine 8GB SD-Karte wiederherstellen können.
Nett, oder?

Hinweis: Die Anleitung klappt auch für alle anderen Ein-Platienencomputer und Backups im .img-Format! Es ist also nicht nur für den Raspberry Pi.

Wie geht das ganze und was brauchen wir?
Wir brauchen unseren Raspberry Pi und genügend Speicherplatz.

1. Logge dich auf deinem Pi per SSH ein
2. Lade dir PiShrink herunter

# wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh

3. Mache PiShrink ausführbar:

# sudo chmod +x pishrink.sh

4. Schiebe die Datei nun in folgenden Ordner:

# sudo mv pishrink.sh /usr/local/bin

So können wir PiShrink nun bequem überall im System aufrufen.
5. Schließe nun das Speichermedium an den Pi an, auf dem dein Backup liegt oder mounte einen Netzwerkspeicher → Hautpsache wir kommen an die Datei 😉
6. Navigiere dich nun zum Speicherort deines Images

# cd /pfad/zu/deinem/image/

7. Setze folgenden Befehl ab:

# sudo pishrink.sh Image_Name.img

Ersetze Image_Name durch den Namen deiner Datei.

PiShrink wird nun die Datei direkt bearbeiten. Er legt keine zweite Datei an, sondern editiert direkt das Original.
Du brauchst also nicht mehr Speicherplatz 😉

Tipp: Wenn der Prozess länger dauern sollte, führe ihn einfach per Screen aus. So kannst du es in Ruhe weiter laufen lassen und die SSH-Sitzung solange beenden.

# sudo screen -S PiShrink pishrink.sh Image_Name.img

(Screen muss auf dem System installiert sein!)

PiShrink hat noch weitere Parameter zur Verfügung, die wir mit pishrink.sh aufrufen können:

root@system:~# pishrink.sh
pishrink.sh v0.1.2
Usage: /usr/local/bin/pishrink.sh [-adhrspvzZ] imagefile.img [newimagefile.img]

  -s         Don't expand filesystem when image is booted the first time
  -v         Be verbose
  -r         Use advanced filesystem repair option if the normal one fails
  -z         Compress image after shrinking with gzip
  -Z         Compress image after shrinking with xz
  -a         Compress image in parallel using multiple cores
  -p         Remove logs, apt archives, dhcp leases and ssh hostkeys
  -d         Write debug messages in a debug log file

Fertig!
Wir haben nun ein kleineres Image!

Das Raspberry Pi OS und (in der Regel) alle Debian-Systeme, sollten beim ersten Start des frisch geflashtem Image auch das Dateisystem wieder korrigieren.
Solltest du dein Backup auf ein größeres oder kleineres Speichermedium wiederherstellen, wird beim ersten Start das Laufwerk eingelesen und der verfügbare Speicherplatz angepasst.

Hinweis: Ein Raspberry Pi startet z.B. 2x neu, sobald die neue SD-Karte gestartet wird, da er die Partitionsgrößen anpasst! Hab also einen Moment Geduld beim Starten.

6 Kommentare

  1. Hallo Hoerli,

    vielen Dank für das Hilfreiche Tutorail.
    Bei mir läuft es das Scrip leider nicht durch. Bin neu auf dem Gebiet und kann mit der Meldung nicht so wirklich was anfangen.
    Hast du eventuell eine Idee wodran es liegen könnte?
    Hier die Meldung
    :/mnt/nas $ sudo pishrink.sh Pi_Bcakup-20210119-131912.img
    pishrink.sh v0.1.2
    pishrink.sh: Gathering data …
    Error: Error opening /mnt/nas/Pi_Bcakup-20210119-131912.img: Veraltete Dateizugriffsnummer (file handle)
    pishrink.sh: ERROR occured in line 273: parted failed with rc 1
    pishrink.sh: Possibly invalid image. Run ‘parted Pi_Bcakup-20210119-131912.img unit B print’ manually to investigate …

    Und hier liegt auch die Datei
    :/mnt/nas $ ls
    Fotografie_Spiecker.png Pi_Bcakup-20210119-131912.img test

    Gruß aus dem Norden
    Björn

    • Hallo Björn!
      Ist vielleicht das Backup defekt?
      Ich habe das Script mehrfach mal mit diversen Pi’s probiert und bisher hats super funktioniert.
      Den Fehler – zumindest die Angabe “Veraltete Dateizugriffsnummer” – kenn ich aus anderen Scripts, wenn Festplatten via SMB übers Netzwerk gemountet werden.
      Dann ist die Chance das es läuft, bei 50%.
      Falls das so ist (was ich an dem Mountpfad “nas” womöglich ablegen kann) versuch doch mal falles es möglich ist, eine USB-Festplatte direkt an den Pi zu stecken.

  2. Hallo, Danke für diese geniale Anleitung! Ich konnte mit den von dir angezeigten Befehlen mittels eines raspberry pi 400 problemlos eine zu große Imagedatei, die Win32 Diskimager verweigert hat, so verkleinern, dass meine Speicherkarte sich mit dem Image flashen lies! Und auch das anschliessende automatische Anpassen des Speicherplatzes hat funktioniert. Insgesamt hat der Raspberry Pi mehrfach starten müssen. Ich hab absolut keine Ahnung von Linux und hatte bereits mehrfach Anleitungen im Netz gelesen und Youtube Videos angeschaut wie man das ganze unter Windows hinbekommen kann. War mir aber immer zu kompliziert. Das hier jetzt war super einfach, Danke!

  3. Hallo Hoerli,
    danke für das super Script ! Funktioniert bei “einfachen Images” sehr gut !
    In einem speziellen Fall kommt bei mir aber der Fehler
    “Can`t have partition outside the disk”.
    Ist bei mir aber so, weil ich BerryBoot benutze und Pi OS nur eins von vielen
    Systemen auf einer externen HDD ist.
    Ich würde nun gern ein 1:1 Image von der HDD machen und das Image danach
    mit deinem Script reduzieren. Ich weiß, gibt ja schon Imaging Tools,
    aber die, die ich mir angeschaut habe, machen nicht wirklich 1:1 Kopien bzw.
    lassen sich in den Manuals nicht darüber aus, ob sie wirklich alles mitnehmen,
    oder nur komprimieren, oder sogar freien Disk-Space “kappen”.

    • Mit vielen Systemen habe ich das selbst auch noch nie getestet.
      Da kann ich dir auf die Schnelle auch nicht weiter helfen.
      Vielleicht mal bei GitHub anfragen, ob man das Script auf dieses Vorhaben anpassen kann?

  4. Hallo,
    ich habe zwar einen regnerischen Sonntagnachmittag damit verbracht eine Möglichkeit wie diese zu finden. Aber ich muß sagen, eigentlich alles gut erklärt und funktioniert wirklich prima. Damit habe ich ein 64 GB Karten Image ( auf dem nicht viel drauf war) auf ein 8 GB Karten Image gebracht. Prima das es solche Leute wie euch gibt, die dieses dann auch für andere Niederschreiben und auch erklären. Weiter so.
    Einen Gruß aus der Eifel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.