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


8

cp --reflinkコピーオンライトが可能なbtrfsを使用しています。などの他のプログラムlxc-cloneもこの機能を使用する場合があります。私の質問は、ファイルが別のCoWかどうかを確認する方法ですか?ハードリンクの場合と同様に、iノード番号からわかります。

回答:


5

良い質問。現在、簡単な高レベルの方法を伝える方法はないようです。

1つの問題は、ファイルがコピーオンライトを介してデータの一部のみを共有する可能性があることです。これは物理エクステントと呼ばれ、物理エクステントの一部 または すべてがCoWファイル間で共有される場合があります。

inodeファイル間で比較すると、ファイルが同じ物理エクステントを共有していることを示すものに類似するものはありません。(編集:私の他の回答を参照しください)。

低レベルの答えは、物理エクステントを使用してファイルに使用されているカーネル尋ねることができるということですが、中に文書化します。原則として、すべての物理エクステントが同じである場合、ファイルは同じ基礎となるストレージを共有している必要があります。FS_IOC_FIEMAP ioctlDocumentation/filesystems/fiemap.txt

この情報をより高いレベルで見る方法を実装しているものはほとんどありません。ここにいくつかのgoコードを見つけまし。どうやら、filefragユーティリティは-vでエクステントを表示することになっています。また、btrfs-debug-treeこの情報を表示します。

ただし、これらのことは実際にはほとんど使用されていなかった可能性があるため、誤った答えを与えるバグを見つける可能性があるので、注意してください。

関連する質問:


正解です。btrfs-debug-tree与えられたファイル名のエクステントをリストするにはどのように使用しますか?
トム・ヘイル

4

私の以前の答えに加えてfienode、ファイルの物理エクステントのSHA1ハッシュを計算し、いくつかの(同一の)reflinkコピーを見つけるために使用できるようになりました。ただし、注意が必要です(ドキュメントを参照)。BTRFSは、挑発や警告なしに作成したrefinkコピーの物理エクステントのすべてではなく一部を変更することを決定したため、値が変更されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.