一直以来,我一直认为forbs
和count
参数dd
只是为了方便人类;因为 dd 只会将它们相乘并使用字节值。一个月前,在为我母亲安装 Ubuntu 时,我将一个分区缩小到了右侧(永远不要这样做,这需要很长时间)并看到gparted
计算“最佳块大小”。
我的问题:关于最佳“块大小”的相同想法是否适用于dd
应用?如果是这样,是否有任何特定情况最适用于它?我如何利用块大小来发挥我的优势?
我认同。考虑一个 4kb 的缓冲区。如果文件系统也有 4k 块(在较新的闪存盘上很常见),则可以通过简单的 mmap 操作来填充它。如果一个流填满了缓冲区,然后必须写入缓冲区,则输入流将被阻塞,直到缓冲区被刷新。这就是使用多个缓冲区的原因。另一方面,我假设必须先填充单个缓冲区,然后再将其写入输出。因此,即使已经有一些数据可用,缓冲区也必须保存在内存中。如果您使用 1Gig 缓冲区(或块大小),这也不是最佳选择。
我刚刚查看了 gparted 中的缓冲区大小,似乎它们只是在 128kb 和 256kb 之间切换(可能更复杂),而且看起来他们想要制作大多数系统中的大部分缓存。给定一个 2MB 的磁盘缓存,以该大小的块传输数据可能是有意义的,如果不使用 mmapped io,这些块甚至可能适合 CPU 缓存。
如果数据可以按块读取和写入,则所有传输大量数据的操作。
通过测试哪一个是你禁食的来计算它。就这么简单,鉴于上面的解释,你可能有一个好的开始,大约 256k 的块大小。或者向 dd 添加一个 autobufsize 选项 :)。