救命!dd
很可怕!
你不是一个人。来自Linux的提示:
'dd'命令是最初的Unix实用程序之一,应该在每个人的工具箱中...有些人认为dd的意思是“销毁磁盘”或“删除数据”,因为如果它被滥用,分区或输出文件可以被删除很快。由于dd是用于写入磁盘头,引导记录和类似系统数据区的工具,因此滥用dd可能会破坏许多硬盘和文件系统。
但是不要担心。一旦你了解了它的复杂性,你就会被dd
牛仔竞技牛仔的平静恩典所吸引。
它会破裂吗?这是什么count
ING 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
。
如果有什么比它应该更不透明,请鼓励要求澄清!