基于^{cd2>}版本控制系统的一些思想和功能,设计了^{cd1}备份程序(https://github.com/bup/bup),用于虚拟机图像的压缩存储。
在^{cd1>}中有^{cd4>}子命令,当传递^{cd5>}选项时,它可以显示存储在备份中的对象的一些sha1,如哈希(十六进制长度相同)。“”。但是类似sha1的散列不等于原始文件的^{{cd7}输出。
原始^{cd2>}通过在数据前面加上'blob NNN\0'字符串来计算sha1散列,其中NNN是以字节为单位的对象大小,并按How does git compute file hashes?和https://stackoverflow.com/a/28881708/写入十进制
我测试了前缀'blob NNN\0',但仍然不相同sha1 sum。
bup中使用了什么方法计算文件的哈希和?是线性sha1还是像Merkle树这样的树样的变体?目录的哈希是什么?
bup的^{cd9>}命令的源是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备份时生成的哈希(当文件被^{cd10>}+^{cd11>}命令放入备份中)并刚刚打印在^{{cd4>}上;还是在每个^{cd4>}上重新计算,并且可以用作bup备份的完整性测试?
bup
将所有数据存储在一个裸git存储库中(默认情况下该存储库位于~/.bup
)。因此,bup
的哈希计算方法完全复制了git
使用的哈希计算方法。在然而,与git的一个重要区别是
bup
可以将文件分成块。如果bup
决定将文件拆分为块,则该文件在存储库中表示为树而不是blob。在这种情况下,bup
的哈希与相应树的git
的哈希一致。在下面的脚本演示了:
bup_hash_测试
输出:
^{pr2}$如我们所见,当}的哈希匹配时,}的哈希不匹配时,具有{}哈希的对象是一棵树。该树中blob的内容对应于完整文件的片段:
^{3}$bup
和{bup
存储库中对应的对象是一个具有预期内容的blob。当bup
和{相关问题 更多 >
编程相关推荐