without bs
为什么使用 dd命令检查时磁盘写入差异如此之大with bs
dd if=/dev/zero of=/tmp/test.log count=100000000
100000000+0 records in
100000000+0 records out
51200000000 bytes (51 GB) copied, 289.564 s, 177 MB/s
dd if=/dev/zero of=/tmp/test1.log bs=1G count=50 oflag=dsync
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 150.427 s, 357 MB/s
dd if=/dev/zero of=/tmp/test2.log count=100000000
100000000+0 records in
100000000+0 records out
51200000000 bytes (51 GB) copied, 288.614 s, 177 MB/s
dd if = /dev/zero of = /tmp/test3.log bs = 1G count = 50 oflag = direct
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 109.774 s, 489 MB/s
我搜索了整个网页,但没有找到具体的例子,不过有一篇很好的文章这里但几乎没有什么好的警告。
答案1
如果没有该bs
参数,dd
则将使用设备的标准块大小,通常是 512 字节。这意味着
- 每 512 字节的有效负载都会产生一个请求的开销。
- 如果 512 的块大小不是您的设备的最佳块大小(例如,具有 512 仿真或 SSD 的 4K 扇区),则您会使设备远离其最佳工作点。
根据您的硬件,使用较小的块大小可能会获得更好的数字,bs
因为它适合设备缓存。例如,对于具有 1GB 缓存的 RAID 控制器,您可能想尝试 10MB 块大小。