Btrfs ist ein Open-Source-Allzweck-Dateisystem für Linux. Der Name leitet sich von der Verwendung von B-Bäumen ab, um interne Dateisystemstrukturen zu speichern. Für das Dateisystem werden unterschiedliche Namen verwendet, darunter „Butter F S“ und „B-Tree F S“. Die Entwicklung von Btrfs begann 2007 bei Oracle, und jetzt tragen eine Reihe von Unternehmen (darunter Red Hat, Fujitsu, Intel, SUSE und viele andere) zu den Entwicklungsbemühungen bei. Btrfs ist im Mainline-Linux-Kernel enthalten.
Btrfs-Snapshots
Btrfs-Subvolumes können erstellt und geklont werden, wodurch zusätzliche B-Bäume erstellt werden. Ein Snapshot beginnt als Kopie eines Subvolumes, das zu einem bestimmten Zeitpunkt erstellt wurde. Sie können einen Snapshot beschreibbar machen und ihn als sich entwickelnden Klon des ursprünglichen Subvolumes verwenden. Oder Sie verwenden den Snapshot als stabiles Image eines Subvolumes für Sicherungszwecke oder für die Migration auf andere Systeme. Snapshots können schnell erstellt werden und verbrauchen zunächst sehr wenig Speicherplatz.
Verwenden Sie den Befehl btrfs Subvolume Snapshot, um einen beschreibbaren/lesbaren Snapshot eines Subvolumes zu erstellen. Das folgende Beispiel erstellt einen Snapshot des SV1-Subvolumes:
# btrfs subvolume snapshot /btrfs/SV1 /btrfs/SV1/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1/SV1-snap'
Verwenden Sie den btrfs-Subvolume-Snapshot -r Option zum Erstellen eines schreibgeschützten Snapshots:
# btrfs subvolume snapshot -r /btrfs/SV1 /btrfs/SV1-rosnap Create a readonly snapshot of '/btrfs/SV1' in '/btrfs/SV1-rosnap'
Die Snapshots erscheinen als reguläres Verzeichnis, wenn der Befehl ls verwendet wird. Snapshots erscheinen auch in der Ausgabe des Befehls btrfs subvolume list.
# btrfs subvolume list /btrfs ID 257 gen 10 top level 5 path SV1 ID 258 gen 9 top level 257 path SV1/SV1-snap ID 259 gen 10 top level 5 path SV1-rosnap
Erstellen eines Snapshots einer Datei
Sie können den „cp –reflink“ verwenden “-Befehl, um einen Schnappschuss einer Datei zu erstellen. Mit dieser Option erstellt das Dateisystem keinen neuen Link, der auf einen vorhandenen Inode verweist, sondern erstellt stattdessen einen neuen Inode, der dieselben Festplattenblöcke wie die ursprüngliche Kopie teilt. Die neue Datei scheint eine Kopie der Originaldatei zu sein, aber die Datenblöcke werden nicht dupliziert. Dadurch kann die Kopie fast augenblicklich erfolgen und außerdem Speicherplatz gespart werden. Da der Inhalt der Datei im Laufe der Zeit divergiert, wächst der erforderliche Speicherplatz. Eine Einschränkung besteht darin, dass diese Operation nur innerhalb der Grenzen desselben Dateisystems und innerhalb desselben Subvolumes funktionieren kann.
Im folgenden Beispiel wird eine Datei mithilfe des Befehls cp –reflink kopiert. Der belegte Platz wird sowohl vor als auch nach dem Kopiervorgang angegeben. Beachten Sie, dass der verwendete Speicherplatz nicht zunimmt.
# df -hP /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
# cp --reflink /btrfs/SV1/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1/copy_of_vmlinuz
# df -h /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
Mounten eines Subvolumes oder Snapshots
Standardmäßig mountet Linux das übergeordnete Btrfs-Volume, das die ID 0 hat. In diesem Beispiel wurde der folgende Mount-Befehl ausgegeben, bevor Subvolumes und Snapshots erstellt wurden:
# mount /dev/sdb /btrfs
Das Subvolume SV1 wurde in /btrfs erstellt. Der Befehl ls zeigt das Subvolume:
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:01 SV1
Das folgende Beispiel kopiert Dateien in SV1, erstellt einen Snapshot von SV1 und überprüft, ob sowohl das Subvolume als auch der Snapshot dieselben Dateien enthalten:
# cp -p /boot/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1
# btrfs sub snapshot /btrfs/SV1 /btrfs/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1-snap'
# ls /btrfs/SV1* /btrfs/SV1: vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: vmlinuz-3.10.0-693.17.1.el7.x86_64
Wenn Sie /btrfs unmounten und erneut mounten, wird das übergeordnete Btrfs-Volume standardmäßig gemountet:
# ls /btrfs/ SV1 SV1-snap # umount /btrfs # mount /dev/sda /btrfs/ # ls /btrfs/ SV1 SV1-snap
Sie können jedoch ein Btrfs-Subvolume oder einen Snapshot mounten, als wäre es ein Plattengerät. Wenn Sie einen Snapshot anstelle seines übergeordneten Subvolumes mounten, setzen Sie den Status des Dateisystems effektiv auf den Zeitpunkt zurück, an dem der Snapshot erstellt wurde. Das folgende Beispiel kopiert eine Datei nach SV1, sodass sich der Inhalt von SV1-snap unterscheidet:
# cp testfile /btrfs/SV1
# ls -l /btrfs/SV1* /btrfs/SV1: total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: total 5756 -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Um ein Subvolume oder einen Snapshot zu mounten, müssen Sie zuerst die ID-Nummer des Subvolumes bestimmen, das Sie mounten möchten. Verwenden Sie den Befehl btrfs subvolume list, um die ID-Nummern anzuzeigen. Im folgenden Beispiel lautet die ID des Root-Subvolumes 257:
# btrfs sub list /btrfs ID 257 gen 12 top level 5 path SV1 ID 258 gen 9 top level 5 path SV1-snap
Verwenden Sie die btrfs-Datei „subvolume set-default “-Befehl, um das Standard-Subvolume eines Dateisystems festzulegen. Um beispielsweise das SV1-Btrfs-Subvolume einzuhängen, das die ID 257 hat:
# btrfs subvolume set-default 257 /btrfs
Anschließend müssen Sie das Btrfs-Dateisystem aushängen und erneut einhängen. Die Root-Ebene enthält dann den Inhalt des SV1-Subvolumes und das Root-Subvolume ist nicht mehr sichtbar:
# ls -l /btrfs total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Sie können auch das „-o Subvolume verwenden ”-Option für den Mount-Befehl, um das Root-Subvolume oder ein Subvolume oder einen Snapshot zu mounten. Zum Beispiel, um das Root-Subvolume zu mounten:
# umount /btrfs # mount -o subvolid=5 /dev/sda /btrfs
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:44 SV1 drwxr-xr-x. 1 root root 68 Mar 29 11:17 SV1-snapSo erstellen und mounten Sie ein Btrfs-Dateisystem (erklärt mit Beispielen)
So ändern / erweitern Sie ein Btrfs-Volume / Dateisystem