md5 仅散列文件的前 512 个字节

Jim*_*969 6 shell-script hashsum data

背景

我即将将文件从旧 NAS 迁移到新 NAS,并想验证数据完整性。旧的 NAS (Debian) 使用 Linux Ext3 文件系统,而新的 (FreeNAS) 基于 ZFS。为了加快完整性验证,我正在尝试使用分类方法:

  • 首先验证所有文件大小
  • 其次 md5 散列每个文件的前 512 个字节
  • 最后 md5 散列整个文件

这个想法是前两个步骤将过滤掉明显损坏的文件,并且比批量运行 md5 来检测 TB 文件要快得多。

我已经构建了一个 bash 命令来执行目录结构的 md5 哈希,并根据文件名对输出进行排序以确保我的 Linux NAS 上的确定性顺序。

#find somedir -type f -exec md5sum {} \; | sort -k 34;
12e761f96223145aa63f4f48f252d7fb  /somedir/foo.txt
18409feb00b6519c891c751fe2541fdc  /somedir/bar.txt
Run Code Online (Sandbox Code Playgroud)

但是如果我只想 md5 每个文件的前 512 个字节,如何修改上面的内容?

tec*_*raf 7

您可以使用dd仅将前 512 个字节通过管道传输到md5sum. 然而,这会导致md5sum忘记文件名,所以另外-再用文件名替换。

find . -type f -exec sh -c "dd if={} bs=512 count=1 2>/dev/null | md5sum | sed s\|-\|{}\|" \; | sort -k 34;
Run Code Online (Sandbox Code Playgroud)