Inhaltsverzeichnis

Subvolume mounten

Syntax: mount -o subvol=Subvolume-Pfad Device Mountpoint



Beispiel: mount -o subvol=/second /dev/sda1 /media/disk1

In obigem Beispiel wird das Subvolume „second“, welches sich direkt als Verzeichnis auf /dev/sda1 befindet, nach /media/disk1 gemountet.
Wäre /dev/sda1 nach /media/btrfsdisk gemountet und man würde ls machen, könnte die Ausgabe zum Beispiel so aussehen:

user@server /media/btrfsdisk $ ls
first  second

fstab

Entspricht einem normalen Eintrag in der fstab, es kommt lediglich der Parameter subvol=subvolume-Pfad hinzu.

Beipsiel:
UUID=dfe5e7bc-ed56-442b-8c94-8c66bbcd44dc / btrfs defaults,subvol=/newroot 0 1

„newroot“ ist in obigem Beispiel das zu mountende Subvolume auf der Partition mit UUID „dfe5e7bc-ed56-442b-8c94-8c66bbcd44dc“.
Zu beachten ist das „/“ hier nicht die Wurzel des Dateisystems meint, sondern die Wurzel der Partition/des Dateisystems, sprich „newroot“ liegt direkt oben in der Partition und nicht unterhalb irgend eines Verzeichnisses.

Subvolume als "/"

In diesem Fall liegt /boot (der Kernel und Grubs Konfiguration) nicht auf dem Btrfs Subvolume, sondern auf einer eigenen ext3 Partition.

Beispieleintrag grub.cfg:

linux   /vmlinuz-3.19.0-32-generic root=UUID=dfe5e7bc-ed56-442b-8c94-8c66bbcd44dc ro rootflags=subvol=/newroot  quiet splash $vt_handoff



Gesamteintrag sieht so aus:

menuentry 'Linux Mint 17.3 Xfce 64-bit' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-dfe5e7bc-ed56-442b-8c94-8c66bbcd44dc' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  6d27fa00-8453-41aa-9a1f-6284457e9d50
        else
          search --no-floppy --fs-uuid --set=root 6d27fa00-8453-41aa-9a1f-6284457e9d50
        fi
        linux   /vmlinuz-3.19.0-32-generic root=UUID=dfe5e7bc-ed56-442b-8c94-8c66bbcd44dc ro rootflags=subvol=/newroot  quiet splash $vt_handoff
        initrd  /initrd.img-3.19.0-32-generic
}
bestehende Partitionen anklicken, als Dateisystem btrfs aus der Liste wählen, Formatieren nicht anklicken

* Wurde einmal mit dem Subvolume als "/" gebootet kann man update-grub aufrufen und es wird das neue subvolume für alle Einträge eingetragen

Snapshot beim Installieren neuer Pakete

Tools

In den Man-Pages ist von <Path> und von <Device> die Rede.

<Path> - ist der Mount-Point

<Device> - ist das Device (/dev/something)

Das Tool Btrfs ist das zentrale Tool, es ruft letztendloch allerdings nur andere Programme auf die die spezielle Aufgabe ausführen - es gibt also meist einen Weg über den Vefehl Btrfs und einen zweiten über ein Tool welches in der Regel btrfs-XYZ heißt.

Btrfs gliedert sich in u.a. (es gibt mehr folgende Unterbefehle:

Btrfs

subvolume

Operation Erklärung
list Path Listet die Subvolumes auf die es für diesen Pfad gibt

Syntax: btrfs subvolume list Pfad

Beispiel:
 btrfs subvolume list / 



Das mit @ markierte Sobvolume ist das aktive

df

Syntax: btrfs filesystem df Mount-Point

snapshot

Snapshots sind Abbilder eines anderen Subvolumes. Ein Snapshot erstellt ein neues Subvolume mit dem Abbild.
Das besondere dabei ist, dass keine Daten kopiert werden beim erstellen des Snapshots, vielmehr sind die Daten in Quelle und Ziel die gleichen (die gleichen Dateisystemblöcke).
Erst wenn das Quell- oder Zielsubvolumen geändert wird, verweisen die Dateisystemmetadaten des Subvolumes bei dem die Änderung stattgefunden hat auf neue Blöcke, für die Dateien die sich geändert haben.
Es wird also erst in dem Moment mehr Speicher benötigt wo ein Delta zwischen den beiden Subvolumes auftritt und auch dann nur in der Größe wie Groß die Unterschiede zwischen den beiden Subvolumes sind.
Snapshots resultieren nicht in Performance-Nachteilen, weil BTRFS Copy-on-write arbeitet, sprich Änderungen an bestehenden Daten werden sowieso immer in neue Sektoren geschrieben, statt die bestehenden Sektoren zu überschreiben, bei einem Snapshot werden die Originaldaten einfach nicht überschrieben, die Performance bleibt gleich, weil sowieso irgendwohin geschrieben werden muss.

Syntax: btrfs subvolume snapshot Quellpfad Zielfpfad


Beispiel: btrfs subvolume /home /media/backup/home_2015_03_04

Legt ein snapshot (subvolumen) mit den Daten von /home nach /media/backup/home_2015_03_04 an.
In dem Beispiel wird davon ausgegangen, dass /home ein Subvolumen auf der Partition ist, welche unter /media/backup gemountet ist.
ls auf /media/backup würde danach so aussehen:
home home_2015_03_04

Snapshots können nur auf innerhalb des gleichen Btrfs-Dateisystems gemacht werden - Quelle und Ziel müssen auf dem gleichen Btrfs-Dateisystem liegen (zum Beispiel der gleichen Partition).

Enthält ein Subvolume weitere Subvolumes, so sind die weiteren Subvolumes nicht Teil des Snapshots

restore

btrfs-convert

Syntax: btrfs-convert Device

Hinweis: Nach dem Convert befindet sich auf dem Dateisystem in der Wurzel ein Snapshot welches ein Image des vorhergehenden Dateisystems enthält.
Darüber lässt sich das Convert mit der Option „-r“ rückgängig machen.
Es kann dadurch passieren das nach dem Convert kein Speicherplatz mehr frei ist - das Image/der Snapshot kann einfach gelöscht werden.

btrfsck

Linux-Mint/Ubuntu

Ubuntu/Mint erstellen innerhalb des Btrfs-Dateisystems ein Subvolume, es wird also in keinem Fall (egal welcher Mountpoint) direkt in das btrfs-Dateisystem geschrieben.
Die Namen sind jeweils @Name des Mount-Points.
„/“ ist „@“.

Infos