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 Deduplizierung wird mithilfe einer Btrfs-Funktion implementiert, mit der Daten von einer Datei in die andere geklont werden können. Die geklonten Bereiche werden auf der Festplatte gemeinsam genutzt, wodurch Platz gespart wird.
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:
2843 /**
2844 * btrfs_clone() - clone a range from inode file to another
2845 *
2846 * @src: Inode to clone from
2847 * @inode: Inode to clone to
2848 * @off: Offset within source to start clone from
2849 * @olen: Original length, passed by user, of range to clone
2850 * @olen_aligned: Block-aligned value of olen, extent_same uses
2851 * identical values here
2852 * @destoff: Offset within @inode to start clone
2853 */
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 ...
filefrag -v
alle Dateien ausführen und gemeinsame Bereiche finden.