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:
- SSH Server aktivieren: eine leere Datei namens
sshauf der ersten Partition anlegen - Einen Benutzer vorkonfigurieren: auf der ersten Partition eine Datei namens
userconf.txtanlegen. In dieser Datei den Benutzernamen, direkt gefolgt von einem Doppelpunkt und dann dem verschlüsselten Passwort eintragen. Das Verschlüsselte Passwort generieren mitopenssl passwd -6 - Verfügbare WLAN Netzwerke auflisten:
nmcli device wifi list - WLAN Verbindung herstellen:
sudo nmcli device wifi connect --ask <SSID>
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.
- Die SD Karte aus dem ausgeschalteten RasPi entnehmen und mit einem anderen Computer verbinden.
- Sicherstellen, dass das Paket
squashfs-toolsinstalliert ist. - Herausfinden, welches Gerät die SD Karte auf dem System ist. z.B. mit
lsblk -f. - Eine leeres Verzeichnis erstellen. Das ist erforderlich weil
mksquashfsein Quellverzeichnis erfordert. Wir wollen aber kein Verzeichnis komprimieren, daher geben wie ein leeres an. - Das Image direkt in komprimiert auslesen.
- Den SquashFs Container mounten.
- Das Image innerhalb des Containers als Loopback-Device einbinden.
- Eine Partition innerhalb des Images mounten.
- Kontrollieren ob die Dateien lesbar sind.
- 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:
- Raspberry Pi OS ganz normal installieren.
- Im installierten System das Paket „btrfs-progs“ installieren:
sudo apt install btrfs-progs - Sauber herunterfahren:
sudo systemctl poweroff - Die SD Karte (oder den USB Stick) entnehmen.
- Mit einer anderen SD Karte (oder USB Stick) booten.
- Falls nicht schon vorhanden, muss auf diesen System auch das Paket „btrfs-progs“ installiert werden.
- Eine Liste mit den Dateisystemen ausgeben lassen:
lsblk -f - Die zu konvertierende SD Karte in einem USB Kartenleser mit dem RasPi verbinden.
- Liste der Dateisysteme aktualisieren:
lsblk -fDer neu dazu gekommene Datenträger ist der, den wir konvertieren wollen. Die Partition ist aktuell mitext4formatiert. In den folgenden Beispielen gehen wir von/dev/sda2aus. Das kann aber auf deinem System anders sein. Bitte entsprechend anpassen. 😉 - Das Dateisystem erst mal prüfen:
sudo fsck.ext4 /dev/sda2Nur fortfahren, wenn es keine Fehler gab. - Das ext4 Dateisystem nach btrfs konvertieren:
sudo btrfs-convert /dev/sda2 - Die konvertierte Partition einbinden:
sudo mount /dev/sda2 /mnt/ - 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_savedund räume das ebenfalls nicht mehr benötigte lost+found von ext4 auf:sudo rm -r /mnt/lost+found - 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
- Nun sollte das Dateisystem in
/mntleer sein, mit Ausnahme des Subvolumes@natürlich. Darin wiederum sollte sich das ganze System befinden. - Aushängen des gesamten Dateisystems:
sudo umount /mnt - Einhängen des Subvolumes:
sudo mount -o subvol=@ /dev/sda2 /mnt - Herausfinden welche UUID die neue Partition hat und diese in die fstab eintragen:
lsblk -fund dann die Datei editieren, z.B. mitvim /mnt/etc/fstab - Bei der Partition für
/vonPARTUUIDaufUUIDändern und die vorhin angezeigte UUID eintragen. Das Dateisystem vonext4aufbtrfsä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
- Nun die restlichen Partitionen mounten und per
chrootins 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
- Nun noch die Datei
/mnt/boot/firmware/cmdline.txteditieren. Hier muss auch diePARTUUIDaufUUIDangepasst, 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
- 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 - Nun die SD Karte wieder wechseln und Daumen drücken. 🤞
Journal Logging
Die Standardkonfiguration des RasPi speichert die Journals nicht persistent. Vermutlich soll das die SD Karte schonen. Wenn man aber nachvollziehen will, was vor einem Neustart passiert ist, müssen die Daten natürlich (auf Kosten der Lebensdauer der SD Karte) persistent gespeichert werden.
Die Konfigurationsdatei ist /etc/systemd/journald.conf und eine Beschreibung dazu gibt es mit man journald.conf
Allfällig bereits vorhandene Konfigurationsdateien unter /usr/lib/systemd/journal.conf.c/*.conf müssen entsprechend gelöscht oder auf eine andere Endung als *.conf umbenannt werden, damit sie den Einstellungen in /etc/systemc/journald.conf nicht widersprechen.
Spätestens nach 2 Neustarts müssten mit journalctl --list-boots 2 oder mehr Einträge aufgelistet werden. Es müssten ausserdem Logdaten unter /var/log/journal zu finden sein.
Home in ein eigenes Subvolume verlagern
Btrfs nutzt Snapshots um einen den Zustand der Files festzuhalten. Diese lassen sich schnell und Platzsparend anlegen. Und das alles im laufenden Betrieb.
Snapshots sind auch gleichzeitig eigenständige Subvolumes. Bei vielen Linux-Betriebssystemen (wie z.B. bei CachyOS) werden per Default zwei Subvolumes verwendet: Eines für Root und eines für Home. Hier eine Anleitung, wie ein System, welches Btrfs mit nur einem Root-Subvolume, um konvertiert:
ssh raspbian sudo mount /dev/mmcblk0p2 /mnt/ sudo btrfs subvolume snapshot /mnt/@ /mnt/@new_root sudo btrfs subvolume snapshot /mnt/@ /mnt/@home
Hier logge ich mich ein und mounte das Root-Device nochmals auf /mnt. Ziel ist es zwei neue Subvolumes zu erstellen: Eines für das zukünftige Root und eines für home.
ls /mnt/@ cd /mnt/@new_root/ sudo rm -rf home sudo mkdir home cd /mnt/@home sudo rm -rf bin boot dev etc lib media mnt opt proc root run sbin srv sys tmp usr var ls -alh ls -alh home sudo mv home/* sudo rm -rf home
Hier schaue ich in die gemounteten Subvolumes 'rein und lösche was jeweils zu viel ist.
sudo vi /mnt/@new_root/etc/fstab UUID=d1c58f64-016a-4c8d-91a2-43de1298c4ee / btrfs defaults,noatime,discard=async,subvol=@ 0 0 UUID=d1c58f64-016a-4c8d-91a2-43de1298c4ee /home btrfs defaults,noatime,discard=async,subvol=@home 0 0 :wq cd /mnt findmnt | grep btrfs sudo mv @ @old_root findmnt | grep btrfs sudo mv @new_root @
UUID=d1c58f64-016a-4c8d-91a2-43de1298c4ee ist hier nur Beispielhaft. Man soll das UUID verwenden welches der Partition entspricht. Hier wird die Zeile verdoppelt und das Subvolume @home für den nächsten Reboot vorbereitet so, dass dieses als /home verwendet wird.
cd /mnt findmnt sudo mv @ @old_root findmnt sudo mv @new_root @ sudo reboot
Hier wird das alte Subvolume @ zu old_root und @new_root zu @ umbenannt. Mit findmnt sieht man, dass der Kernel kein Problem hat, dies nachzuverfolten und das System stabil weiterlaufen zu lassen.
Mit einem Reboot kommt /etc/fstab zum Zug und mounted das System auf ein Subvolume für Root und eines für Home um.
sudo btrfs subvolume snapshot /mnt/@ /mnt/@root_snap sudo btrfs subvolume list / sudo btrfs subvolume delete /mnt/@root_snap sudo btrfs subvolume delete /mnt/@old_root
Hier nochmal, wie man Snapshots erstellt. Ein Befehl wie man diese auflistet. Und eines um ein Snapshot zu löschen.
Snapper einrichten
Prüfen ob snapper installiert ist. Snapper installieren.
dpkg -l | grep -e snapper sudo apt install snapper
Einrichten und testen
Konfiguration mit Namen „root“ einrichten. „snapper-timeline.timer“ war nach der Installation bereits aktiv. Mit „create“ lässt sich manuell ein Snapshot erstellen und „list“ zeigt alle snapshots an.
sudo snapper -c root create-config / sudo systemctl status snapper-timeline.timer sudo snapper -c root create -d "Manueller snapshot test" sudo snapper -c root list
Links
Weitere Kommandos finden sich hier. Sortiert von kurzen nach ausführlicheren Artikeln: