查看linux设备Ran的大小,linux – 来自/ dev / zero和/ dev / urandom的不同文件大小

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.有人为什么会这样?我该如何生成随机测试文件?

解决方法:

使用较大的块大小,存在获取不完整读取的风险.从管道而不是块设备读取时也会发生这种情况.

如果您希望收到一定的大小(计数* bs),您还必须提供iflag = fullblock.

对于bs = 1M或更小,它可能没有必要,但仍然推荐它.

dd还会尝试向您展示它获得了多少不完整的读数.它复制n m个块,n个完整块和m个不完整块.复制不是blocksize的多个文件时,最后一个块的不完整是正常的.

例:

$dd status=progress if=/dev/urandom of=/dev/null bs=100M count=20

dd: warning: partial read (33554431 bytes); suggest iflag=fullblock

536870896 bytes (537 MB, 512 MiB) copied, 2 s, 254 MB/s

0+20 records in

0+20 records out

671088620 bytes (671 MB, 640 MiB) copied, 2.64391 s, 254 MB/s

在这种情况下,它只有不完整的读取,而不是一个完整的100M块.显然/ dev / urandom不愿意在一次读取中提供那么多数据.我的dd版本甚至告诉你直接使用iflag = fullbock.

使用fullblock,一切正常:

$dd status=progress if=/dev/urandom of=/dev/null bs=100M count=20 iflag=fullblock

2097152000 bytes (2.1 GB, 2.0 GiB) copied, 8 s, 255 MB/s

20+0 records in

20+0 records out

2097152000 bytes (2.1 GB, 2.0 GiB) copied, 8.22914 s, 255 MB/s

它需要更长的时间,因为它实际上复制了两倍以上的数据量.

标签:linux,dd

来源: https://codeday.me/bug/20190809/1629419.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值