Btrfs/de

Btrfs ist Article description::ein copy-on-write (CoW) [[filesystem für Linux, welches die Implementierung erweiterter Funktionen anstrebt und einen Fokus auf Fehlertoleranz, Reparatur und einfache Administration legt.]] Während es von Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO, und vielen anderen gemeinsam Entwickelt wird, ist btrfs unter der GPL lizenziert und ist für Beiträge offen.

Merkmale
Ext4 ist sicher, stabil und kann große Dateisysteme mit Extents handhaben, also warum sollte man wechseln? Während es richtig ist, dass Btrfs immer noch als experimentell angesehen wird und dessen Stabilität noch wächst, kommt es dessen Übernahme als Standarddateisystem für Linux nahe. Manche Linuxdistributionen haben bereits angefangen, dazu zu wechseln mit deren neuesten Veröffentlichungen. Btrfs hat mit ZFS einige erweiterte Features gemeinsam, welche auch das ZFS-Dateisystem bei BSD-Distributionen und NAS-Geräten so weitverbreitet gemacht haben.


 * Copy on Write (CoW) und snapshotting - Macht das erstellen eines inkrementellen Backups unproblematisch, sogar von einem stark verwendeten Dateisystem oder einer Virtuellen Maschine (VM).
 * Dateilevel-Prüfsummen - Die Metadaten jeder Datei beinhalten eine Prüfsumme, die zum Erkennen und Reparieren von Fehlern verwendet wird.
 * Kompression - Dateien können auf die Schnelle komprimiert und dekomprimiert werden, was die Leseperformance steigert.
 * Auto-Defragmentierung - Die Dateisysteme werden von einem Thread im Hintergrund verwaltet während sie benutzt werden.
 * Subvolumes - Dateisysteme können sich einen einzelnen Speicherpool teilen anstatt auf deren eigenen Partition zu sein.
 * RAID - Btrfs hat dessen eigene Implementierung von RAID, also wird LVM oder nicht für RAID benötigt. Derzeit sind RAID 0, 1 und 10 unterstützt; RAID 5 und 6 werden als Unstabil angesehen.
 * Partitionen sind optional - Obwohl Btrfs mit Partitionen arbeitet, kann es auch direkt auf Rohlaufwerken benutzt werden.
 * Datendeduplizierung - Es gibt bisher nur limitierte Unterstützung für Datendeduplizierung; jedoch wird diese eventuell eine Standardfunktion von Btrfs werden. Dies ermöglicht Btrfs Platz zu sparen, in dem Dateien per binary diffs verglichen werden.

In der Zukunft werden geclusterte Dateisysteme für deren Objektspeicher aktiv nutzen von copy on write und anderen erweiterten Features von Btrfs machen. Ceph ist ein Beispiel eines geclusterten Dateisystem, welches sehr vielversprechend aussieht und aus Btrfs nutzen ziehen kann.

Kernel
Aktiviere folgende Kerneloption, um Btrfs-Unterstützung einzuschalten:

Emerge
Das Paket beinhaltet die Werkzeuge, die zum Arbeiten mit dem Btrfs-Dateisystem nötig sind.

Bedienung
Lange Btrfs-Befehle zu tippen kann sehr schnell mühsam werden. Jeder Befehl kann (außer dem grundlegenden -Kommando) auf einen sehr kurzen Satz an Anweisungen reduziert werden. Diese Methode ist hilfreich, wenn man über die Kommandozeile arbeitet und um dort die Menge der getippten Zeichen zu reduzieren.

Zum Beispiel zeigt folgender ausgeschriebene Befehl wie das Dateisystem defragmentiert werden kann, welches unter befindlich ist:

Kürzen Sie alle längeren Befehle die folgen, indem Sie alle auf deren eindeutigen, kürzesten Prefix reduzieren. In diesem Kontext wird mit "eindeutig" gemeint, dass es keine "anderen" -Befehle gibt, die sich mit dem getrimmten Befehl überschneiden. Die gekürzte Version des obenstehenden Befehls ist:

Kein anderer Befehl von beginnt mit  ;   ist das Einzige. Dasselbe gilt für das Subkommando  innerhalb des  -Befehls.

Erstellung
Um ein Btrfs-Dateisystem auf der Partition zu erstellen:

Im obigen Beispiel müssen Sie lediglich  mit der Partitionszahl und   mit dem Laufwerksbuchstaben des Datenträgers austauschen, welches zu formatieren ist. Zum Beispiel können Sie folgenden Befehl anstoßen, um den dritten Datenträger des Systems mit Btrfs zu formatieren:

Einhängen
Nach der Erstellung können Dateisysteme auf verschiedene Weisen eingehängt werden:


 * - Manuelles Einhängen.
 * - Einhängepunkte in zu definieren ermöglicht das automatische Einhängen bei Systemstart.
 * Removable media - Automatisches Einhängen durch Aufruf (nützlich für USB-Geräte).
 * AutoFS - Automatisches Einhängen bei Zugriff auf das Dateisystem.

Konvertieren von Dateisystemen auf Basis von ext*
Es ist möglich mit dem -Dienstprogramm ext2, ext3 und ext4-Dateisysteme in Btrfs zu konvertieren.

Die folgenden Anweisungen unterstützen nur die Konvertierung von uneingehängten Dateisystemen. Um das Wurzeldateisystem zu konvertieren, muss man in ein Rescuesystem booten (SystemRescueCD funktioniert hierbei gut) und von dort aus die Befehle auf die Partition anwenden, auf der das Wurzeldateisystem liegt.

Stelle zuerst sicher, dass der Einhängepunkt nicht eingehängt ist:

Prüfen Sie die Integrität des Dateisystems mit dessen zugehörigen -Tool. Im nächsten Beispiel ist das Dateisystem ext4:

Verwende, um den mit ext4 formatierten Datenträger auf Btrfs zu konvertieren.

Stellen Sie sicher, dass in der Datei die Spalte, die das Dateisystem angibt hinter dem gerade umformatierten Datenträger von ext4 zu Btrfs geändert wird.

Defragmentierung
Ein weiteres Feature von Btrfs ist die Defragmentierung während der Datenträger online ist. Um ein Wurzeldateisystem mit Btrfs zu defragmentieren, führen sie folgendes aus:

Kompression
Btrfs unterstützt transparente Kompression mit den Kompressionsalgorithmen zlib, lzo und zstd (v5.1.0)

Es ist auch möglich, einzelne Dateien durch die Nutzung von Dateiattributen zu komprimieren.

Die Einhängeoption  schaltet das komprimieren aller neu erstellten Dateien als Standardverhalten ein. Um das gesamte Dateisystem erneut zu komprimieren, führen Sie folgenden Befehl aus:

Abhängig von der Prozessor- und Laufwerksleistung kann die Benutzung von lzo-Komprimierung den Gesamtdurchsatz verbessern.

Als Alternative zu lzo ist es auch möglich, den Kompressionsalgorithmus zlib oder zstd zu verwenden. Zlib ist langsamer, hat aber ein höheres Kompressionsverhältnis, während zstd ein gutes Verhältnis zwischen den beiden hat.

Um zlib-Kompression auf dem gesamten Dateisystem zu erzwingen:

Kompressionslevel
Seit der Kernelversion 4.15.0 kann das Kompressionslevel von zlib auf Level 1-9 gesetzt werden. Seit Kernelversion 5.1.0 kann zstd von Level 1-15 gesetzt weden. Zum Beispiel, um zlib zur Einhängezeit auf dessen maximales Kompressionslevel zu setzen:

Or to set minimal compression:

Or adjust compression by remounting:

The compression level should be visible in or by checking the most recent  output using the following command:

Compression ratio and disk usage
The usual userspace tools for determining used and free space like and  may provide inaccurate results on a Btrfs partition due to inherent design differences in the way files are written compared to, for example, ext2/3/4.

It is therefore advised to use the du/df alternatives provided by the btrfs userspace tool. In addition to that, The tool found in the sys-fs/compsize package can be helpful in providing additional information regarding compression ratios and the disk usage of compressed files. The following are example uses of these tools for a btrfs partition mounted under.

Multiple devices (RAID)
Btrfs can be used with multiple block devices in order to create RAIDs. Using Btrfs to create filesystems that span multiple devices is much easier than creating using since there is no initialization time needed for creation.

BTRFS handles data and metadata separately. This is an important factor to keep in mind when using a multi-device filesystem. It is possible to use separate profiles for data and metadata block groups. For example, metadata could be configured across multiple devices in RAID1, while data could be configured to RAID5. This is profile possible when using three or more block devices, since RAID5 requires a minimum of 3 block devices.

This type of profile offers the benefit of redundancy for metadata on each device and striping for data across devices, which increases read speeds. The drawback of this profile is more space than necessary is used for metadata, and write speeds are reduced for data blocks, since RAID5 uses a parity bit.

Creation
The simplest method is to use the entirety of unpartitioned block devices to create a filesystem spanning multiple devices. For example, to create a filesystem in RAID1 mode across two devices:

Conversion
Converting between RAID profiles is possible with the balance sub-command. For example, say three block devices are presently configured for RAID1 and mounted at. It is possible to convert the data in this profile from RAID1 to RAID5 with using the following command:

Conversion can be performed while the filesystem is online and in use. Possible RAID modes in btrfs include RAID0, RAID1, RAID5, RAID6, and RAID10. See the upstream BTRFS wiki for more information.

By device path
Block devices (disks) can be removed from multi-device filesystems using the btrfs device remove subcommand:

By device ID
Use the usage subcommand to determine the device IDs:

Next use the device ID to remove the device, in this case will be removed:

Subvolumes
As mentioned above in the features list, Btrfs can create subvolumes. Subvolumes can be used to better organize and manage data. They become especially powerful when combined with snapshots. Important distinctions must be made between Btrfs subvolumes and subvolumes created by Logical Volume Management (LVM). Btrfs subvolumes are not block level devices, they are POSIX file namespaces. They can be created at any location in the filesystem and will act like any other directory on the system with one caveat: subvolumes can be mounted and unmounted. Subvolumes are nestable (subvolumes can be created inside other subvolumes), and easily created or removed.

Create
To create a subvolume, issue the following command inside a Btrfs filesystem's name space:

Replace  with the desired destination and subvolume name. For example, if a Btrfs filesystem exists at, a subvolume could be created inside it using the following command:

List
To see the subvolume(s) that have been created, use the  command followed by a Btrfs filesystem location. If the current directory is somewhere inside a Btrfs filesystem, the following command will display the subvolume(s) that exist on the filesystem:

If a Btrfs filesystem with subvolumes exists at the mount point created in the example command above, the output from the list command will look similar to the following:

Remove
Subvolumes can be properly removed by using the  command followed by the path to the subvolume. All available subvolume paths in a Btrfs filesystem can be seen using the list command above.

As above, replace  with the actual path to the subvolume to be removed. To delete the subvolume used in the examples above, the following command would be issued:

Snapshots
Snapshots are subvolumes that share data and metadata with other subvolumes. This is made possible by Btrfs' Copy on Write (CoW) ability. Snapshots can be used for several purposes, one of which is to create backups of file system structures at specific points in time.

If the root filesystem is Btrfs, it is possible to create a snapshot using the  commands:

The following small shell script can be added to a timed cron job to create a timestamped snapshot backup of a Btrfs formatted root filesystem. The timestamps can be adjusted to whatever is preferred by the user.

Mounting
A subvolume can be mounted in a location different from where it was created, or users can choose to not mount them at all. For example, a user could create a Btrfs filesystem in and create  and  subvolumes. The subvolumes could then be mounted at and, with the original top level subvolume left unmounted. This results in a configuration where the subvolumes' relative path from the top level subvolume is different from their actual path.

To mount a subvolume, perform the following command, where  is the relative path of the subvolume from the top level subvolume, obtainable through the   command:

Similarly, one can update the filesystem tab to mount their Btrfs subvolumes like so:

Using with VM disk images
When using Btrfs with virtual machine disk images, it is best to disable copy-on-write on the disk images in order to speed up IO performance. This can only be performed on files that are newly created. It also possible to disable CoW on all files created within a certain directory. For example, using the command:

Clear the free space cache
It is possible to clear Btrfs' free space cache by mounting the filesystem with the  mount option. For example:

Btrfs hogging memory (disk cache)
When utilizing some of Btrfs' special abilities (like making many  copies or creating high amounts of snapshots), a lot of memory can be consumed and not freed fast enough by the kernel's inode cache. This issue can go undiscovered since memory dedicated to the disk cache might not be clearly visible in traditional system monitoring utilities. The utility (available as part of the  package) was specifically created to determine how much memory kernel objects are consuming:

If the inode cache is consuming too much memory, the kernel can be manually instructed to drop the cache by echoing an integer value to the file.

To be safe, and to help the kernel determine the maximum amount of freeable memory, be sure to run a before running the  commands below:

Most of the time Btrfs users will probably want to to reclaim just the slab objects (dentries and btrfs_inodes):

To clear the entire disk cache (slab objects and the page cache) use instead:

More information on kernel slabs can be found in this dedoimedo blog entry.

Einhängen von Btrfs schlägt fehl mit der Meldung: unknown filesystem type 'btrfs'
Die ursprüngliche Lösung von Tim auf Stack Exchange ermutigte zu folgender Lösung: Baue den Kernel manuell anstatt mit genkernel:

Btrfs root bootet nicht
Genkernel's initramfs lädt btrfs nicht so wie sie generiert wurde:

Kompiliere die Unterstützung für btrfs direkt in den Kernel anstatt eines Kernelmoduls oder Dracut, um die initramfs zu generieren.

Siehe auch

 * Btrfs snapshots - Skript, der Schnappschüsse erstellt sobald sich Dateien geändert haben
 * Btrfs/System Root Guide - Benutzen des Btrfs-Dateisystem als Sammlung von Subvolumes inklusive eines, welches als Wurzeldateisystem verwendet wird.
 * Btrfs native system root guide - Eine Alternativanleitung bezüglich der Nutzung eines Subvolumes auf einem Btrfs-Dateisystem als das Systemwurzeldateisystem.
 * Btrbk - Ein Backuptool für Btrfs-Subvolumes, welches Btrfs-spezifische Features benutzt, um einzelne Backups zu erstellen und diese auf bestimmte Backuporte zu übertragen.
 * Samba shadow copies - Benutzen von Samba um Schattenkopien als "Vorgängeversionen" auf Windowsclients anzeigen zu lassen.
 * Samba shadow copies - Benutzen von Samba um Schattenkopien als "Vorgängeversionen" auf Windowsclients anzeigen zu lassen.

Externe Ressourcen

 * https://wiki.debian.org/Btrfs - Beschreibung der Debian Wiki.
 * https://wiki.archlinux.org/index.php/Btrfs Btrfs-Artikel - Beschreibung der Arch Linux Wiki.
 * http://www.funtoo.org/BTRFS_Fun - BTRFS Fun auf der Funtoo Wiki.
 * http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html - Tipps und Tricks, um sehr spezifische Probleme des Btrfs-Dateisystems in manchen Situationen zu beheben.