dd“直接”与“无缓存”

Mon*_*nad 6 io cache dd

根据 的手册dd有两个选项可以导致 I/O 绕过文件系统缓存:directnocache。例如,当使用这些标志来复制文件或将原始数据复制到块设备或从块设备复制原始数据时,这两个标志之间有什么区别?

假设我想使用dd(没有真正的原因,只是一个实验)将一个文件从 A 复制到 B,以一种dd......

  1. ...从输入文件中读取一个完整块,而不将其放入读取缓存中,然后...
  2. ...读取完整块后立即将该数据写入目标,而不将其放入写入缓存中。

对于这个示例场景,这些标志有什么不同的作用?dd此任务的正确调用是什么?

小智 3

免责声明:我不能明确地说,但这是我最好的猜测。

无缓存:

直接从设备读取未对齐的输入。

直接输入/输出:

无需使用操作系统的内部缓冲区L* 缓存即可读取写入对齐的数据。


总之,如果您想完全避免 OS/L* 缓存,只需选择directI/O 选项即可。如果您只是想避免读取缓存,那么nocache应该就足够了。