Nochmal ein paar Gedanken zum Thema von mir:
Ceph vs btrfs/ZFS
Wenn man einen ProxmoxVE-Cluster aufbauen möchte, dann ist Ceph imho das Mittel der Wahl, weil es das ist, was man braucht (Replikation, Netzwerkfähigkeit, Redundanz, Flexibilität). Natürlich hat Ceph auch höhere Anforderungen, d. h. ist teuerer von der benötigten Hardware. (Min. 10 GbE Netzwerk. Wahrscheinlich braucht man SSDs, wenn man darauf VMs betreiben will.) Insofern ist Ceph da btrfs/ZFS deutlich überlegen, bzw. es ist einfach etwas Anderes: Netzwerk-Storage vs. Local-Storage. Ein weiterer Vergleich lohnt da nicht. Im Rahmen dieses Beitrages gehe ich da also nicht weiter darauf ein. btrfs/ZFS kommt dann eher für Einzelsysteme in Betracht.
zu btrfs
RAID5/6
Ich habe das jetzt mal gelesen. Da steht: Es wird klar davon abgeraten. Bei einem unsauberen herunterfahren hat man vermutlich Datenverlust. So etwas möchte ich weder geschäftlich produktiv noch privat haben, außer für Daten, die anderweitig leicht neu erstellt werden können. Da sind die zahlreichen positiven Erfahrungsberichte im Internet, dass es ohne Stromausfall oder sonstigen Absturz sauber läuft für mich vollkommen unerheblich.
RAID-Level raid1c3, raid1c4
Diese Raidlevel des mirroring sind das Alleinstellungsmerkmal von btrfs. raid1 speichert Daten 2-fach auf 2 verschiedenen Datenträgern. raid1c3 3-fach auf 3 verschiedenen Datenträgern und raid1c4 4-fach auf 4 verschiedenen Datenträgern. Wer also erhöhte Redundanzwünsche hat, der hat in btrfs das gefunden, was er braucht.
Flexibilität von btrfs
btrfs ist wie schon geschrieben sehr flexibel in der Möglichkeit, Formate und Profile im laufenden Betrieb zu rekonfigurieren. Besonders interessant ist der Rebalance, der möglicherweise bei ZFS zum Problem werden könnte, weil es dort dies Möglichkeit nicht gibt und man darauf angewiesen ist, dass ZFS das selbst im Laufe der Nutzung ausbalanciert bekommt. Aber wirklich bringen tut einem die Flexibilität aus meiner Sicht aktuell noch nichts. Wenn man bei ZFS die Formate RAIDZ1/2/3 weglässt, dann bekommt man Erweiterungen und Reduktionen von Arrays damit auch wunderbar hin, also genau das gleiche, was auch btrfs im Moment bietet.
Weiterhin hat man gerade bei Proxmox VE mit ZFS noch weitere Möglichkeiten für Flexibilität - auch mit RAIDZ1/2/3. Denn hier kann man z. B. virtuelle Maschinen per LiveMigration auf ein anderes Storage ziehen und kann so also u. U. problemlos eine neue RAIDZ-Konfiguration in Betrieb nehmen.
Ein Vorteil von btrfs ist das Verwenden von unterschiedlichen Datenträgergrößen. Das Verständnis von raid1 bei btrfs ist hier nicht: Spiegelung zweier Datenträger, sondern Speicherung von 2 Kopien eines Blockes (Chunk) auf 2 verschiedenen Datenträgern. Das wirkt sich vor allem bei größeren Datenträgerzahlen positiv aus. Hat man nur 2 Festplatten z. B. 4 TB und 8 TB, dann kann man hier mit "raid1" natürlich auch nur 4 TB insgesamt speichern.
Besonderheit von btrfs bei Ausfall von Datenträgern
Die Besonderheit von btrfs ist hier, dass btrfs, wenn es das eingestellte Format nicht mehr erfüllen kann, dass es dann Datenblöcke im Single-Format schreibt. D. h. wenn eine Platte ausfällt, und es sind nicht mehr genügend Platten vorhanden - beispielsweise bei einem raid1 mit 2 Platten, wovon eine ausfällt, dann kann btrfs die Zusicherung von raid1 nicht mehr erfüllen: 2 Kopien der Daten auf unterschiedlichen Datenträgern. Dann schreibt es jetzt halt Single-Blöcke, ohne Redundanz. Führt man den btrfs replace mit der neuen Platte aus, wird dann wieder im raid1-Format weitergeschrieben. Aber: Die während des Ausfalls geschriebenen Single-Blöcke sind immer noch da! D. h. keine Redundanz dafür.
Das sieht man bei der Ausgabe von ...
Code:
# btrfs filesystem df /mountpoint
...
WARNING: Multiple block group profiles detected, see 'man btrfs(5)'
WARNING: Data: single, raid1
Das muss man reparieren, z. B. damit:
Code:
btrfs balance start -mconvert=raid1 -dconvert=raid1 /mountpoint
Wenn man das nicht macht und man tauscht irgendwann mal eine Platte aus, auf der Single-Blöcke sind, dann war's das. Dateisystem verloren - verständlicherweise. Solche multiple block group profiles sollte man unbedingt vermeiden um nicht aus Versehen irgendwann einen Datenverlust zu erleben. Am Besten im Monitoring entsprechende Checks umsetzen.
In der Vergangenheit gab es im Bezug dazu noch einen Bug bzw. eine Entscheidung der Entwickler des Dateisystems, was IMO den Ruf des Dateisystems nachhaltig beschädigt hat, weil sehr viele Personen davon betroffen waren: Wenn ein System beim mounten - wie hier beschrieben - gemischte Formate aufwies, dann haben die btrfs-tools das Dateisystem als unrettbar zerstört angesehen und enstprechend geflaggt. Das Dateisystem wurde somit unwiderruflich read-only gesetzt und konnte somit nur durch backup, mkfs und restore wieder hergestellt werden. Dieser Bug wurde Ende 2017 gefixt. Jetzt kann ein Dateisystem auch mit gemischten Formaten ganz normal eingehängt werden.
Geschwindigkeit
Üblicherweise höre ich von btrfs-Begeisterten, dass btrfs etwas langsamer ist als andere Dateisysteme. Besonders die btrfs-raid10 Variante soll deutlich langsamer als ein tradionelles RAID-10 sein bzw. ein ZFS striped mirror.
Lizenzierung
ZFS ist unter der CDDL lizensiert, während btrfs unter der GPL steht. Alleine deswegen findet ZFS ohne Lizenzänderung vermutlich
niemals Eingang in die großen Linux-Distributionen. Die entsprechende Lücke, ZFS als Root-FS einsetzen zu können, wird hier nur durch den Einsatz von ProxmoxVE geschlossen, die einen entsprechenden Installer zur Verfügung stellen.
Native Integration
btrfs fügt sich in Sachen Konformität als normales Dateisystem ein, so wie auch die anderen Dateisysteme. Eintrag in fstab. Mount-Optionen. Spezifische btrfs-Attribute für Dateien und Verzeichnisse. ZFS ist da ein Fremdkörper, der alles auf seine eigene Art und mit seinen eigenen Tools umsetzt.
Andere Leistungsmerkmale
Was beide, also sowohl ZFS als auch btrfs, können sind Snapshots und Komprimierung. ZFS hat ansonsten noch die Verschlüsselung integriert. Bei btrfs spricht da nichts dagegen, dass man btrfs auf gängigen OSS-Verschlüsselungslösungen (LUKS) aufsetzt. Ebenso unterstützen beide Checksummen. Beide können Unterdateisysteme anlegen.
Persönliches Fazit
Dinge unter btrfs waren in der Vergangenheit mitunter übel, aber sie wurden besser. Aktuell sehe ich noch keinen großen Vorteil dabei, btrfs einzusetzen, es sei denn, man möchte die Formatoptionen für höhere Redundanzlevel nutzen. Ansonsten gibt es für alle Anwendungsfälle bessere Optionen. Trotzdem sehe ich btrfs schon fast gleich auf mit ZFS. Es kann fast für die gleichen Dinge eingesetzt werden, wenn es auch nicht die beste/performanteste Wahl ist.
Ich habe hier auch einige Themen nicht angeschnitten, weil ich diese persönlich nicht nutze (ZVOLs, cp --reflinks, ...).
Insgesamt habe ich bei btrfs ein besseres Bauchgefühls zur Qualität der technischen Umsetzung des Dateisystems. Insofern bin ich bei btrfs optimistischer, was die Zukunft angeht. Ich habe jetzt schon wiederholt erlebt, wie Dinge in btrfs sich gut entwickelt haben, wo ich vorher nur am Kopfschütteln gewesen bin. (btrfs konnte irgendwann dann mal Snapshots - aber keinen Rollback. Aussage ob das irgendwann kommt: keine wahrgenommen. wtf?)