Einleitung
BTRFS ist ein Dateisystem, dass seit dem Kernel 2.6.29 als experimentelles Dateisystem verfügbar ist. Gegen Ende 2013 / Anfang 2014 wurde das Dateisystem eher unbemerkt aus dem experimentellen Stadium entlassen. Der Name BTRFS leitet sich vermutlich von B-Tree File System ab. Je nach Literatur wird auch die Ableitung aus Better File System gezogen. Alle großen Distributionen unterstützen BTRFS, ausgenommen Red Hat. Mit der Version RHEL 7.4 wurde die Unterstützung aus dem Produkt entfernt.
Wesentliche Merkmale
Die wesentlichen Merkmale gegenüber extX Dateisystemen sind:
- Snapshots
- Copy-on-Write
- Integriertes Volume Management
- Speicherung der Daten in Chunks (Data, Meta, System)
- Subvolumes
Snapshot Management
Zur Verwaltung von Snapshots verwendet SUSE snapper. Ein alternatives Programm dazu ist TImeshift, dass primär aus der Debian/Ubunut Ecke kommt. Beide Werkzeuge verrichten sauber ihre Arbeit. Ob snapper oder Timeshift Anwendung findet, hängt neben der Distribution noch vom persönlichen Geschmack ab.
Timeshift bedingt gegenüber snapper allerdings, dass die Volumes bestimmten Namenskonventionen folgen.
Das Root Volume muss mit @ benannt sein. Das home volume als @home. Je nach Distribution ist dies jedoch nicht der Fall bzw. lässt sich während der Installation auch garnicht konfigurieren. Aus diesem Grund ist nachfolgend ein Weg beschrieben, wie nach einer nativen Installation auf BTRFS der Wechsel auf die Subvolumes erfolgen kann.
Distributionsspezifische Hinweise
Fedora 30 Beta: Der Installer unterstützt Subvolumes, akzeptiert allerdings keine Subvolumenamen beginnend mit @.
Debian 10 Beta: Der Installer bietet keinerlei Möglichkeit Subvolumes zu konfigurieren. Nach der Auswahl des Dateisystems BTRFS werden diese automatisch im Hintergrund angelegt.
Wechsel auf Subvolumes nach der Installation
Nach Abschluss der Installation ist das entsprechende Systeme von einem Live Medium zu starten. Hier bieten sich das Fedora Live Medium oder eine Debian Live Medium an.
Nachdem das booten vom Live Medium beendet ist, wird ein Terminal benötigt.
Erstellung der Subvolumes
Bei LUKS verschlüsselten Partitionen ist diese zuerst zu entschlüsseln:
cd / sudo cryptsetup open /dev/sdb3 cryptroot
Mounten der Partition – mit Verschlüsselung oder ohne Verschlüsselung:
sudo mount -t btrfs -o compress=lzo /dev/mapper/cryptroot /mntoder
sudo mount -t btrfs -o compress=lzo /dev/sb3 /mnt
Prüfen welche Volumes existieren
sudo btrfs sub list /mnt/
Snapshot des root Volumes erstellen (/mnt/) oder falls als Subvolume vorhanden (/mnt/root/)
sudo btrfs subvolume snapshot /mnt/ /mnt/@oder
sudo btrfs subvolume snapshot /mnt/root/ /mnt/@
Snapshot des home Volumes erstellen (/mnt/home) oder falls nicht vorhanden, Erstellung eines leeren Volumes
sudo btrfs subvolume snapshot /mnt/home/ /mnt/@homeoder
sudo btrfs subvolume create /mnt/@home
Kontrolle der erstellen Subvolumes
sudo btrfs sub list /mnt/
Unmounten der Volumes
sudo umount /mnt/
Anpassung /etc/fstab
Bisher mountet das System die initialen Mountpoints. Die /etc/fstab ist somit zur Nutzung der Subvolumes @ und @home anzupassen. Hierzu muss zuerst das neue Subvolume gemountet werden:
sudo mount -t btrfs -o subvol=@ /dev/sdb3 /mnt
Anschließend sind die Boot Einträge für / und /home anzupassen bzw. zu ergänzen. Zu beachten ist hierbei, dass die UUID bei Subvolumes gleichbleibt. Die korrekte UUID kann mittels blkid in Erfahrung gebracht werden.
vim /mnt/etc/fstab UUID=4b033b5f-b1ec-4f9d-9cd0-8fdb700f0d89 / btrfs defaults,subvol=@ 0 1 UUID=4b033b5f-b1ec-4f9d-9cd0-8fdb700f0d89 /home btrfs defaults,subvol=@home 0 1
Das @home Subvol kann leer eingebunden werden, Benutzerprofile nach der ersten Anmeldung erstellt werden
Anpassung von Grub
Durch den Umzug der Dateien in Subvolumes muss Grub für den Start des Systems ebenfalls angepasst werden. Hierzu werden notwendige Verzeichnisse nachgemountet um anschließend per chroot die Umgebung zu wechseln. Abschließend wird der Bootloader neu geschrieben
sudo mount --bind /dev /mnt/dev/ sudo mount --bind /dev/pts /mnt/dev/pts sudo mount --bind /proc /mnt/proc sudo mount --bind /run /mnt/run sudo mount --bind /sys /mnt/sys sudo chroot /mnt/
Fedora: sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfgDebian: sudo grub-mkconfig -o /boot/efi/EFI/Debian/grub.cfg
/etc/crypttab
In der Datei sind die Volumes bezeichnet, die beim starten entschlüsselt werden.Der Namen des Luks Volumes wurde mit folgenden Befehle festgelegt.
sudo cryptsetup open /dev/sdb3 cryptroot
Wenn der Name des neu angelegten Volumes vom alten abweicht, ist die Datei /etc/crypttab anzupassen. Anschließend sind die initramdisks neu zu erstellen:
update-initramfs -c -t -k all
Quellen
- https://www.heise.de/select/ix/2018/2/1517687740218964
- https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.4_Release_Notes/chap-Red_Hat_Enterprise_Linux-7.4_Release_Notes-Deprecated_Functionality.html
- https://de.opensuse.org/openSUSE:Snapper_Tutorial
- https://github.com/teejee2008/timeshift
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-sysinfo-filesystems-blkid