dd 的 direct 和 fsync 选项有什么区别?

nik*_*sfi 5 command-line dd

我想将图像复制到 USB 拇指驱动器。由于我想获得“真实”的速度,并且不想在复制图像后等待设备同步很长时间,因此我想知道为此使用哪些选项。

psu*_*usi 5

fsync 选项将在复制结束时刷新数据。dsync 选项将在每个块之后刷新数据。direct 选项将具有与 dsync 类似的结果,只是不会用数据污染文件系统缓存。这有利于缓存系统的其余部分,并节省一些 CPU 开销。

dsync 或 direct 都会带来较低的吞吐量,但这可以通过使用较大的块大小(例如 1MB 或更大)来抵消。


And*_*als 3

通读源代码表明您也应该询问该nocache选项。该选项应该可以满足您的需求,但这也取决于您正在使用的direct版本。在 Ubuntu 11.04 系统上进行大型复制时,我发现使用同步 I/O 数据的选项dd甚至更慢(=更接近现实?) ,这可能会失去现代磁盘控制器为我们提供的聚合优势。dsync要“确切地”知道发生了什么,您必须深入研究正在运行的特定内核的源代码,但即便如此,您仍受驱动器上的接口板的支配,它的作用是自己的缓冲。