为什么这个带有 count 和 bs 参数的 dd 命令超出了它的计数?

为什么这个带有 count 和 bs 参数的 dd 命令超出了它的计数?

我有一个带有和(40GB)dd的命令,每次我尝试运行它时,它都会超出其计数。这是确切的命令,以及在我停止它之前捕获的输出:bs=1Mcount=40960M

dd if=/dev/zero of=/swap/swapfile bs=1M count=40960M status=progress
50383028224 bytes (50 GB, 47 GiB) copied, 458 s, 110 MB/s

根据进度输出,它似乎只是无限期地运行,并且可能会继续运行,直到of目的地完全填满。我对dd导致其永远运行的误解是什么?

答案1

您必须将bscount参数相乘才能获得实际写入数据的大小。您要求它写入 400 亿(409.6 亿)个块,每个块大小为 1 MB。这是……相当大的数据量。

如果您想写入 40 GB,您可以使用bs=1 count=40960Mbs=1M count=40960或一些类似的组合。

答案2

中的count参数dd指定要复制的块的数量,该bs参数确定块的大小。

dd将表示“百万”的后缀解释M为二进制乘数。

count=40960M count 参数中的意思是 409.6 亿块,而不是兆字节。

这会导致尺寸比您预期的大得多。

删除M后缀以计算正确的计数值。

这是正确的命令:

dd if=/dev/zero of=/swap/swapfile bs=1M count=40960 status=progress

相关内容