Btrfs ist seit einigen Jahren für Linux verfügbar, sodass Sie vielleicht bereits damit vertraut sind. Wenn nicht, haben Sie möglicherweise Fragen dazu, insbesondere wenn Sie Fedora Workstation verwenden (Btrfs ist jetzt das Standarddateisystem). Dieser Artikel soll Ihnen helfen, sich mit ihm und seinen erweiterten Funktionen wie Copy-on-Write und Prüfsummen vertraut zu machen.
Btrfs, kurz für B-Tree Filesystem, ist eigentlich ein Dateisystem und ein Volume-Manager in einem. Es wird oft als Antwort auf ZFS gesehen, das 2005 in Solaris OS von Sun Microsystem eingeführt wurde und nun weitgehend durch eine Open-Source-Implementierung namens OpenZFS ersetzt wurde. Ubuntu Linux und FreeBSD verfügen oft über OpenZFS. Andere Beispiele mit ähnlichen Funktionen sind Red Hats Stratis und der Linux Logical Volume Manager (LVM).
Konfiguration
Um Btrfs auszuprobieren, habe ich die Fedora 33 Workstation ISO-Datei heruntergeladen und in einer neuen virtuellen Maschine (VM) installiert. Der Installationsprozess hat sich gegenüber früheren Versionen nicht geändert. Ich habe keine Einstellungen angepasst, einschließlich der Laufwerkspartitionierung und -formatierung, um ein genaues „out of the box“-Setup für dieses Tutorial beizubehalten. Sobald die VM betriebsbereit war, installierte ich den GNOME-Partitionseditor (GParted) und führte ihn aus, um eine schöne, fabrikneue Ansicht des Laufwerkslayouts zu erhalten.
gparted_btrfs.png
(Alan Formy-Duvall, CC BY-SA 4.0)
Von diesem Punkt an unterscheidet es sich nicht mehr sehr von dem, was Sie gewohnt sind; Tatsächlich können Sie das System normal verwenden und bemerken möglicherweise nicht einmal, dass das Dateisystem Btrfs ist. Mit dieser neuen Standardeinstellung können Sie jedoch mehrere coole Funktionen nutzen.
Untersuchen Sie das Btrfs-Dateisystem
Mir sind keine Btrfs-spezifischen grafischen Tools bekannt, obwohl einige seiner Funktionen in bestehende Datenträgerverwaltungstools integriert wurden.
Von der Befehlszeile aus können Sie sich das Btrfs-Format genauer ansehen:
# btrfs filesystem show
Label: 'fedora_localhost-live' uuid: f2bb02f9-5c41-4c91-8eae-827a801ee58a
Total devices 1 FS bytes used 6.36GiB
devid 1 size 10.41GiB used 8.02GiB path /dev/vda3
Btrfs-Labels ändern
Das erste, was mir auffiel, war das vom Installationsprogramm festgelegte Dateisystem-Label: fedora_localhost-live
. Dies ist ungenau, da es sich jetzt um ein installiertes System und nicht mehr um eine Live-CD handelt. Also habe ich es mit geändert btrfs filesystem label
Befehl.
Das Ändern eines Btrfs-Dateisystemlabels ist einfach:
# btrfs filesystem label /
fedora_localhost-live
# btrfs filesystem label / fedora33workstation
# btrfs filesystem label /
fedora33workstation
Btrfs-Subvolumes verwalten
Ein Subvolume scheint ein Standardverzeichnis zu sein, das von Btrfs verwaltet werden kann. Auf meiner neuen Fedora 33 Workstation gibt es mehrere Subvolumes:
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
Erstellen Sie ein neues Subvolume mit der btrfs subvolume create
Befehl oder löschen Sie ein Subvolume mit btrfs subvolume delete
:
# btrfs subvolume create /opt/foo
Create subvolume '/opt/foo'
# btrfs subvolume list /
ID 256 gen 2884 top level 5 path home
ID 258 gen 2888 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 276 gen 2888 top level 258 path opt/foo
# btrfs subvolume delete /opt/foo
Delete subvolume (no-commit): '/opt/foo'
Subvolumes ermöglichen Aktionen wie das Festlegen eines Kontingents, das Erstellen eines Snapshots und das Replizieren auf andere Standorte und Hosts. Wie können Systemadministratoren diese Funktionen nutzen? Wie wäre es mit Benutzer-Home-Verzeichnissen?
Fügen Sie einen Benutzer hinzu
Wie es seit jeher der Fall ist, wird beim Hinzufügen eines neuen Benutzerkontos ein Home-Verzeichnis erstellt, das das Konto verwenden kann:
# useradd student1
# getent passwd student1
student1:x:1006:1006::/home/student1:/bin/bash
# ls -l /home
drwx------. 1 student1 student1 80 Oct 29 00:21 student1
Traditionell ist das Home-Verzeichnis eines Benutzers ein Unterverzeichnis von /home
. Eigentum und Privilegien sind auf den Eigentümer zugeschnitten, es gibt jedoch keine speziellen Funktionen, um sie zu verwalten. Die Unternehmensserverumgebung ist ein weiteres Szenario. Häufig ist ein Verzeichnis für die Verwendung durch eine bestimmte Anwendung und ihren Benutzer reserviert. Sie können Btrfs nutzen, um diese Verzeichnisse zu verwalten und Einschränkungen darauf anzuwenden.
Um Btrfs-Subvolumes als Benutzer-Homes unterzubringen, gibt es eine neue Option für die useradd
Befehl: --btrfs-subvolume-home
. Obwohl die Manpages nicht aktualisiert wurden (zum Zeitpunkt dieses Schreibens), können Sie die Option sehen, indem Sie sie ausführen useradd --help
. Durch Übergeben dieser Option beim Hinzufügen eines neuen Benutzers wird ein neues Btrfs-Subvolume erstellt. Es funktioniert genauso wie die -d
Option zum Erstellen eines regulären Verzeichnisses:
# useradd --btrfs-subvolume-home student2
Create subvolume '/home/student2'
Verifizieren Sie den Benutzer mit getent passwd student2
, und es wird normal erscheinen. Führen Sie jedoch die btrfs subvolume
Befehl zum Auflisten von Subvolumes, und Sie werden etwas Interessantes sehen: das Home-Verzeichnis des neuen Benutzers!
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 272 gen 2459 top level 256 path home/student2
Untersuchen Sie das zweite Szenario einer Unternehmensserverumgebung. Angenommen, Sie müssen einen WildFly-Server in installieren /opt
und stellen Sie eine Java-Webanwendung bereit. Oft besteht Ihr erster Schritt darin, eine wildfly
Nutzer. Tun Sie dies mit dem neuen --btrfs-subvolume-home
Option zusammen mit der -b
Möglichkeit zu spezifizieren /opt
als Basisverzeichnis:
# useradd -b /opt --btrfs-subvolume-home wildfly
Create subvolume '/opt/wildfly'
Jetzt die wildfly
Der Benutzer kann sich anmelden und die Installation abschließen /opt/wildfly
.
Einen Benutzer löschen
Wenn Sie einen Benutzer löschen, möchten Sie manchmal die Dateien dieses Benutzers und das Home-Verzeichnis gleichzeitig löschen. Der userdel
Befehl hat die -r
Option dafür, und es löscht auch Btrfs-Subvolumes:
# userdel -r student2
Delete subvolume (commit): '/home/student2'
Legen Sie Kontingente für die Festplattennutzung fest
In einem meiner Informatikkurse führte ein Student ein C-Programm aus, das außer Kontrolle geriet und bis zum Ende auf die Festplatte schrieb /home
wurde auf dem Unix-System des Fachbereichs ausgefüllt! Der Server wurde nicht verfügbar, bis der Administrator den außer Kontrolle geratenen Prozess beendete und etwas Speicherplatz freigab. Dasselbe gilt für das obige Szenario; dass die Wildfly-Unternehmensanwendung eine wachsende Anzahl von Protokolldateien und Inhaltsspeichern für ihre Benutzer haben wird. Wie können Sie verhindern, dass ein Server stillsteht, weil die Festplatte voll ist? Das Festlegen von Beschränkungen für die Festplattennutzung ist eine gute Idee. Glücklicherweise unterstützt Btrfs dies durch Quoten.
Zum Konfigurieren von Kontingenten sind mehrere Schritte erforderlich. Der erste Schritt ist die Aktivierung quota
auf dem Btrfs-Dateisystem:
# btrfs quota enable /
Stellen Sie sicher, dass Sie die ID-Nummer der Quotengruppe (qgroup) jedes Subvolumes kennen, die von angezeigt wird btrfs subvolume list
Befehl. Jedes Subvolume benötigt eine zugeordnete qgroup basierend auf seiner ID-Nummer. Dies kann individuell mit erfolgen btrfs qgroup create
, aber bequemerweise bietet das Btrfs-Wiki den folgenden Befehl, um das Erstellen von qgroups für Subvolumes auf einem Dateisystem zu beschleunigen:
>btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} <path>
In einem frisch installierten Fedora 33-Workstation-System arbeiten Sie auf dem Root-Dateisystempfad, /
. Ersatz <path>
mit dem Root-Pfad:
# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /
Dann renne btrfs quota rescan
und werfen Sie einen Blick auf die neuen qgroups:
# btrfs quota rescan /
quota rescan started
# btrfs qgroup show /
qgroupid rfer excl
-------- ---- ----
0/5 16.00KiB 16.00KiB
0/256 272.04MiB 272.04MiB
0/258 6.08GiB 6.08GiB
0/265 16.00KiB 16.00KiB
0/271 16.00KiB 16.00KiB
0/273 16.00KiB 16.00KiB
Jetzt können Sie einer der qgroups ein Kontingent zuweisen, das wiederum auf das zugehörige Subvolume angewendet wird. Wenn Sie also die Nutzung des Home-Verzeichnisses von student3 auf 1 GB begrenzen möchten, verwenden Sie die btrfs qgroup limit
Befehl:
# btrfs qgroup limit 1G /home/student3
Bestätigen Sie das Kontingent für das spezifische Subvolume:
# btrfs qgroup show -reF /home/student3
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/271 16.00KiB 16.00KiB 1.00GiB none
Etwas andere Optionen zeigen alle qgroups und alle festgelegten Kontingente:
# btrfs qgroup show -re /
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/5 16.00KiB 16.00KiB none none
0/256 272.04MiB 272.04MiB none none
0/258 6.08GiB 6.08GiB none none
0/265 16.00KiB 16.00KiB none none
0/271 16.00KiB 16.00KiB 1.00GiB none
0/273 16.00KiB 16.00KiB none none
Andere Eigenschaften
Diese Beispiele vermitteln eine Vorstellung von den Funktionen von Btrfs. Lauf btrfs --help
um die vollständige Liste der Befehle anzuzeigen. Es gibt viele andere bemerkenswerte Fähigkeiten; Beispielsweise sind Snapshots und Senden/Empfangen zwei Dinge, die es wert sind, gelernt zu werden.
Abschließende Gedanken
Btrfs bietet viel Versprechen für die Bereitstellung eines erweiterten Dateisystem-Feature-Sets für Linux. Es war nicht das erste; Ich schreibe ZFS meine Einführung in diese Art von Dateisystem vor etwa 15 Jahren zu, aber Btrfs ist vollständig Open Source und nicht durch Patente belastet.
Ich empfehle, mit einer virtuellen Maschine oder einem Ersatzsystem zu beginnen, wenn Sie dieses Dateisystem erkunden möchten.
Ich würde gerne einige grafische Verwaltungsprogramme sehen, die für Systemadministratoren entwickelt wurden, die gerne in der GUI-Welt arbeiten. Glücklicherweise hat Btrfs eine starke Entwicklungsaktivität, wie die Entscheidung des Fedora-Projekts zeigt, es auf Workstation 33 zum Standard zu machen.