ファイルのコピーがreflink / CoWであることを確認する方法は?

ファイルのコピーがreflink / CoWであることを確認する方法は?

私はcp --reflink書き込み中にコピーを許可するbtrfsを使用しています。lxc-cloneこの機能は。私の質問は、ファイルが他のファイルのCoWであるかどうかをどうやって知ることができますか?ハードリンクと同様に、inode番号で知ることができます。

ベストアンサー1

良い質問。簡単で高レベルでわかる方法はないようです。

1つの問題は、ファイルが書き込み中にコピーを介してデータの一部のみを共有できることです。これを物理的範囲といい、一部 または みんなCoWファイル間で物理的な範囲の一部を共有できます。

inodeファイルを比較すると、ファイルが同じ物理範囲を共有していることを知らせることはありません。 (編集:参照私の他の答え)。

低レベルの答えは、次を使用してカーネルファイルにどの物理範囲が使用されているかを尋ねることができます。FS_IOC_FIEMAP ioctl今すぐに記録Documentation/filesystems/fiemap.txt。原則として、すべての物理スコープが同じ場合、ファイルは同じプライマリストレージを共有する必要があります。

より高いレベルでこの情報を表示する方法を実装することはほとんどありません。私は少し見つけました。ここにコードを入力してください。確かにfilefragユーティリティーは -v を使用して範囲を表示する必要があります。また、btrfs-debug-treeこの情報を表示します。

しかし、これらのことは実際にはあまり使われないかもしれないので注意を払う間違いを犯します。したがって、誤った回答を提供するエラーが見つかる可能性があるため、このデータに依存してデータにつながる可能性がある操作について決定を下すときに注意してください。腐敗。

いくつかの関連質問:

おすすめ記事