dd 字节不同。urandom 与零为什么不同?

dd 字节不同。urandom 与零为什么不同?

和:

  • Kubuntu 22.04
    ~ 8000 GB ~ 8TB USB 硬盘
    ~ 8TB 每次 dd 命令耗时 15 小时

dd --version
dd (coreutils) 8.32

Ran dd ... urandom:
time sudo dd if=/dev/urandom of=/dev/sd_ bs=64K status=progress
输出

8001557168128 bytes (8.0 TB, 7.3 TiB) copied, 53987 s, 148 MB/s 
dd: error writing '/dev/sda': No space left on device 
122094166+0 records in 
122094165+0 records out 
8001563221504 bytes (8.0 TB, 7.3 TiB) copied, 54057 s, 148 MB/s 

Ran dd ...零:
time sudo dd if=/dev/zero of=/dev/sd_ bs=64K status=progress
输出

8001543208960 bytes (8.0 TB, 7.3 TiB) copied, 53986 s, 148 MB/s 
dd: error writing '/dev/sda': No space left on device 
122094166+0 records in 
122094165+0 records out 
8001563221504 bytes (8.0 TB, 7.3 TiB) copied, 54057.4 s, 148 MB/s

对于以上2个命令,花费的
时间几乎相同~53986秒~15小时。

注意最后一行是相同的 8001563221504 字节。

但是,第一行字节不同:

+ 8001557168128 ~ 8000 GB, for urandom   
- 8001543208960 ~ 8000 GB, for zero   
---------------------------------------  
+      13959168 ~ 13.9 MB difference   

dd ... urandom 输出超过了 13 MBytes。

为什么 dd 输出的第一行
相差超过 13 MB?

换句话说,
为什么上述两个命令的字节数不同:
dd ... urandomdd ... zero

答案1

这些“第一行”是不断更新的进度线。它们之所以存在是因为status=progress。你在最后看到的是最后的dd在每个相应的打印No space left错误、打印通常的摘要(独立于status=progress)并退出之前,进度线的状态。

在你的情况下,这些行仅意味着:

  • 在 53987 秒内第一次dd复制了 8001557168128 字节,
  • 在53986秒内第二个dd复制了8001543208960字节。

偶然各个进度线的最后更新发生在这些时间和数据量的精确值上。两种情况之间的差异并不重要。轻微的波动可能会导致略有不同的值。

最终,每个人​​都dd成功写入了 8001563221504 字节。这才是关键。我猜进度线大约每秒更新一次,但在这两种情况下,摘要都是在各自进度线最后一次更新后 60 多秒打印出来的因为同步

相关内容