In Kali-Linux, das ja auch nur ein Debian-Derivat ist, gibt es ein Feature mit dem Namen "Unkaputtbar", das das gleiche macht, wenn auch auf Basis von snapper statt timeshift. Es ist in das Installationsprogramm eingebaut, so dass man es direkt (bei einer frischen Neuinstallation) verwenden kann. Das wird von Debian 12 zwar nicht unterstützt, aber die Dokumentation finde ich hilfreich, um das Prinzip zu verstehen:
https://www.kali.org/docs/installation/ ... -snapshots
Es gibt ein aktuelles YouTube-Video mit dem treffenden Titel "
Debian 12: Fighting with OpenSUSE Snapper!", das die einzelnen Schritte demonstriert. Sicher nichts für Einsteiger und noch ziemlich experimentell.
Timeshift, Snapper und btrbk erzeugen (logischerweise) alle automatisch read-only Snaphosts. Dummerweise kann man von einem reinen ro-Snapshot nicht booten, weil Linux für einige Verzeichnisse zwingend Schreibrechte braucht, insbesondere für /var/log, /tmp. Abhängig vom verwendeten Desktop müssen noch weitere Verzeichnisse schreibbar gemacht werden, z.B. /var/lib/gdm3/ und /var/lib/AccountsService. Deshalb werden schon während der Installation für all diese Verzeichnisse BTRFS-Subvolumes angelegt. Bei einer Debian12-Installation müsste man also nach der ersten Partitionierung und vor der eigentlichen Installation in eine Rootshell wechseln und dort die Subvolumes manuell anlegen. Das wird in dem YouTube-Video gezeigt.
Ich finde das viel zu kompliziert und auch unnötig, nur um direkt in automatisch generierte read-only Snapshots booten zu können. Und ein GRUB-Menü mit Dutzenden Einträgen automatisch generierter Snapshots fände ich auch verwirrend. Man kann mit dem Befehl "btrfs subvol snapshot" jederzeit aus einem read-only Snapshot einen schreibbaren generieren, der dann auch bootbar ist. (Achtung: es ist noch eine kleine Anpassung der /etc/fstab im neuen Snapshot nötig)
Es wäre schön, wenn man die bootbaren Snapshots auch im GRUB-Menü sehen könnte. Leider ist grub-btrfs (noch?) nicht in den Debian12-Repos enthalten, müsste also mit "git clone" und "make install" installiert werden. Aber auch ohne das Tool kann man in einen Snapshot booten, man muss dann einen GRUB-Eintrag editieren und die Option rootflags=subvol=@rootfs durch den Namen des Snapshots ersetzen, also z.B rootflags=subvol=@deb12-backup.
Ich habe das in einer VM
nach Installation und erster Konfiguration von Debian 12 ausprobiert. Voraussetzung ist natürlich, dass die Systempartition mit BTRFS formatiert ist. Debian legt bei der Installation ein BTRFS-Subvolume mit dem Namen "@rootfs" an, also nicht "@" wie manche andere Distributionen. Folgende Schritte wären laut meiner .bash_history als Root ausreichend: (Bitte nicht auf einem realen System ausprobieren und in einer VM nur nach Anlegen eines Schnappschuss mit der Virtualisierungssoftware!):
Code: Alles auswählen
# Bitte ggf. anpassen:
MyFirstBootableSnapshot=@deb12-backup1
RootDevice=$(mount | grep btrfs | awk '$3 == "/" && $5 == "btrfs" { print $1 }')
# z.B. RootDevice=/dev/vda5
apt install btrbk
if ! fgrep -q /mnt/btr_pool /etc/fstab ; then
cat >> /etc/fstab << END
$RootDevice /mnt/btr_pool btrfs defaults,subvolid=5 0 0
END
fi
mkdir -p /mnt/btr_pool
mount /mnt/btr_pool
systemctl daemon-reload
btrfs sub create /mnt/btr_pool/@snapshots
# Konfiguriere btrbk:
cat > /etc/btrbk.conf << END
volume /mnt/btr_pool
# Create snapshots in /mnt/btr_pool/@snapshots
snapshot_dir @snapshots
snapshot_preserve_min 2d
snapshot_preserve 14d
subvolume @rootfs
snapshot_name d12
END
cat > /etc/apt/apt.conf.d/70btrbk << END
// create a btrfs snapshot before (un)installing packages
Dpkg::Pre-Invoke {"/usr/bin/btrbk run @rootfs";};
END
# Erzeuge ersten ro-Snapshot:
btrbk run @rootfs
LatestSnapshotDir=$(btrbk list latest --format col:h:SNAPSHOT_SUBVOLUME @rootfs)
LatestSnapshot=${LatestSnapshotDir#/mnt/btr_pool/*}
# Erzeuge ersten bootbaren rw-Snapshot:
cd /mnt/btr_pool
btrfs subvol snapshot ${LatestSnapshot} ${MyFirstBootableSnapshot}
sed -i "s/subvol=@rootfs/subvol=${MyFirstBootableSnapshot}/" "${MyFirstBootableSnapshot}/etc/fstab"