救命!dd很可怕!
你不是一个人。来自Linux的提示:
'dd'命令是最初的Unix实用程序之一,应该在每个人的工具箱中...有些人认为dd的意思是“销毁磁盘”或“删除数据”,因为如果它被滥用,分区或输出文件可以被删除很快。由于dd是用于写入磁盘头,引导记录和类似系统数据区的工具,因此滥用dd可能会破坏许多硬盘和文件系统。
但是不要担心。一旦你了解了它的复杂性,你就会被dd牛仔竞技牛仔的平静恩典所吸引。
它会破裂吗?这是什么countING bs?
让我们先处理第一个问题。
我们怎样才能巧妙地现在通过选择一个糟糕的组合打破东西bs和count?我们怎么知道?
如果你的意思是“休息”意味着'意想不到的后果',那么只需在理论上指定它们。那是什么意思?好吧,假设您要复制image.img到位于的SD卡上/dev/sdc。所以你匹配你的例子中的参数:
# dd if=/home/someone/image.img of=/dev/sdc bs=64M count=16
应该可以重用那些设置吗?让我们等待dd完成......现在,这是什么意思?
16+0 records in
16+0 records out
1073741824 bytes (1.1 GB) copied, 34.1303 s, 31.5 MB/s
只复制了1.1 GB!不过image.img是2GB左右,我想整个事情抄!通过告诉dd复制16批64M(其中M = 1024 * 1024,顺便提一下)你已经指定了一个大小。你会知道状态输出。如果要复制整个文件,请将大小与bs和匹配count; 或者完全省略这些:
# dd if=/home/someone/image.img of=/dev/sdc
4364864+0 records in
4364864+0 records out
2234810368 bytes (2.2 GB) copied, 45.9502 s, 48.6 MB/s
如果我们变得非常顽皮并告诉dd复制比可用数据更多的数据会发生什么?
# dd if=/home/someone/image.img of=/dev/sdc bs=1M count=4096
2131+1 records in
2131+1 records out
2234810368 bytes (2.2 GB) copied, 77.9768 s, 28.7 MB/s
啊,dd只复制收到的字节数。这很方便。
监控 dd
说到状态输出,dd(GNU变体)尊重并响应INFO信号SIGUSR1:
# echo "In another terminal or TTY"
# pkill -USR1 -n -x dd
# echo "Printed to stdout on the terminal/tty running dd:"
534+0 records in
534+0 records out
559939584 bytes (560 MB) copied, 1.68414 s, 332 MB/s
方便您注意转移速度慢或您希望因某种原因而挂起。很好地配对watch,但一定要给出watch相当长的间隔时间。
是否dd有任何其他的选择,我应该知道的吗?
dd确实有其他选择,但在大多数情况下,如果您需要使用它们,您将知道它们的作用。不过,一些例子可能会给你一个想法:
conv=CONVS:根据一个或多个转换选项转换输入
seek=N并且skip=N:在[输出|输入]开始时跳过N [obs | ibs] - 大小的块
status=X:(抑制输出)noxfer或者none
我现在感觉好多了dd!
大!您很快就会在互联网上发送可引导图像,dd并使用和的组合直接写入microSD卡ssh。
但这dd首字母缩写实际上代表什么呢?
最后一个问题。对于那个问题和任何其他类似的问题,我会引用你的行话文件条目dd。
如果有什么比它应该更不透明,请鼓励要求澄清!