我读过许多描述如何使用dd
的指南和论坛文章,但我注意到,人们总是对bs=
、count=
和seek=
开关使用不同的值。
请有人解释一下这些开关到底是做什么的( man
页面不是很详细),并解释它们的最佳设置是为不同的任务,例如从/dev/random
或/dev/zero
创建文件,以及覆盖分区和外部驱动器。
发布于 2014-06-03 11:41:20
好的,您说手册页不详细,所以我将用一个很容易理解的关于移动人员的比喻来解释它们的含义(他的名字是dd
):
bs=BYTES
read and write up to BYTES bytes at a time
dd
拿起一些东西(盒子、花瓶、床、大米等),把它放在需要的地方,然后把它放下。直到他没有放下盒子里的物品,他才会选择其他的东西,这意味着:另一个盒子里有另一个负载的对象。
现在,当您需要告诉他每次旅行要加载多少个对象时,这就是bs
所做的。你设置他要读和写的数据量。在所有有用和常见的命令中,这几乎都是强制性的。
count=N
copy only N input blocks
这就决定了他要移动的箱子的总数。此上下文中的框是磁盘上的块。你告诉他移动5盒,他只移动5盒,即使有超过5盒(如果少于5盒,他会拿他找到的花瓶,除了盒子加起来)。如果您只告诉dd
给count
5,并将其写在某个地方,他就会复制他看到的前5个块,并将它们写入您想要的地方。
seek=N skip N obs-sized blocks at start of output
这个家伙通常会找到第一个可以卸下负载的地方,这通常是在(磁盘的)开始时,并且一直到最后。嗯,用这个你告诉dd
从更远的地方开始,比如说,从大厅开始,从里面的一个房间开始。它只是“跳过”起始块。
现在,根据您正在做的事情,您将需要基于源和目的地的不同组合,以及它们将被读写的格式。我建议你单独寻找它们。
发布于 2020-05-21 12:11:02
到目前为止还没有提到的一件重要的事情是,例如,dd bs=16G
要求您在空闲内存中至少有16G字节。但是,如果不这样做,则只需使用较低的块大小bs
(例如,2G
),然后通过将counts
设置为大于1的数字来执行多轮操作(在这种情况下,8
可以实现最多 16 of的输出取决于输入)。
因此:
bs x count = data size
2GB x 8 = 16GB
https://unix.stackexchange.com/questions/134299
复制