Se você verificar Ler de / dev / urandom dará EOF após 33554431 bytes e seguir a discussão, ele aponta para outro relatório de bug onde Ted Tso declara ...
...that commit 79a8468747c5 causes reads larger than 32MB results in a only 32MB to be returned by the read(2) system call. That is, it results in a short read. POSIX always allows for a short read(2), and any program MUST check for short reads.
The problem with dd is that POSIX requires the count=X parameter, to be based on reads, not on bytes. This can be changed with iflag=fullblock.
Como por gnu dd
manual :
Note if the input may return short reads as could be the case when reading from
a pipe for example, ‘iflag=fullblock’ will ensure that ‘count=’ corresponds to
complete input blocks rather than the traditional POSIX specified behavior of
counting input read operations.
se você adicionar iflag=fullblock
:
dd if=/dev/urandom of=random.raw bs=1G count=1 iflag=fullblock
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 65.3591 s, 16.4 MB/s
Isso é confirmado por dd
, se você omitir iflag
e aumentar a contagem para obter 32
leituras, ou seja, 32
x
33554431
bytes =
1073741792
bytes, que é aproximadamente 1G
(ou 1.1GB
conforme dd
man
seção da página sobre sufixos multiplicativos), será emitida uma breve advertência:
dd if=/dev/urandom of=random.raw bs=1G count=32
dd: warning: partial read (33554431 bytes); suggest iflag=fullblock
0+32 records in
0+32 records out
1073741792 bytes (1.1 GB) copied, 59.6676 s, 18.0 MB/s