TL; DR Die Metadaten (wenn das btrfs nicht unter einem allgemeinen Platzmangel leidet) werden automatisch erhöht. In Fällen, in denen kein nicht zugewiesener freier Speicherplatz vorhanden ist, wird die automatische Erhöhung berücksichtigt. Wenn dem Datenteil jedoch btrfs
mehr Speicherplatz zugewiesen wurde, als er benötigt, kann dies neu verteilt werden. Dies wird balance
in btrfs -ing genannt.
Unter der Annahme, dass auf den Sicherungsblockgeräten des / der Sicherungsblockgeräte genügend Speicher vorhanden ist, btrfs
weist der Metadatenteil des Dateisystems - wie vom OP angenommen - automatisch Speicher zu, um die Metadaten zu erhöhen / zu erweitern.
Daher lautet die Antwort: Ja (vorausgesetzt, es gibt keine Bedingung für wenig Speicherplatz / freien Speicherplatz in der btrfs
) , dann werden die Metadaten automatisch erhöht.
(1) Wir sehen uns einige anfängliche Zuordnungseinstellungen der btrfs (auf einem 40GB
Gerät) an.
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.49GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.33GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
(2) Wie zu sehen ist, beträgt der zugewiesene Speicherplatz im Dateisystem zum Speichern von Metadaten 1,55 GB, von denen 1,33 GB, daher wird fast alles verwendet (dies kann eine Situation sein, wie sie im Fall des OP auftritt).
(3) Wir provozieren nun eine Erhöhung der hinzuzufügenden Metadaten. Dazu kopieren wir den Ordner / home mit der --reflink=always
Option des cp
Befehls.
$> cp -r --reflink=awlways /home /home.copy
(4) Da (wie wir annehmen, dass sich viele Dateien in / home befanden) viele neue Daten zum Dateisystem hinzugefügt wurden, verwendet das, da wir nur --reflink
wenig bis gar keinen zusätzlichen Speicherplatz für die tatsächlichen Daten verwenden, die Copy-on-Write-Mechanismus. Kurz gesagt, dem Dateisystem wurden hauptsächlich Metadaten hinzugefügt. Wir können also einen anderen Blick darauf werfen
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.65GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=2.78GiB, used=2.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
Wie zu sehen ist, verwendet der Raum für Metadaten zugeordnet , in dieser btrfs
wurde automatisch erweitert erhöht.
Da dies so automatisch geschieht, wird es normalerweise vom Benutzer nicht erkannt. Es gibt jedoch einige Fälle, meistens solche, in denen das gesamte Dateisystem bereits ziemlich voll ist. In diesen Fällen btrfs
kann es zu "Stottern" kommen und der zugewiesene Speicherplatz für die Metadaten kann nicht automatisch vergrößert werden. Der Grund wäre beispielsweise, dass den Teilen (Daten, System, Metadaten, GlobalReserve) bereits der gesamte Speicherplatz zugewiesen wurde. Verwirrenderweise könnte es dennoch sein, dass es scheinbaren Raum gibt. Ein Beispiel wäre diese Ausgabe:
$> btrfs filesystem df /
Data, single: total=38.12GiB, used=25.01GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
Wie zu sehen ist, ist das System alle 40GiB
, aber die Zuordnung ist etwas aus balance
, da die Metadaten (wie im OP-Fall) niedrig sind, obwohl noch Platz für die Daten der neuen Dateien vorhanden ist. Die automatische Speicherzuweisung für die Geräte, die das btrfs
Dateisystem sichern, ist nicht mehr möglich (addieren Sie einfach die Gesamtsummen der Zuweisung, 38,12 G + 1,55 G + .. ~ = 40 GB).
Da dem data
Teil des Dateisystems jedoch überschüssiger freier Speicherplatz zugewiesen wurde , kann es jetzt nützlich sein, die btrfs auszugleichen. Balance würde bedeuten, den bereits zugewiesenen Platz neu zu verteilen.
Im Falle des OP kann davon ausgegangen werden, dass aus irgendeinem Grund ein Ungleichgewicht zwischen den verschiedenen Teilen der btrfs
Zuweisung aufgetreten ist.
Leider kann der einfache Befehl sudo btrfs balance -dusage=0
, der im Prinzip leere Blöcke (für Daten zugewiesen) durchsuchen und einem besseren Benutzer zur Verfügung stellen sollte (dies wäre der fast erschöpfte Speicherplatz für Metadaten), fehlschlagen, da keine vollständig leeren Datenblöcke gefunden werden können.
Die btrfs
Entwickler empfehlen daher, das Nutzungslimit von "Wann sollten Datenblöcke neu angeordnet werden, um Speicherplatz zurückzugewinnen" sukzessive zu erhöhen?
Daher, wenn das Ergebnis von
$> sudo btrfs balance -dusage=0
Done, had to relocate 0 out of 170 chunks
zeigt keinen Umzug, sollte man etwas tun
$> sudo btrfs balance -dusage=5
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=10
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=15
Done, had to relocate 2 out of 170 chunks <--(success)
Die andere Antwort hat auf den Einfluss der btrfs
Knotengröße hingewiesen, der etwas beeinflusst, wie schnell Metadaten zunehmen werden. Die Knotengröße wird (wie in der anderen Antwort erwähnt) zum mkfs.btrfs
Zeitpunkt der Dateisystemerstellung nur einmal festgelegt . Theoretisch könnte man die Größe von Metadaten reduzieren, wenn es möglich wäre, auf einen niedrigeren Wert für die Knotengröße zu wechseln, wenn dies möglich wäre (ist es nicht!). Die Knotengröße kann jedoch nicht dazu beitragen, den zugewiesenen Metadatenbereich in irgendeiner Weise zu erweitern oder zu vergrößern. Stattdessen hätte es vielleicht nur geholfen, Platz zu sparen. Eine kleinere Knotengröße kann jedoch nicht garantiert werden, um die Metadatengröße zu verringern. In der Tat können einige Fälle zeigen, dass größere Knotengrößen die Baumdurchquerungslänge von btrfs verringern, da Notizen mehr "Links" enthalten können.