Btrfs/Subvolumes: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „==Subvolumes== ===Grundlagen=== Ein Subvolume ist eine zusätzliche interne Dateisystemwurzel, die separat eingehängt werden kann * Aus Anwendungssicht erscheinen Subvolumes wie Verzeichnisse * Alle unterhalb eines eingehängten Subvolumes vorhandenen Subvolumes erscheinen gleichfalls als eingehängt * Bei der Nutzung von Subvolumes sind grundsätzlich zwei Vorgehensweisen denkbar: ein „flaches“ (flat) und ein „verschachteltes“ (nested) Layout S…“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 107: | Zeile 107: | ||
# den Inhalt des Verzeichnisses in das Subvolume verschieben und | # den Inhalt des Verzeichnisses in das Subvolume verschieben und | ||
# das Verzeichnis löschen | # das Verzeichnis löschen | ||
[[Kategorie:Btrfs]] | |||
Version vom 24. August 2025, 08:52 Uhr
Subvolumes
Grundlagen
Ein Subvolume ist eine zusätzliche interne Dateisystemwurzel, die separat eingehängt werden kann
- Aus Anwendungssicht erscheinen Subvolumes wie Verzeichnisse
- Alle unterhalb eines eingehängten Subvolumes vorhandenen Subvolumes erscheinen gleichfalls als eingehängt
- Bei der Nutzung von Subvolumes sind grundsätzlich zwei Vorgehensweisen denkbar: ein „flaches“ (flat) und ein „verschachteltes“ (nested) Layout
Subvolumes sind die Grundlage für Snapshots und Quotas
Flaches Layout
Beim flachen Layout wird die Dateisystemwurzel an sich nicht eingehängt, dafür aber die einzelnen Subvolumes
- Es hat sich als Namenskonvention herausgebildet, die Namen solcher Subvolumes mit einem Klammeraffen beginnen zu lassen
toplevel (Dateisystemwurzel, wird nicht eingehängt) +-- @root (Subvolume, das als Wurzelverzeichnis / eingehängt wird) +-- @home (Subvolume, das als /home eingehängt wird) +-- @topsecret (Subvolume, das nicht eingehängt wird) +-- var (normales Verzeichnis) +-- @lib (Subvolume, das unter /var/lib eingehängt wird) +-- @www (Subvolume, das unter /var/www eingehängt wird)
Im Beispiel wird die Verzeichnisstruktur näherungsweise durch Einfügen des Verzeichnisses /var nachgebildet
- Technisch ist dies nicht erforderlich
In der /etc/fstab wird der Verzeichnisbaum folgendermaßen zusammengebaut:
UUID=… / btrfs defaults,subvol=@root 0 0 UUID=… /home btrfs defaults,subvol=@home 0 0 UUID=… /var/lib btrfs defaults,subvol=/var/@lib 0 0 UUID=… /var/www btrfs defaults,subvol=/var/@www 0 0
Alles, was sich außerhalb/oberhalb der eingehängten Subvolumes befindet, ist aus Anwendersicht nicht vorhanden
- Da das Subvolume @topsecret nicht explizit eingehängt wird und die Dateisystemwurzel auch nicht, kann auf Daten in @topsecret nicht zugegriffen werden
Anstelle des über subvol angegebenen Pfads des Subvolumes kann man auch dessen ID über subvolid angeben
- Die ID eines Subvolume kann über btrfs subvolume list oder btrfs subvolume show ermittelt werden
- Die Angabe der ID ist kompakter und unempfindlich gegen das Verschieben des Subvolumes im Dateisystem, dafür ist die fstab weniger „sprechend“
Verschachteltes Layout
Beim verschachtelten Layout wird die Dateisystemwurzel eingehängt
- Damit werden auch automatisch alle Subvolumes eingehängt und erscheinen als Verzeichnisse
toplevel (Dateisystemwurzel, wird als / eingehängt) +-- home (Subvolume, wird nicht explizit eingehängt, erscheint automatisch als Verzeichnis /home) +-- topsecret (Subvolume, wird nicht explizit eingehängt, erscheint automatisch als Verzeichnis /topsecret) +-- var (normales Verzeichnis) +-- lib (Subvolume, wird nicht explizit eingehängt, erscheint automatisch als Verzeichnis /var/lib) +-- www (Subvolume, wird nicht explizit eingehängt, erscheint automatisch als Verzeichnis /var/www)
Die fstab umfasst nur eine Zeile:
UUID=… / btrfs defaults 0 0
Wenn kein Subvolume angegeben wird, wird das als Default festgelegte Volume gemountet
- Das ist im Regelfall die Dateisystemwurzel (das „top-level subvolume“); über btrfs subvolume set-default kann dieses geändert werden
Subvolumes verwalten
Subvolumes lassen sich über btrfs subvolume verwalten
- Die wichtigsten Befehle sind
- btrfs subvolume create: erzeuge ein Subvolume am angegebenen Ort
- btrfs subvolume delete: lösche das angegebene Subvolume
- btrfs subvolume list: zeige alle Subvolumes unterhalb des angegebenen Ortes
- btrfs subvolume show: zeige Details des angegebenen Subvolumes
- btrfs subvolume snapshot: erzeuge einen Snapshot des angegebenen Subvolumes
root@demo:~# btrfs subvolume create subvol1 Create subvolume './subvol1' root@demo:~# btrfs subvolume create subvol2 Create subvolume './subvol2' root@demo:~# btrfs subvolume list ID 263 gen 3526 top level 5 path root/subvol1 ID 264 gen 3527 top level 5 path root/subvol2
Hier werden die eindeutigen numerischen IDs der Subvolumes angezeigt
- Das „top-level subvolume“, also die Wurzel eines btrfs-Dateisystems, hat immer die ID 5
root@demo:~# btrfs subvolume delete subvol2 Delete subvolume (no-commit): '/root/subvol2' root@demo:~# btrfs subvolume list ID 263 gen 3526 top level 5 path root/subvol1
Jetzt hängen wir das verbliebene Subvolume ein und wieder aus:
root@demo:~# mkdir /mnt/subvol1 root@demo:~# mount -t btrfs -o subvol=/root/subvol1 /dev/sda1 /mnt/subvol1/ root@demo:~# touch subvol1/test root@demo:~# ls /mnt/subvol1/ test root@demo:~# umount /mnt/subvol1/ root@demo:~# rmdir /mnt/subvol1/ root@demo:~# ls subvol1/ test
Und nun löschen wir das verbliebene Subvolume:
root@demo:~# btrfs subvolume delete subvol1 Delete subvolume (no-commit): '/root/subvol1' root@demo:~# btrfs subvolume list root@demo:~# ls subvol1/ ls: Zugriff auf 'subvol1/' nicht möglich: Datei oder Verzeichnis nicht gefunden
Verzeichnisse in Subvolume umwandeln
Es gibt keinen Befehl, um ein Verzeichnis in ein Subvolume umzuwandeln
- Man muss von Hand
- das Verzeichnis umbenennen,
- ein Subvolume mit dem ursprünglichen Namen des Verzeichnisses neu erzeugen,
- den Inhalt des Verzeichnisses in das Subvolume verschieben und
- das Verzeichnis löschen