我正在尝试通过dd
命令创建随机 1G 测试文件。
dd status=progress if=/dev/zero of=/tmp/testfile.zer bs=100M count=10
dd status=progress if=/dev/urandom of=/tmp/testfile1.ran bs=100M count=10
dd status=progress if=/dev/urandom of=/tmp/testfile2.ran bs=100M count=20
输出是:
-rw-rw-r-- 1 dorinand dorinand 320M dub 21 12:37 testfile1.ran
-rw-rw-r-- 1 dorinand dorinand 640M dub 21 12:37 testfile2.ran
-rw-rw-r-- 1 dorinand dorinand 1000M dub 21 12:37 testfile.zer
为什么生成的输出测试文件要/dev/urandom
小三倍?我希望 testfile1.ran 的大小为 1000M,而 testfile2.ran 的大小为 2000M。任何人都可以为什么会发生这种情况?我应该如何生成随机测试文件?
对于较大的块大小,存在读取不完整的风险。当从管道而不是块设备读取时,这种情况也经常发生。
如果您希望收到一定尺寸 (
count
*bs
),您还必须提供iflag=fullblock
。它可能不是必要的
bs=1M
或更小,但仍然建议使用任何一种方式。dd
还将尝试向您显示它获得了多少不完整的读取。它复制n+m
块,n 个完整的和 m 个不完整的。当复制不是块大小的倍数的文件时,最后一个块不完整是正常的。例子:
在这种情况下,它只有不完整的读取,而不是一个完整的 100M 块。显然 /dev/urandom 不愿意在一次读取中提供这么多数据。我的 dd 版本甚至告诉你
iflag=fullbock
直接使用。使用 fullblock 一切正常:
它需要更长的时间,因为它实际上复制了两倍以上的数据量。