比较两个文件,同时覆盖第二个文件的大小

比较两个文件,同时覆盖第二个文件的大小

我正在尝试使用以下命令验证我所做的备份:

dd if=/dev/sda of=/dev/sdc2

/dev/sda我将(内部硬盘驱动器) 的内容备份到/dev/sdc2(外部备份驱动器,通过 USB 连接),但是 (要备份到的/dev/sdc2分区)比 /dev/sda 稍大。/dev/sda

我无法确定/dev/sdc2的大小,/dev/sda因为 的大小(以字节为单位)/dev/sda不能被 4096(驱动器 上的扇区大小)整除/dev/sdc

我想知道 diff (Unix 命令)是否会让您假设 的大小/dev/sdc2为 的大小/dev/sda(仅比较前 x 个字节,(x 是 的大小/dev/sda/dev/sdc2

我想验证这一点的原因是,当我运行 dd(然后diff /dev/sda /dev/sdc2)时,我在系统日志中收到错误。

我运行 diff /dev/sda /dev/sdc2,它说设备不同,可能/dev/sdc2是因为 大于/dev/sda

错误(每隔一段时间就会重复一次,数量不同)如下所示:

ata5.00: exception Emask 0x50 SAct 0x0 SErr 0x280900 action 0x6 frozen
ata5.00: irq_stat 0x08000000, interface fatal error
ata5: SError: { UnrecovData HostInt 10B8B BadCRC }
ata5.00: failed command: READ DMA
ata5.00: cmd c8/00:00:e0:57:f9/00:00:00:00:00/e9 tag 4 dma 131072 in
         res 50/00:00:df:57:f9/00:00:09:00:00/e9 Emask 0x50 (ATA bus error)
ata5.00: status: { DRDY }
ata5: softreset failed (device not ready)

我执行此操作的计算机正在运行 Arch Linux 的 ISO 版本(安装程序),并且目前未连接到互联网(稍后会)。我应该尝试不同的 Linux 发行版吗?

答案1

也许cmp在这种情况下就足够了:

SYNOPSIS
       cmp [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]

DESCRIPTION
       Compare two files byte by byte. (...)

       -n, --bytes=LIMIT
              compare at most LIMIT bytes

您需要将cmp -n源设备的大小(以字节为单位)作为参数传递给 ,它blockdev --getsize64可以计算:

cmp --bytes=$(blockdev --getsize64 /dev/sda) /dev/sda /dev/sdc2

但请注意,您粘贴的错误消息似乎表明实际的读取错误,因此您可能面临数据的实际问题,而不仅仅是与diff操作方式相关的问题。

答案2

有点晚了,但vbindiff可以在这里提供帮助。它提供了两个文件的分屏十六进制视图,突出显示任何差异。使用Entercan Move to the next difference between the files,在克隆分区的情况下,它应该位于较短源文件的末尾。因此,它会发现任何数据损坏,尽管它没有进度指示器,并且在触发比较后可能需要几个小时才能更新屏幕。

截图:https://www.google.com/search?q=vbindiff&tbm=isch

相关内容