一位朋友正在尝试使用以下 Linux 命令克隆 CF 卡:
sudo dd if=/dev/sdb of=card3.img bs=4M status=progress
但每次都会产生不同的图像。他们拍摄的前两张卡产生了不一致的结果。这可能是什么原因造成的?
答案1
仅以写访问权限 (rw) 进行挂载就可以写入内容,在 ext 文件系统上至少有以下属性被更新:
- 最后安装于
- 安装数量
- 上次挂载时间
- 并且可能在文件刚被读取时更新文件访问时间(安装
noatime
应该停止这些操作)。 - 如果发生写入,则显示“上次写入时间”属性)
实际上,安装没有写访问(使用 mount 的
-r
/-o ro
)可能仍会写入设备,请参阅 man mount:-r,--只读
以只读方式挂载文件系统。同义词是 -o ro。
请注意,根据文件系统类型、状态和内核行为,系统仍可写入该设备。 例如,如果文件系统脏了,ext3 和 ext4 将重放日志。为了防止这种写入访问,您可能需要使用ro,空载挂载选项或将块设备本身设置为只读模式,请参阅
blockdev
(8) 命令。并
blockdev
有--setro
命令将块设备设置为只读
您可以比较图像并查看哪些字节不同,例如cmp
或类似的vbindiff
。只有几个字节可能是日期或计数(我不确定属性是否存储为纯文本,或以某种方式编码)。
或者以只读方式挂载两个(或更多)映像并仅比较文件。普通方式diff
可以比较目录树,但我更喜欢类似 的 gui kdiff3
。如果唯一的区别在于挂载计数或上次挂载时间,则不会显示在文件中(不同的文件访问时间可能也不会显示)。
或者可能是设备或内存或其他东西出现问题并且到处读取不同的字节。
您还可以保持设备未安装,制作图像,然后拔下并重新连接设备(仍未安装)并制作另一个图像然后进行比较,它们应该是相同的。