Wenn Sie den defragment
Abschnitt von öffnen btrfs-filesystem(8)
, sehen Sie die folgende bedrohliche Inschrift, die von den Entwicklern hinterlassen wurde:
Warnung: Durch die Defragmentierung mit Linux-Kernelversionen <3.9 oder ≥ 3.14-rc2 sowie mit stabilen Linux-Kernelversionen ≥ 3.10.31, ≥ 3.12.12 oder ≥ 3.13.4 werden die Ref-Links von COW-Daten (z. B. Dateien) aufgelöst kopiert mit
cp --reflink
, Schnappschüssen oder de-duplizierten Daten). Dies kann in Abhängigkeit von den unterbrochenen Ref-Links zu einer erheblichen Erhöhung der Speicherplatznutzung führen.
Das hört sich schrecklich an. Ein Verkaufsargument btrfs
ist die Fähigkeit, Schnappschüsse zu erstellen, ohne alles zu kopieren. Ich erstelle meistens schreibgeschützte Schnappschüsse.
Zählen die Dateien mit schreibgeschützten Snapshots auch als "COW-Daten" oder überlebt die Deduplizierung des übergeordneten Subvolumes, ohne dass der Speicherplatz aufgebläht wird?
quelle
Antworten:
Ja, Dateien in einem schreibgeschützten Snapshot gelten als COW-Daten und tragen dazu bei, dass der Speicherplatz durch Defragmentierung aufgebläht wird.
Wenn eine Defragmentierung auftritt, werden Daten aus den alten Extents in weniger neue Extents kopiert. Die neuen Ausmaße unterscheiden sich von den alten Ausdehnungen. Alle anderen Kopien der Datei (z. B. in Schnappschüssen) verweisen weiterhin auf die alten Speicherbereiche. Daher haben Sie Daten aufgebläht.
Es gibt einen langen Thread über die Defragmentierung auf der Mailingliste, der hier beginnt und einige interessante Punkte enthält.
quelle
btrfs
Experte).Btrfs defragmentiert nicht alle Reflinks
Nur die besonderen Fälle, auf die Sie hinweisen. Also, wenn Sie Subvolume haben
A
, und SchnappschüsseS1
undS2
dieser SubvolumeA
, dann läuft defrag auf nur SubvolumeA
wird die Reflinks zwischen ihm und den Schnappschüssen brechen, aberS1
undS2
teilen sich nach wie vor alle Daten , die sie miteinander ursprünglich waren. Wenn Sie dann einen dritten Schnappschuss von machenA
, werden Daten mitA
, aber nicht mitS1
oder geteiltS2
(weilA
keine Daten mehr mitS1
oder geteilt werdenS2
).Angesichts dieses Verhaltens haben Sie wiederum drei mögliche Fälle, wenn Sie über dauerhafte Schnappschüsse sprechen:
In diesem Fall besteht die einzige Möglichkeit darin, die Defragmentierung überhaupt nicht auszuführen .
A
in der obigen Erklärung) zu defragmentieren und dies nach einem Zeitplan zu tun, der mit der Rotation des Schnappschusses zusammenfällt. Die Idee ist,defragment
kurz bevor Sie einen Schnappschuss machen, und zwar mit einer Häufigkeit, die ein ausgewogenes Verhältnis zwischen Speicherplatznutzung und Leistung bietet. Wenn Sie diese Route wählen, beginnen Sie in der Regel damit, die Defragmentierung entweder monatlich durchzuführen, wenn Sie tägliche oder wöchentliche Schnappschüsse erstellen, oder, falls nicht, mit jedem vierten Schnappschuss, und passen Sie dann das Intervall an, je nachdem, wie sich dies auf Ihre auswirkt Raumnutzung.Quelle: Btrfs-Mailingliste , auf die von Spacedog verwiesen wird.
Btrfs Defragmentierung schreibgeschützt Schnappschuss
Aufgrund meiner Erfahrung mit Versuchen und Fehlern führte das Defragmentieren von Snapshots von btrfs (um die neue zstd-Komprimierung zu verwenden) zu 100% Exklusivität und 0,00 Byte gemeinsam genutzter Daten.
Vorher
btrfs defragment
:Nachher
btrfs defragment
:Freigegebene Daten gehen auf 0,00B zurück
quelle