Ich habe mein Btrfs-Dateisystem mit Bedup dedupliziert, daher sind jetzt alle doppelten Dateien (über einer bestimmten Größe) "Reflink" -Kopien.
Gibt es eine Möglichkeit, unter Berücksichtigung eines Dateinamens zu sehen, welche anderen Dateien dieselben Reflinks sind?
btrfs
deduplication
Peter Smit
quelle
quelle
filefrag -v
alle Dateien ausführen und gemeinsame Bereiche finden.sync
besonders ausgeben, wenn die Flaggen unknown_loc oder delalloc zeigenfilefrag -v
, vergleichen Sie,filefrag -v | grep -ve inline -e unknown_loc -e delalloc
da diese nicht erneut verknüpft werden können. Sie werden einen weiteren Hinweis darauf bemerken, dass der "physische Offset" für diese immer 0 ist (obwohl sich natürlich nicht alle am Anfang des Blockgeräts befinden)Antworten:
Der springende Punkt bei einem CoW-Dateisystem (Copy-On-Write) wie btrfs ist, dass der Inhalt mehrerer Versionen einer Datei effizient gemeinsam genutzt werden kann. Sie können eine Datei also als eine Sammlung von Bereichen mit Inhalten sehen, in denen der Inhalt möglicherweise von anderen Dateien gemeinsam genutzt wird oder nicht. Oder durch andere Versionen der Datei. Die Implementierung ähnelt eher einem Erweiterungsbaum, in dem Erweiterungen gemeinsam genutzt werden können.
Für die Deduplizierung wird derselbe Mechanismus verwendet, der beim Schreiben einer Änderung an einer Datei (und beim Erstellen einer neuen Version dieser Datei) funktioniert. Die Implementierung wird unter https://github.com/g2p/bedup beschrieben :
Die Implementierung im Kernel erfolgt (zum Beispiel) unter http://lxr.free-electrons.com/source/fs/btrfs/ioctl.c#L2843 ; Der Kommentar macht deutlich, dass es nicht darum geht, die Datei neu zu flinken, sondern um Bereiche:
Es ist also nicht die Datei, die erneut verknüpft wird, sondern der Bereich, der gemeinsam genutzt wird. Eine neue Datei könnte auch erstellt worden sein, indem der Bereich mit mehreren Dateien geteilt wurde. Oder über mehrere Volumes hinweg geteilt werden. Oder (nicht sicher, ob dies derzeit unterstützt wird) sogar denselben Bereich mehrmals in derselben Datei zu haben;)
Daher gibt es kein übergeordnetes Tool zum Suchen von Dateien, die die gesamte Datei gemeinsam nutzen, da dies ein abgeleitetes Konzept ist. Natürlich wäre es möglich, Unterstützung dafür zu schreiben, aber soweit ich weiß, ist das nicht der Fall ...
quelle
Ich habe gerade ein Programm namens
fienode
(← Link) veröffentlicht, das einen SHA1-Hash der physischen Ausmaße einer Datei berechnet. Identische CoW-Kopien haben denselben Hash.Im Prinzip können Sie dies für alle Dateien im Dateisystem ausführen und dann nach identischen Hashes suchen.
Hier finden Sie auch eine ausführlichere Antwort, in der erläutert wird, warum dies erforderlich ist.
Beachten Sie jedoch, dass es BTRFS frei steht, die physischen Ausmaße zu ändern. Ich habe beobachtet, dass eine große reflinked Datei ihre physischen Ausdehnungen ohne Provokation ändert, wodurch sich die
fienode
Ausgabe unterscheidet, obwohl die Mehrheit der physischen Ausdehnungen noch gemeinsam genutzt wurde.quelle