Wie erweitere ich btrfs-Metadaten?


9

Meine btrfsMetadaten werden voll. (Ich erstelle stündliche Schnappschüsse mit btrbk.)

Wie kann ich den den Metadaten eines btrfsDateisystems zugewiesenen Speicherplatz vergrößern / erweitern ?

Oder wird es automatisch erweitert?


Verwenden Sie eine Partition nur für Backups?
Rui F Ribeiro

1
Es ist Subvolume @homegemountet /home, mit btrbkBackups in Subvolume btrbk-snap. Für ein Dateisystem, das bis zu 2 ^ 64 Snapshots unterstützt, würde ich erwarten, dass es eine Möglichkeit bietet, die Metadatengröße zu erhöhen ...
Tom Hale

Schauen Sie sich den Befehl btrfs balance an: btrfs.wiki.kernel.org/index.php/Manpage/btrfs-balance
Emmanuel Rosa

@ EmmanuelRosa habe ich. Welchen Teil halten Sie für nützlich?
Tom Hale

In einer Sekunde wird das Neuausgleichen der Metadaten erörtert. Vielleicht können Sie mit dem richtigen Filter mehr Speicherplatz für Metadatenblöcke gewähren.
Emmanuel Rosa

Antworten:


7

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 btrfsmehr Speicherplatz zugewiesen wurde, als er benötigt, kann dies neu verteilt werden. Dies wird balancein btrfs -ing genannt.

Unter der Annahme, dass auf den Sicherungsblockgeräten des / der Sicherungsblockgeräte genügend Speicher vorhanden ist, btrfsweist 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 40GBGerä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=alwaysOption des cpBefehls.

$> 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 --reflinkwenig 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 btrfswurde 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 btrfskann 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 btrfsDateisystem sichern, ist nicht mehr möglich (addieren Sie einfach die Gesamtsummen der Zuweisung, 38,12 G + 1,55 G + .. ~ = 40 GB).

Da dem dataTeil 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 btrfsZuweisung 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 btrfsEntwickler 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 btrfsKnotengröße hingewiesen, der etwas beeinflusst, wie schnell Metadaten zunehmen werden. Die Knotengröße wird (wie in der anderen Antwort erwähnt) zum mkfs.btrfsZeitpunkt 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.


1

Laut den FAQ im btrfs-Wiki ist dies nicht möglich und wird wahrscheinlich nicht implementiert.

Kann ich die Blockgröße von Metadaten ändern, ohne das Dateisystem neu zu erstellen?

Nein, der an mkfs.btrfs -n SIZE übergebene Wert kann nach dem Erstellen des Dateisystems nicht mehr geändert werden. Eine Sicherung / Wiederherstellung ist erforderlich. Beachten Sie, dass dies wahrscheinlich nie implementiert wird, da größere Aktualisierungen der Kernfunktionalität erforderlich wären.

Sie können das vorhandene btrfs-Dateisystem auf ein neues mit einem größeren Dateisystem migrieren -n SIZE. Möglicherweise können Sie es dann mithilfe von btrfs RAID und balance zum vorhandenen Dateisystem hinzufügen und dann das alte Dateisystem entfernen.

Siehe auch den Abschnitt über fast volle Laufwerke .


2
Es gibt einen Unterschied zwischen dem nodesize (die , wie Sie Zustand kann nur einmal bei Erzeugen von Dateisystemen gesetzt werden) und die Metadaten Größe, die imho ist das, was btrfs filesystem df /Befehle Ausgangsleitung Metadata, single: total=xxGiB, used=xxxdarstellt.
Menschlichkeit und

Worauf willst du hinaus? Sicher gibt es einen Unterschied, aber es ist keine Ansichtssache. -nLegt die Größe jedes Metadatenblocks fest und btrfs filesystem dfzeigt den von diesen Blöcken belegten Speicherplatz an. Wenn der ursprüngliche Postautor zu viel Speicherplatz für Metadaten im Vergleich zu tatsächlichen Daten hat, sollte die Größe von verringert werden -n, damit Metadatenblöcke eine geringere Mindestgröße haben (weniger Speicherplatz, aber mehr Fragmentierung).
Etskinner

3
Das OP fragt, wie "der den Metadaten zugewiesene Speicherplatz vergrößert / erweitert werden soll", daher -nlautet Ihre Antwort "Es ist unmöglich, die Knotengröße ( Option) festzulegen" imho und nicht auf den Punkt. Da er weiter fragt "oder [der zugewiesene Speicherplatz für Metadaten] wird er automatisch erweitert?", Deutet er darauf hin, dass es nicht die Knotengröße ist, sondern der zugewiesene Speicherplatz, an dem er interessiert ist. Die Antwort sollte daher "Ja" sein. Sie haben natürlich Recht und weisen darauf hin, dass die -nEinstellung die Metadatengröße indirekt beeinflusst, aber die Frage scheint eher auf den zugewiesenen Speicher für Metadaten gerichtet zu sein, nicht auf die Größe der einzelnen Metadatennoten ....
humanityANDpeace

... sagen wir zum Beispiel, dass 100 G nicht genutzter Speicherplatz auf dem Backing-Block-Gerät vorhanden sind, und falls der zugewiesene / zugewiesene Speicher für Metadaten automatisch erweitert wird (wie das OP zu Recht angenommen hat). Mit btrfsaber es ist nicht uncommen, dass alle Trägereinrichtungen / Speicher hat bereits Daten blockgroups alloted worden, was bedeutet , dass neben freiem Speicher (für Daten selbst), „keinen Platz“ Fehler erzeugt werden. Der Benutzer muss daher einige versuchen btrfs balance, die, wenn in anderen Segmenten noch Speicherplatz vorhanden ist, diesen neu verteilen können, um den fehlenden Speicherplatz des Metadatenteiles zu vergrößern.
Menschlichkeit und
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.