Raspberry Pi Image Sicherung auf die tatsächliche Größe verkleinern & (viel) ungenutzten Speicherplatz sparen

Raspberry Pi Image Sicherung auf die tatsächliche Größe verkleinern & (viel) ungenutzten Speicherplatz sparen

In einem vorherigen Beitrag habe ich gezeigt, wie man eine Image-Sicherung des Raspberry Pi erstellen kann. Mithilfe eines solchen Abbildes lässt sich der Pi komplett wiederherstellen. Ein anderer zeigt, wie man auf Basis des Raspberry Pi OS sein eigenes Betriebssystem-Abbild erstellen kann. Eines der größten Nachteile in beiden Fällen: Das Abbild ist genau so groß wie die SD-Karte, auch wenn diese nur zu einem Bruchteil belegt ist. Hat man beispielsweise eine 32 GB große Micro-SD Karte, wird das Image immer 32 GB groß sein. Vor allem mit größeren Speicherkarten verlangsamt dies die Wiederherstellung deutlich und kostet auf Dauer einiges an Speicherplatz. Heute schauen wir uns an, wie man ein Abbild auf die tatsächliche Größe verkleinern und sogar komprimieren kann.

Das funktioniert, in dem ein neues Image erstellt wird – aber nur mit dem belegten Speicherplatz. Der freie Speicher in dem ja keine Daten liegen, wird somit aus dem Abbild entfernt. Beim Start erweitert der Pi das Abbild wieder auf die volle Größe der SD-Karte, sodass diese ausgenutzt werden kann.

Was brauche ich?

Es wird ein Abbild in Form einer .img Datei benötigt – wie dies erstellt wird, habe ich in einem anderen Beitrag bereits gezeigt. Die eingesetzte Software läuft auf Linux, dementsprechend ist eine Linux-Installation nötig. Falls du nur einen Windows-PC hast, kannst du dort auch eine VM installieren. Wie dies funktioniert, habe ich im Beitrag zur Erstellung eines eigenen Raspberry Pi OS Images gezeigt. Zu empfehlen wäre jedoch eine native Linux-Installation, die Performance ist dort in meinen Tests deutlich besser als in einer Virtuellen Maschine.

Erstelltes Image auf die tatsächliche Größe verkleinern

Nun zu unserem Hauptproblem: Die .img Datei ist genau so groß wie die Speicherkarte, in diesem Falle 32 GB. Um das zu lösen, möchten wir das Abbild auf die tatsächlich genutzte Größe verkleinern – denn auf der Karte ist nur ein Bruchteil der 32 GB tatsächlich belegt. Das Problem entsteht hier also durch den freien Speicher, der durch ein 1:1 Abbild ebenfalls eingeschlossen wird. Dieses Problem hat bereits jemand mit einem quelloffenen Skript namens PiShrink gelöst. Wir müssen es daher nur herunterladen und anschließend auf das Image anwenden:

wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh
chmod +x pishrink.sh

Damit das Image verkleinert werden kann, wird gparted benötigt. Falls man dies auch komprimieren möchte, zusätzlich das Paket pigz:

sudo apt install gparted pigz

Um unser Abbild zu verkleinern und zu überschreiben, können wir es einfach mit dem Pfad zur .img Datei aufrufen.

sudo pishrink.sh ~/rpi_image.img

Möchte man die originale Datei behalten, den neuen Pfad zur verkleinerten Datei als zweiten Parameter angeben. Achtung: Hierbei wird das Abbild zunächst kopiert! Kurzzeitig braucht ihr also mehr als das Doppelte der Image-Größe an Speicher!

sudo pishrink.sh ~/rpi_image.img ~/rpi_image_small.img

Ein Vanilla Raspberry Pi OS auf dem lediglich sämtliche Paketupdates sowie der Editor vim installiert wurden, reduziert dies die Größe auf nur noch 2,2 GB – Also etwa 94% Ersparnis! Dies hat das Skript erreicht, in dem es die Karte auf die tatsächlich belegte Größe reduziert hat. Der Pi ist entsprechend vorkonfiguriert, um seine Karte beim ersten Start auf die Volle Größe zu erweitern – also in diesem Beispiel auf 32 GB.

Noch stärkere Verkleinerung des Abbildes durch Kompression

Weiter reduzieren lässt sich die Größe, in dem wir das Image komprimieren. PiShrink hat dafür bereits zwei Verfahren implementiert:

  • -z für Gzip: Es komprimiert unser aktuelles Vanilla Raspberry Pi OS Abbild von 2,2 GB auf 828 MB, also erneut mehr als 2,5 Mal kleiner.
  • -Z für XZ: Dieser Algorithmus ist noch etwas effizienter, das Image ist danach lediglich 623 MB groß.

In beiden Fällen macht es Sinn, den Schalter -a zu setzen. Dadurch werden alle Kerne zur Komprimierung genutzt. Das beschleunigt den Vorgang deutlich, vor allem bei XZ. Folgendes Beispiel erstellt ein XZ-Archiv:

sudo pishrink.sh ~/rpi_image.img -a -Z ~/rpi_image_small.img

Die Zieldatei erhält automatisch eine passende Erweiterung, z.B. .xz für XZ-Archive.

Fazit

PiShrink ist ein nützliches Skript, um Images der Raspberry Pi SD-Karte massiv zu verkleinern. Vor allem zur Bereitstellung eigener Images ist das nützlich. Aber auch zu Sicherungs- und Archivierungszwecken lässt sich damit viel Speicher sparen – tendenziell um so mehr, je größer die Karte ist. Ebenfalls nicht zu vergessen ist die Zeitersparnis beim Einspielen: Ist die Image-Datei nur ein paar Gigabyte groß, geht dies deutlich schneller als mit 32 GB, 64 GB oder mehr – je nach Kartengröße.

Leave a Reply