dd 的 bs 和 count 设置何时错误?

Pra*_*tic 3 filesystems dd filesystem-corruption

(我所说的错误是指“会破坏事物”。)

假设我们要使用dd. 我们选择了一组有效的ifof、 以及可能的seekskip。我们仔细确保该命令不会写入超出我们预期的输出区域。

现在我们如何通过选择bs和的错误组合来巧妙地破坏事物count?我们怎么知道?

我问的原因是似乎出现了神奇的首选值。例如,在这个关于生成随机 1G 文件的问题中,前两个答案使用if=/dev/urandomof=sample.txtbs=64Mcount=16

如何在 Linux 中创建 1GB 随机文件?

当然,这些并不是唯一有效的设置,但两个答案都使用了这些设置,表明这个选择特别好且合理。特别是在没有文件系统甚至物理磁盘的情况下,我不清楚设置的选择是否可能是错误的——不仅效率低下,而且是错误的。我的猜测是,dd必须一次写入整数个块,以便bs内存使用量增加,而这些值只会影响性能。

该示例只是一个示例,而不是我特别关心的内容,因此请继续解决正在复制的内容具有文件系统的情况。

使用 dd 对我来说始终是一个令人恐惧的信念飞跃。

ber*_*ieb 8

帮助!dd很可怕!

你并不孤单。来自Linux 的提示

“dd”命令是原始 Unix 实用程序之一,应该在每个人的工具箱中...有些人认为 dd 意味着“销毁磁盘”或“删除数据”,因为如果误用,分区或输出文件可能会被丢弃非常快。由于 dd 是用于写入磁盘头、引导记录和类似系统数据区域的工具,因此滥用 dd 可能会损坏许多硬盘和文件系统。

但不用担心。一旦你了解了它的复杂性,你就会dd以牛仔竞技表演中平静优雅的方式来调用。

会坏吗?这是count什么bs

我们先来处理第一个问题。

现在我们如何通过选择bs和的错误组合来巧妙地破坏事物count?我们怎么知道?

如果您用“中断”来表示“意外后果”,那么理论上只需指定它们即可。我这么说是什么意思?好吧,假设您想复制image.img到位于 的 SD 卡上/dev/sdc。因此,您可以匹配示例中的参数:

# dd if=/home/someone/image.img of=/dev/sdc bs=64M count=16
Run Code Online (Sandbox Code Playgroud)

重用这些设置应该没问题吧?让我们等待dd结束吧……现在,它说什么?

16+0 records in
16+0 records out
1073741824 bytes (1.1 GB) copied, 34.1303 s, 31.5 MB/s
Run Code Online (Sandbox Code Playgroud)

仅复制了 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
Run Code Online (Sandbox Code Playgroud)

如果我们非常顽皮并告诉我们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
Run Code Online (Sandbox Code Playgroud)

啊,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
Run Code Online (Sandbox Code Playgroud)

方便监视缓慢的传输或您希望因某种原因挂起的传输。与 搭配得很好watch,但一定要给出watch相当长的间隔时间。

dd还有其他我应该了解的选择吗?

dd确实有其他选项,但在大多数情况下,如果您需要使用它们,您就会知道它们的作用。不过,一些例子可能会给您一个想法:

  • conv=CONVS:根据一个或多个转换选项转换输入
  • seek=Nand skip=N: 在 [output|input] 开始处跳过 N 个 [obs|ibs] 大小的块
  • status=X:(抑制输出)noxfer或者none

dd现在感觉好多了!

伟大的!您很快就会通过互联网发送可​​启动映像,并使用dd和 的组合将其直接写入 microSD 卡ssh

但这个dd缩写词实际上代表什么?

最后一个问题问得好。对于这个问题和任何其他类似的问题,我将向您推荐dd.


如果有任何事情比应有的不透明,我们鼓励您要求澄清!