Btrfsファイルシステムで特定のファイルのデータコピーを見つける方法は?

Btrfsファイルシステムで特定のファイルのデータコピーを見つける方法は?

bedupを使用してBtrfsファイルシステムの重複を削除したので、すべての重複ファイル(特定のサイズ以上)は「reflink」コピーです。

ファイル名が与えられたら、同じリンクで参照されている他のファイルを解決する方法はありますか?

ベストアンサー1

btrfsなどのCoW(記録中のコピー)ファイルシステムの鍵は、複数のバージョンのファイルの内容を効率的に共有することです。したがって、ファイルを他のファイルと共有したり共有したりしない可能性があるコンテンツを含む範囲の集合と考えることができます。または別のバージョンのファイルを介して。実装は、拡張を共有できる拡張ツリーに似ています。

ファイルに変更を書き込んでいる間(そのファイルの新しいバージョンを作成している間)、同じメカニズムが機能して重複排除を実行するために使用されます。この実装については後述する。https://github.com/g2p/bedup:

重複排除は、データをあるファイルから別のファイルに複製できるBtrfs機能を使用して行われます。複製された範囲はディスク上で共有されるため、スペースが節約されます。

カーネルの実装は(たとえば)次の場所にあります。http://lxr.free-electrons.com/source/fs/btrfs/ioctl.c#L2843;このコメントは、ファイルを「再接続」するのではなく、範囲に関するものであることを明確にします。

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  */

したがって、再リンクされるファイルではなく、共有される範囲です。複数のファイルと範囲を共有して新しいファイルを作成することもできます。または、複数のボリュームで共有することもできます。または、(現在サポートされているかどうかわからない)、同じファイル内で同じ範囲を複数回持つこともできます。)

したがって、ファイル全体を共有するファイルを見つける高度なツールは存在しません。これは派生した概念だからです。もちろん、これに対するサポートが書かれるかもしれませんが、私の知る限りではありません...

おすすめ記事