例如,如果我使用 1 gb 与 1 mb 的极限字节大小,在硬件层面上,有什么区别?如果恒定的数据流刚刚写入磁盘,字节大小会有什么作用?
答案1
区别在于读取/写入的数据量立刻。
程序很少使用真正的恒定流 - 它们通常分块读取和写入数据:从输入读取 1 kB,将 1 kB 写入输出,从输入读取 1 kB,写入...因此bs=
(堵塞size)参数日告诉它一次要读取多少数据。要求操作系统从磁盘读取一个 2 MB 的数据块通常比读取十六个 128 kB 的数据块更有效率。(部分原因是操作系统需要做的工作较少。)另一方面,如果您尝试使用bs=16G
,那么它将尝试将 16 GB 大小的块读入 RAM,然后一次将其写出;您可能会用完 RAM。
这也取决于存储介质。磁盘不是流并且不是字节寻址的,无论是磁性的还是基于闪存的——它们只允许读取块大小的片段(块大小取决于硬件;许多磁盘的块大小为 512 字节或 4 kB)。如果操作系统尝试读取 100 个字节,磁盘无论如何都必须读取整个块,然后丢弃数据。(写入时情况更糟:不确定磁盘是否如此,但至少在闪存中,如果您写入 100 个字节,磁盘必须读整个区块,在内存中更新它,然后写入。)因此,使用的块大小dd
在这里也很重要 - 如果使用的块大小是磁盘块大小的整数倍,则速度会快得多dd
。(假设分区对齐没有任何问题。)