Inhaltsverzeichnis

Raspberry Pi

Hier entsteht eine Sammlung an Anleitungen rund um's Raspberry Pi.

Installation

Es empfiehlt sich, der jeweils aktuellen Installationsanleitung des Herstellers zu folgen. Hier trotzdem ein paar Tipps, die ich selbst immer mal wieder suche:

Backup

Komprimiertes Image

Ein Vollständiges Image einer SD Karte belegt erst mal so viel Platz wie die SD Karte gross ist. Das ist unter Umständen viel mehr als der tatsächlich auf der Karte belegte Platz. Kompression mit z.B. GZip hilft da. Damit kann man dann aber nicht mehr direkt auf die Daten zugreifen, ohne das Komprimierte Image wieder zu entpacken.

Die Lösung: Ein mittels SquashFs komprimiertes Image, das gemountet werden kann ohne zu entpacken.

  1. Die SD Karte aus dem ausgeschalteten RasPi entnehmen und mit einem anderen Computer verbinden.
  2. Sicherstellen, dass das Paket „squashfs-tools“ installiert ist.
  3. Herausfinden, welches Gerät die SD Karte auf dem System ist. z.B. mit „lsblk -f“.
  4. Eine leeres Verzeichnis erstellen. Das ist erforderlich weil „mksquashfs“ ein Quellverzeichnis erfordert. Wir wollen aber kein Verzeichnis komprimieren, daher geben wie ein leeres an.
  5. Das Image direkt in komprimiert auslesen.
  6. Den SquashFs Container mounten.
  7. Das Image innerhalb des Containers als Loopback-Device einbinden.
  8. Eine Partition innerhalb des Images mounten.
  9. Kontrollieren ob die Dateien lesbar sind.
  10. Dateisysteme aushängen
# find the SD card device
lsblk -f
 
# create empty directory
mkdir /tmp/empty
 
# create SquashFs using the empty directory and reading the SD card directly
mksquashfs /tmp/empty rasPi_2026-02-03.squashfs -p 'rasPi_2026-02-03.img f 444 root root sudo dd if=/dev/sdb bs=4k status=progress' -no-progress
 
# create mountpoints
mkdir -p /tmp/mnt/container
mkdir -p /tmp/mnt/image
 
# mount compressed container and the contained image
sudo mount -o ro rasPi_2026-02-03.squashfs /tmp/mnt/container/
sudo losetup -Pf /tmp/mnt/container/rasPi_2026-02-03.img 
losetup --list | grep container
sudo mount -o ro /dev/loop38p2 /tmp/mnt/image/
 
# unmount everything
sudo umount /tmp/mnt/image
sudo losetup -d /dev/loop38
sudo umount /tmp/mnt/container 

BTRFS

Das Standarddateisystem auf dem RasPi ist ext4. Das etwas modernere BTRFS eignet sich aber auch sehr gut und hat ein paar Vorteile. Dafür kann eine bestehende Installation konvertiert werden.

Zu BTRFS Konvertieren

Voraussetzung: 2 SD Karten (oder USB Sticks) mit Raspberry Pi OS. Eine wird offline konvertiert, die zweite als System benutzt um die Konvertierung durchzuführen. Wenn das System einer SD Karte konvertiert werden soll, braucht es dafür einen USB Kartenleser. Die zu konvertierende Karte muss in einem Schritt extern (über USB) angeschlossen werden während das System von einer anderen Karte oder über USB gebootet wurde.

Ablauf:

  1. Raspberry Pi OS ganz normal installieren.
  2. Im installierten System das Paket „btrfs-progs“ installieren: sudo apt install btrfs-progs
  3. Sauber herunterfahren: sudo systemctl poweroff
  4. Die SD Karte (oder den USB Stick) entnehmen.
  5. Mit einer anderen SD Karte (oder USB Stick) booten.
  6. Falls nicht schon vorhanden, muss auf diesen System auch das Paket „btrfs-progs“ installiert werden.
  7. Eine Liste mit den Dateisystemen ausgeben lassen: lsblk -f
  8. Die zu konvertierende SD Karte in einem USB Kartenleser mit dem RasPi verbinden.
  9. Liste der Dateisysteme aktualisieren: lsblk -f Der neu dazu gekommene Datenträger ist der, den wir konvertieren wollen. Die Partition ist aktuell mit ext4 formatiert. In den folgenden Beispielen gehen wir von /dev/sda2 aus. Das kann aber auf deinem System anders sein. Bitte entsprechend anpassen. 😉
  10. Das Dateisystem erst mal prüfen: sudo fsck.ext4 /dev/sda2 Nur fortfahren, wenn es keine Fehler gab.
  11. Das ext4 Dateisystem nach btrfs konvertieren: sudo btrfs-convert /dev/sda2
  12. Die konvertierte Partition einbinden: sudo mount /dev/sda2 /mnt/
  13. Bei der Konvertierung wird das vorherige Dateisystem als Image abgebildet. Ich gehe davon aus, dass es sich um eine Neuinstallation handelt, und wenn etwas schief geht, diese schnell neu gemacht werden kann. Um Platz zu sparen lösche ich dieses Image deshalb direkt: sudo rm -r /mnt/ext2_saved und räume das ebenfalls nicht mehr benötigte lost+found von ext4 auf: sudo rm -r /mnt/lost+found
  14. Nun wollen wir den gesamten Inhalt in ein Subvolume namens „@“ verschieben. Da das Rootverzeichnis selbst auch ein Subvolume ist, kann man davon einen Snapshot in sich selbst erstellen. Danach einfach alles ausserhalb des Snapshots löschen:
    cd /mnt
    sudo btrfs subvolume snapshot . @
    # links löschen:
    sudo rm bin lib sbin
    # Verzeichnisse löschen:
    sudo rm -r boot dev etc home media mnt opt proc root run srv sys tmp usr var
  15. Nun sollte das Dateisystem in /mnt leer sein, mit Ausnahme des Subvolumes @ natürlich. Darin wiederum sollte sich das ganze System befinden.
  16. Aushängen des gesamten Dateisystems: sudo umount /mnt
  17. Einhängen des Subvolumes: sudo mount -o subvol=@ /dev/sda2 /mnt
  18. Herausfinden welche UUID die neue Partition hat und diese in die fstab eintragen: lsblk -f und dann die Datei editieren, z.B. mit vim /mnt/etc/fstab
  19. Bei der Partition für / von PARTUUID auf UUID ändern und die vorhin angezeigte UUID eintragen. Das Dateisystem von ext4 auf btrfs ändern. Die Optionen gemäss Beispiel ergänzen:
    proc                                       /proc           proc    defaults                                   0       0
    PARTUUID=920be9a3-01                       /boot/firmware  vfat    defaults                                   0       2
    UUID=0ba076f5-a8cb-4a1d-b01c-eba081cd3e09  /               btrfs   defaults,noatime,discard=async,subvol=@    0       0
  20. Nun die restlichen Partitionen mounten und per chroot ins System „einloggen“ und die InitRd neu generieren:
    sudo mount /dev/sda1 /mnt/boot/firmware/
    sudo mount --bind /dev/ /mnt/dev/
    sudo mount --bind /proc/ /mnt/proc/
    sudo mount --bind /sys /mnt/sys/
     
    sudo chroot /mnt/
     
    update-initramfs -c -k all
     
    exit
  21. Nun noch die Datei /mnt/boot/firmware/cmdline.txt editieren. Hier muss auch die PARTUUID auf UUID angepasst, und entsprechend eingetragen werden. Dazu kommen noch der Dateisystemtyp und die flags dazu. Siehe Beispiel:
    console=serial0,115200 console=tty1 root=UUID=0ba076f5-a8cb-4a1d-b01c-eba081cd3e09 rootfstype=btrfs rootflags=subvol=@ rootwait cfg80211.ieee80211_regdom=CH
  22. So, das sollte es nun gewesen sein. Jetzt könnte man natürlich alles erst sauber aushängen. Das macht das System aber auch automatisch wenn man es herunterfährt: sudo systemctl poweroff
  23. Nun die SD Karte wieder wechseln und Daumen drücken. 🤞