Verstehen des Metadatennutzungsverhaltens in einem neu konvertierten BTRFS-Dateisystem

Verstehen des Metadatennutzungsverhaltens in einem neu konvertierten BTRFS-Dateisystem

Ich habe eine 5-TB-Festplatte mit 3,3 TiB (wie von berichtet du) an Mediendateien in 119.000 Dateien und Verzeichnissen; die durchschnittliche Dateigröße betrug etwa 28 MiB. Ich habe die ext4-Partition mit in btrfs konvertiert btrfs-convert. Der Vorgang dauerte 10,4 Stunden und war CPU-belastet. Direkt nach der Konvertierung:

# btrfs fi df /mnt/btrfs/
Data, single: total=3.03TiB, used=2.21TiB
System, single: total=32.00MiB, used=236.00KiB
Metadata, single: total=1.52TiB, used=1.10TiB

btrfs hat den gesamten Speicherplatz auf der Festplatte zugewiesen (3,03 + 1,52 TiB ≈ 5 TB) und anscheinend ~1 TiB Dateiinhalt in Metadatenblöcke gepackt (1,10 TiB verwendet). Das ist unerwartet, da nur sehr wenige meiner Dateien in die Blattknoten passen würden.

Die Standardlösung für die riesige Metadatenzuweisung besteht darin, die Metadaten neu auszugleichen. btrfs balance start -mdauerte 8,0 Stunden und war I/O-gebunden. Danach scheint btrfs nicht nur ungenutzte Metadatenblöcke freigegeben zu haben, sondern auch Dateiinhalte aus Metadatenblöcken in Datenblöcke verschoben zu haben.

# btrfs fi df /mnt/btrfs/
Data, single: total=3.32TiB, used=3.31TiB
System, single: total=32.00MiB, used=104.00KiB
Metadata, single: total=3.00GiB, used=2.18GiB

Kann mir jemand erklären, was hier passiert? Warum würden „Metadaten“ anfangs 1,10 TiB verbrauchen und warum würde es durch das Balancing auf 2,18 GiB reduziert? Verschiebt sich der btrfs balanceDateiinhalt von Metadatenblöcken in Datenblöcke?

Ich habe den Linux-Kernel 3.13.0-46 verwendet. Meine Dateien haben keine Hardlinks, Xattrs, SELinux-Kontexte oder ACLs. Ich habe die Komprimierung nicht aktiviert und das Ext4-Rollback-Image nicht gelöscht.

Antwort1

Erstens speichert der Konvertierungsprozess eine Kopie aller vorherigen Systemmetadaten in den neuen Metadaten, was auf großen Laufwerken viel Speicherplatz beanspruchen kann.

Zweitens ist der Konvertierungsprozess chaotisch und führt zu extrem großen Extents, da die Extents in EXT4 ebenfalls groß sind und BTRFS von Natur aus über ihre Größe verfügt.

Die zugewiesene Größe beträgt ungefähr das 1,5-fache der Größe der verwendeten Metadaten. Der Defragmentierungsprozess reduziert die Größe der verwendeten Metadaten, ändert jedoch nicht die Zuweisung. Es gibt auch eine Option für schlanke Bereiche, um die Metadaten weiter zu reduzieren. Dies ist jedoch auf Systemen mit vielen kleinen Dateien hilfreicher. Ihre Metadatenzuweisung beträgt weniger als ein Zehntel Prozent, was sehr wenig ist.

Der Balance-Befehl SOLL die Zuordnungsgröße auf einen neuen Wert basierend auf der aktuellen Metadatennutzung reduzieren, was er anscheinend richtig gemacht hat. Der Balance-Befehl soll nicht von Metadaten zu Daten wechseln, aber das könnte damit zu tun haben, dass sich die ursprüngliche EXT4-Metadatenbildkopie in der ursprünglichen Metadatenzuordnung befand und jetzt in Daten (ext2_saved-Subvolume) verschoben wurde. Überprüfen Sie die Größe des EXT4-Bilds, um festzustellen, ob es 1,1 TB beträgt. Unabhängig davon würde ich das Dateisystem defragmentieren.

Beachten Sie, dass das Ausführen von „balance“ ohne Defragmentierung zu Fehlern führen kann. Um Dateisystemproblemen vorzubeugen, werden neuere Kernel-Versionen empfohlen, insbesondere 3.17 und höher.

verwandte Informationen