Gute Frage. Es sieht so aus, als ob es derzeit keine einfachen Möglichkeiten gibt, dies auf hoher Ebene zu sagen.
Ein Problem besteht darin, dass eine Datei möglicherweise nur einen Teil der Daten über Copy-on-Write freigibt. Dies wird als physische Ausdehnung bezeichnet, und einige oder alle physischen Ausdehnungen können von CoW-Dateien gemeinsam genutzt werden.
Es gibt nichts Analoges zu einem inode
, das Ihnen im Vergleich zwischen Dateien sagen würde, dass die Dateien die gleichen physischen Ausmaße haben. (Bearbeiten: siehe meine andere Antwort ).
Die Antwort auf niedriger Ebene lautet, dass Sie den Kernel fragen können, welche physischen Speicherbereiche für die Datei verwendet werden, indem Sie das verwenden , was in dokumentiert ist . Wenn alle physischen Speicherbereiche gleich sind, muss die Datei im Prinzip denselben zugrunde liegenden Speicher gemeinsam nutzen.FS_IOC_FIEMAP
ioctl
Documentation/filesystems/fiemap.txt
Nur wenige Dinge bieten eine Möglichkeit, diese Informationen auf einer höheren Ebene zu betrachten. Ich habe hier einen Go-Code gefunden . Anscheinend soll das filefrag
Dienstprogramm die Ausmaße mit -v anzeigen. Außerdem werden btrfs-debug-tree
diese Informationen angezeigt.
Ich würde jedoch Vorsicht walten lassen, da diese Dinge in der Natur für diesen Zweck möglicherweise wenig Verwendung gefunden haben. Sie könnten Fehler finden, die Ihnen falsche Antworten geben. Achten Sie daher darauf, dass Sie sich bei der Entscheidung über Vorgänge, die zu Datenkorruption führen können, auf diese Daten verlassen.
Einige verwandte Fragen:
btrfs-debug-tree
die Ausmaße eines bestimmten Dateinamens auflisten?Nach meiner vorherigen Antwort habe ich gerade eine Veröffentlichung veröffentlicht
fienode
, die einen SHA1-Hash der physischen Ausmaße der Datei berechnet und zum Auffinden einiger (identischer) Reflink-Kopien verwendet werden kann. Beachten Sie jedoch, dass es einige Einschränkungen gibt (siehe Dokumentation ). BTRFS hat beschlossen, einige, aber nicht alle physischen Ausmaße einer von mir erstellten Refink-Kopie ohne Provokation oder Warnung zu ändern, wodurch sich der Wert ändert.quelle