因此,我有几个约1TB的系统备份镜像文件,我想快速计算每一个文件的哈希值(最好是SHA-1)。
起初,我尝试计算md5哈希值,但已经过去了2小时,哈希值还没有被计算出来(对于大于1TB的大文件这是很明显的事情)。
那么,有没有任何程序/实现可以快速哈希1TB大小的文件?
我听说过树哈希(Tree-Hashing),可以同时哈希文件的部分内容,但我到目前为止还没有发现任何实现。
因此,我有几个约1TB的系统备份镜像文件,我想快速计算每一个文件的哈希值(最好是SHA-1)。
起初,我尝试计算md5哈希值,但已经过去了2小时,哈希值还没有被计算出来(对于大于1TB的大文件这是很明显的事情)。
那么,有没有任何程序/实现可以快速哈希1TB大小的文件?
我听说过树哈希(Tree-Hashing),可以同时哈希文件的部分内容,但我到目前为止还没有发现任何实现。
虽然这个问题已经有答案了,但您可以尝试选择文件的特定部分。
我在某个地方找到了一个Perl解决方案,它似乎很有效,但代码不是我的:
#!/usr/bin/perl
use strict;
use Time::HiRes qw[ time ];
use Digest::MD5;
sub quickMD5 {
my $fh = shift;
my $md5 = new Digest::MD5->new;
$md5->add( -s $fh );
my $pos = 0;
until( eof $fh ) {
seek $fh, $pos, 0;
read( $fh, my $block, 4096 ) or last;
$md5->add( $block );
$pos += 2048**2;
}
return $md5;
}
open FH, '<', $ARGV[0] or die $!;
printf "Processing $ARGV[0] : %u bytes\n", -s FH;
my $start = time;
my $qmd5 = quickMD5( *FH );
printf "Partial MD5 took %.6f seconds\n", time() - $start;
print "Partial MD5: ", $qmd5->hexdigest, "\n";
基本上,该脚本对文件中每个4MB块的前4KB执行MD5(实际上原始脚本对每个1MB执行一次)。