DD 的字节大小有什么区别

agz*_*agz 4 dd

例如,如果我在硬件级别使用 1 gb 和 1 mb 的极端字节大小,有什么区别?如果恒定的数据流刚刚写入磁盘,字节大小有什么作用?

use*_*686 7

不同之处在于一次读取/写入的数据量。

程序很少使用真正的常量流——它们通常分块读取和写入数据:从输入读取 1 kB,将 1 kB 写入输出,从输入读取 1 kB,写入...所以ddbs=大小)参数告诉它一次读取多少数据。要求操作系统从磁盘读取一个 2 MB 的片段通常比读取 16 个 128 kB 的片段更有效。(部分是因为操作系统需要做的工作更少。)另一方面,如果您尝试使用,那么它会尝试将 16 GB 大小的块读入 RAM,然后立即将其写出;您可能会耗尽 RAM。bs=16G

它还取决于存储介质。磁盘不是流,也不是字节寻址,无论是磁性的还是基于闪存的——它们只允许读取块大小的块(块大小取决于硬件;许多磁盘将其设为 512 字节或 4 kB)。如果操作系统尝试读取 100 个字节,磁盘无论如何都必须读取整个块,然后丢弃数据。(写入时更糟:不确定使用磁盘,但至少使用闪存,如果写入 100 字节,磁盘必须读取整个块,在内存中更新它,然后写入。)所以使用的块大小很dd重要这里也是 - 如果使用的块大小会快得多dd是磁盘块大小的精确倍数。(假设分区对齐没有任何问题,那就是。)