原始块设备的比较

原始块设备的比较

是否有一个实用程序(或一些 shell 魔法)可以让我比较两个块设备?

详细信息:我有一个大型 (0.5 TB) RAID 设备,我已使用 dd 将其备份到稍大的 SATA 设备。该设备上有多个分区,但是我从“父”设备复制而不是分区设备节点(例如,我复制 /dev/hda 而不是 /dev/hda1)。

我想验证备份是否良好/正确。

我曾考虑过在每个设备上运行 md5sum ,但这不会给我一个准确的结果,因为第二个设备比第一个设备稍大,因此额外的字节会改变哈希值。

答案1

我会使用命令

cmp /dev/hda /dev/hdb

它会停在第一个不同的字节处,写出它的偏移量,或者停在较短字节的 EOF 处。

答案2

您正在寻找二进制差异软件

差值
是为备份和网络传输而设计的,备份propuse请看rdiff-backup和duplicity

三角洲3
是一个开源的二进制 diff、差分压缩工具,VCDIFF (RFC 3284) delta 压缩。

bsdiff
也是!!内存消耗大,不适合块设备。

答案3

根据驱动器的实际容量,挂载文件系统并执行操作可能是最快的

diff -qr /mnt/root1 /mnt/root2

否则,我会这样说:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

显然要弄清楚你需要做多大,bscount停在较小驱动器的末端(或者在更方便的情况下停在之前)。

或者,由于 enzotib 的评论,看起来您可以使用cmp,但您需要该-n标志来将字节数限制为两个驱动器中较短的一个。

cmp /dev/sda /dev/sdb -n 500GB

答案4

md5sum您可以使用如下方式比较两个不同大小的块设备:

(假设较小的设备是/dev/sda

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum

相关内容