setup-btrfs.sh hilft dabei, einen frisch installierten Debian-Server mit einer einzelnen Btrfs-Root-Partition in ein System mit sauberer Subvolume-Struktur zu verwandeln – geeignet für Timeshift und Container-Workloads.
Auf einem Debian- (oder Debian-basierten) System mit Btrfs-Root führt das Skript im Wesentlichen aus:
-
Ermittelt das aktuelle Root-Device per
findmnt(z. B./dev/vda2[/@rootfs]→/dev/vda2). -
Mountet das Btrfs-Top-Level (
subvolid=5) nach/mnt/btrfs-root. -
Legt (idempotent) folgende Subvolumes an:
@(neues Root)@root@home@spool@log@cache@tmp_var@srv@tmp@opt@containers@docker@www
-
Kopiert das aktuelle Root-Dateisystem nach
@(mit typischen Ausschlüssen wie/dev,/proc,/sys,/run,/tmp,/mnt,/media, …). -
Kopiert die Inhalte wichtiger Verzeichnisse in ihre Subvolumes:
/root→@root/home→@home/var/spool→@spool/var/log→@log/var/cache→@cache/var/tmp→@tmp_var/srv→@srv/tmp→@tmp/opt→@opt/var/lib/containers→@containers/var/lib/docker→@docker/var/www→@www
-
Bereitet im neuen Root (
@) die Mountpoints vor, damit die Subvolumes dort eingehängt werden können. -
Passt
/etc/fstabim laufenden System an:- legt ein Backup als
fstab.backup-YYYY-MM-DD-HHMMSSan, - kommentiert alte Btrfs-Root-Zeilen als
#OLD-ROOT …aus, - fügt neue Btrfs-Einträge für
/,/home,/var/log,/var/lib/docker,/var/wwwusw. mit den entsprechenden@…-Subvolumes hinzu.
- legt ein Backup als
-
Passt GRUB an (falls vorhanden):
- ersetzt ggf.
@rootfsdurch@in/etc/default/grub, - ruft
update-grubodergrub-mkconfig -o /boot/grub/grub.cfgauf (sofern vorhanden).
- ersetzt ggf.
-
Setzt das Btrfs-Default-Subvolume auf
@, sodass das System von@bootet. -
Stellt sicher, dass die benötigten Mountpoints auch im aktuellen Root existieren (
/home,/var/lib/docker, …).
Das Ergebnis:
- Root läuft von
@(Timeshift-kompatibel). - Wichtige Pfade wie
/home,/var/log,/var/lib/docker,/var/wwwliegen auf eigenen Subvolumes.
- Debian oder Debian-basiertes System mit:
aptsystemd
- Root-Dateisystem ist Btrfs auf einem einzelnen Device (z. B. eine Btrfs-Partition
/dev/vda2). - Das Skript wird als root ausgeführt.
Bei Bedarf installiert das Skript automatisch:
rsyncbtrfs-progs
Empfohlener Einsatz: auf einer frischen Server-Installation, bei der die Neu-Strukturierung des Dateisystems in Ordnung ist. Auf bereits stark genutzten Systemen solltest du besonders sorgfältig testen und ein Backup haben.
-
Debian so installieren, dass du erhältst:
- eine kleine EFI-Partition (z. B.
/dev/vda1) - eine große Btrfs-Partition als Root (z. B.
/dev/vda2)
- eine kleine EFI-Partition (z. B.
-
Als root anmelden (oder
sudoverwenden). -
Repository klonen:
git clone https://github.com/<dein-user>/btrfs-layout-script.git cd btrfs-layout-script
-
Skript ausführbar machen:
chmod +x setup-btrfs.sh
-
Skript ausführen:
sudo ./setup-btrfs.sh
-
/etc/fstabprüfen und sicherstellen, dass:/mitsubvol=@eingetragen ist,- die zusätzlichen Pfade (
/home,/var/log,/var/lib/docker,/var/www, …) passende Einträge mit den erwarteten@…-Subvolumes haben.
-
Mounts anwenden und testen:
systemctl daemon-reload mount -a
Es sollten keine Fehler erscheinen.
-
Neustart:
reboot
-
Nach dem Neustart prüfen:
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS / findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS /home /var/log /var/lib/docker /var/www
Erwartung:
/von...[/@]mitsubvol=@/homevon...[/@home]usw.
Damit ist das Layout für Timeshift und Container-Workloads vorbereitet.
Dieses Projekt steht unter der GNU General Public License Version 3 oder neuer (GPL-3.0-or-later).
Details findest du in der Datei LICENSE.