为什么'dd'会为同一个USB记忆棒生成不同的文件?


4

我刚刚保存了恢复 Windows 8.1 放到USB记忆棒上;现在,我一直在创造 低级 通过执行以下命令在我的硬盘上复制它:

sudo dd if=/dev/sdf of=/disk2/Archive/windows8.1-restore.img bs=4M oflag=direct

我想仔细检查我的'dd'命令是否正常,所以我重新运行了两次,指定两者 bs=8Mbs=16M;我检查了尺寸,它完全一样,但是 的md5sum 为这三个文件提供不同的输出:

c38a2b07b3d473d3f1876331edc2647b  windows8.1-restore.img.4M
568e382844431eef63d4ba6dc4c2c5ac  windows8.1-restore.img.8M
568e382844431eef63d4ba6dc4c2c5ac  windows8.1-restore.img.16M

我相信我有 卸载 USB棒第二次和第三次。

我应该担心什么吗?

编辑

文件总大小是 31024349184 所有情况下的字节,我的理解 bs=xxx 是为了控制速度,以防万一 倾倒 整个USB记忆棒/驱动器。


3
你跑的时候是没有安装好的 ddbs=4M
gronostaj

不。我想我应该拥有,对吧?
Emanuele

3
是的,你应该把它卸下来。 (或者,可能只读装入。)我也不确定你从哪里获得块大小。我会用bs = 512。我几乎总是使用bs = 512,除非使用CD驱动器,因为它们可能需要不同的块大小(例如bs = 2048,或者可能bs = 2352或正在使用的任何块大小,如< A HREF =“所示) osta.org/technology/cdqa7.htm">CD 块大小< / A>)。
TOOGAM

@TOOGAM这是 如何创建链接
gronostaj

3
@Emanuele我不认为你错了。小块尺寸 dd 众所周知,它会扼杀性能,因为它会强制执行比其他方式更多的读写调用。我相信gronostaj是正确的,你的问题是你已经安装了文件系统的磁盘。 假设你没有重新安装文件系统,因为, 您应该能够通过重新运行初始dd命令来验证这一点;您应该从该调用中看到相同的MD5sum。
a CVn

Answers:


8

将少量数据写入驱动器很慢,因此系统缓冲区写入以便稍后提交所有数据。当缓冲区包含足够的数据以进行有效的写操作或某些进程使用时 sync 系统调用 ,缓冲区被刷新到设备。

dd 执行低级复制,即。它读取物理上存在于设备上的数据。它不考虑缓冲区。

如果在运行时安装了驱动器 dd bs=4M,那么有些写入可能已经缓冲,但没有提交。您没有缓冲更改就转储了驱动器。

umount 电话 sync 内部确保数据完整性。除非您明确要求某个进程执行此操作,否则通常不会访问未安装的设备,因此卸载后驱动器不太可能更改。

然后你跑了 dd 两次在驱动器上,而不是在它之间安装它。这就是为什么 bs=8Mbs=16M 电话产生相同的结果。

Drive之间进行了修改 bs=4Mbs=8M 但是,所以第一次转储是不同的。 bs= 没关系,打电话 umount 没有。

您应该在使用前始终卸载设备 dd 在它上面,否则其他一些过程可能会修改其内容 dd 正在履行其职责并打破文件完整性。


2
我以为自己在拥有它时有点像个白痴 安装 我第一次执行时 dd。我想我会用文件保存文件 卸载 。害怕!
Emanuele
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.