If you check [Reading from /dev/urandom gives EOF after 33554431 bytes][1] and follow the discussion, it points to [another bug report][2] where Ted Tso states... > ...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. As per `gnu dd` [manual][3]: 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. so if you add `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 This is actually confirmed by `dd`, if you omit `iflag` and increase the count to get 32 reads (~ 1GB), it will output a short warning: 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 [1]: https://lkml.org/lkml/2014/7/23/850 [2]: https://bugzilla.kernel.org/show_bug.cgi?id=80981 [3]: http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html