我有一个带有和(40GB)dd
的命令,每次我尝试运行它时,它都会超出其计数。这是确切的命令,以及在我停止它之前捕获的输出:bs=1M
count=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
您必须将bs
和count
参数相乘才能获得实际写入数据的大小。您要求它写入 400 亿(409.6 亿)个块,每个块大小为 1 MB。这是……相当大的数据量。
如果您想写入 40 GB,您可以使用bs=1 count=40960M
、bs=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