我想获取与特定文件相关的BTRFS校验和,但是很遗憾,我没有找到合适的ioctl来执行此操作。有可能吗?如果是这样,该怎么做?在类似于rsync行为的情况下,我需要存储校验和以尝试减少CPU负载。

最佳答案

刚才把这个凌乱的代码推到了我的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.
将近5年后更新!
新位置:https://github.com/Lakshmipathi/dduper

09-13 11:17