有一个备份程序bup
(https://github.com/bup/bup),它基于一些来自版本控制系统git
的想法和一些功能,用于紧凑存储虚拟机镜像。
bup
中有一个子命令bup ls
,当传递-s
选项时可以显示存储在备份内部的一些类似sha1的哈希值(十六进制相同长度)(在man bup-ls
中只有"-s,--hash:为每个文件 / 目录显示哈希值")。但是这个类似sha1的哈希值不等于原始文件的sha1sum
输出。
原始的git
通过在数据前加上“blob NNN \ 0”字符串计算数据的sha1哈希值,其中NNN以十进制方式表示对象大小(字节),根据How does git compute file hashes?和https://dev59.com/BGw05IYBdhLWcg3weBpF#28881708/
我测试了前缀'blob NNN \ 0',仍然无法获得相同的sha1哈希值。
bup
中用于文件计算哈希值的方法是什么?它是类似Merkle树的线性sha1还是某种树变量?目录的哈希值是什么?
bup
命令的源代码在https://github.com/bup/bup/blob/master/lib/bup/ls.py中,哈希值以十六进制打印,但是哈希值是在哪里生成的呢?
def node_info(n, name,
''' ....
if show_hash:
result += "%s " % n.hash.encode('hex')
在创建 bup 备份时(当文件通过 bup index
+ bup save
命令放置到备份中),生成的哈希值是在 bup ls
命令上只是打印出来的,还是在每次 bup ls
上重新计算并可用作 bup 备份的完整性测试?
git fsck
或等效命令。 - torekbup ls -s
中的完整文件哈希值,而不是提交ID哈希值或文件部分(块)的滚动哈希值。 - osgx