为什么对原始图像进行 DD 处理后读回时图像会发生变化

为什么对原始图像进行 DD 处理后读回时图像会发生变化

我有一个 .RAW 映像。该映像包含一个分区。

我创建了一个基于环回的设备。我在该设备上创建了一个单独的分区。

我正在将 .RAW 写入分区。

sudo dd if=/tmp/image.raw of=/dev/loop25p1 status=progress

然后我读取分区

 sudo dd of=/tmp/image.dd.raw if=/dev/loop25p1 status=progress

然后我获取sha1sum原始文件并重新创建。

sha1sum /tmp/image.dd.raw 
0d31163796cda45e016f5f1459426adb4a872b57  /tmp/image.dd.raw

sha1sum /tmp/image.raw 
d961e97b63472cd3f317f8823de68508e583f713  /tmp/image.raw

这些为什么不同?

答案1

假设:/tmp/image.raw小于/dev/loop25p1

/dev/loop25p1是具有特定大小的块设备。在向其写入任何内容之前,其大小就已经确定。将较小的文件复制到块设备不会也不会截断它。

我的猜测是/tmp/image.raw小于/dev/loop25p1。将前者复制到后者后,后者包含前者的数据以及超出前者大小的任何数据。换句话说,您的第一个dd没有覆盖整个,/dev/loop25p1因为它在到达输出末尾之前到达了输入末尾。

当你复制/dev/loop25p1到时/tmp/image.dd.raw,你会获得块设备中的所有数据,包括第一个设备dd从未获得的部分。图像就因为这个“尾巴”而有所不同/tmp/image.dd.raw

如果你

cmp /tmp/image.raw /tmp/image.dd.raw

你会得到

cmp: EOF on /tmp/image.raw after byte …

这意味着直到文件末尾/tmp/image.raw都是相同的,但另一个文件包含更多字节。

相关内容