根据手动的对于dd
,有两个选项可以导致 I/O 绕过文件系统缓存:direct
和nocache
。例如,当使用这些标志来复制文件或将原始数据复制到块设备或从块设备复制原始数据时,这两个标志之间有什么区别?
假设我想使用dd
(没有真正的原因,只是一个实验)将一个文件从 A 复制到 B,以一种dd
......
- ...从输入文件中读取一个完整块,而不将其放入读取缓存中,然后...
- ...读取完整块后立即将该数据写入目标,而不将其放入写入缓存中。
对于这个示例场景,这些标志有什么不同的作用?dd
此任务的正确调用是什么?
答案1
免责声明:我不能明确地说,但这是我最好的猜测。
无缓存:
读直接来自设备的未对齐输入。
直接输入/输出:
读和写入对齐数据而不使用操作系统的内部缓冲区或者L* 缓存。
总之,如果您想完全避免 OS/L* 缓存,只需选择direct
I/O 选项即可。如果您只是想避免读取缓存,nocache
那么应该就足够了。