2015-09-24 14 views
7

特定のファイルに関連するBTRFSチェックサムを取得したいと思いますが、残念ながらこの操作を実行するのに適切なioctlが見つかりませんでした。それは可能ですか?もしそうなら、それを行う方法?私は、rsyncの動作と同様に、CPU負荷を減らそうとするためにチェックサムを格納する必要があります。btrfs ioctl:ユーザースペースからファイルチェックサムを取得

+2

ところで、のbtrfsは(私の知る限り)*ない*ファイルについて、* *ブロックのためのチェックサムを生成します。 – gavv

+2

これはまさに私が望むものです:与えられたファイルのブロックに対するチェックサムのリスト。 – 0x2207

+1

私はソースコードを読み飛ばしてきましたが、チェックサム値を取得するためのインタフェースはありません。 – rodrigo

答えて

1

ちょうど私のgithubのレポにこの厄介なコードをプッシュしました。 https://github.com/Lakshmipathi/btrfs-progs/tree/dump_csum 公式のコードではありません。私は100Kから50GBのサイズのファイルをテストしました。彼らは一致するようです。

使用法:

./btrfs-debug-tree -f /path/to/file /btrfs/partition 

は、先のcsumdumpファイルを作成します。

例:

sudo ./btrfs-debug-tree -f /btrfs/50gbfile1 /dev/sda4 

出力ファイルという名前のファイルブロックのCSUMと '/btrfs/50gbfile1.csumdump' を作成します。

注:私は教育的/学習目的でこれを試していたので、すべての通常の免責事項が付いています。今週中にこのコードのクリーンアップを計画しています。

あなたが使用することを計画している場合、私は次のような場合にテストするためにあなたをお勧めします:

1) Create 20GB (or any file with size > 1KB) on /tmp/ 
2) mount your btrfs partition on /btrfs and copy file /tmp/file /btrfs/f1 
3) Now dump the csum it will produce /btrfs/f1.csumdump 
4) cp /tmp/file /btrfs/f2 and dump f2's csum. 
5) Now compare f1.csumdump with f2.csumdump If they match, it seems to be 
working. If they didn't match something went wrong. 
関連する問題