Wie überprüfe ich, ob eine Dateikopie reflink / CoW ist?

8

Ich spiele mit btrfs, was cp --reflinkdas Kopieren beim Schreiben ermöglicht. Andere Programme, wie z. B. lxc-clone, können diese Funktion ebenfalls verwenden. Meine Frage ist, wie man erkennt, ob eine Datei eine CoW einer anderen ist. Wie bei Hardlink kann ich an der Inode-Nummer erkennen.

Wu Yongzheng
quelle

Antworten:

5

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 ioctlDocumentation/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 filefragDienstprogramm die Ausmaße mit -v anzeigen. Außerdem werden btrfs-debug-treediese 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:

pwaller
quelle
Gute Antwort! Wie würden Sie btrfs-debug-treedie Ausmaße eines bestimmten Dateinamens auflisten?
Tom Hale
4

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.

pwaller
quelle