不设置 conv=f​​sync 是否意味着如果关闭计算机,复制可能不完整?

不设置 conv=f​​sync 是否意味着如果关闭计算机,复制可能不完整?

所以据我所知 conv=f​​sync 意味着缓存在 dd 退出之前已完全写入。但这是否意味着当 dd 退出时写入尚未完成?就像如果我关闭计算机(在 dd 似乎完成之后),文件可能会不完整?

使用 dd 将全零写入硬盘怎么样?

答案1

dd conv=fsync导致 dd 在退出之前刷新其正在写入的文件的操作系统缓存。

通常,如果没有此选项,一旦操作系统接受了所有要写入的数据,dd就会退出。如果您关闭操作系统,它会将内容刷新到磁盘并在关闭之前卸载文件系统。

因此,如果您正常关闭,则与使用 fsync 选项没有太大不同。但如果你在没有它的情况下运行 dd ,等待它完成,然后拔掉插头,那么所有的赌注都会消失。当然,即使使用 fsync 选项,如果您这样做,事情也可能不会顺利,但至少 dd 的输出会在磁盘上。

同样,如果这是一个可移动驱动器,那么使用 fsync 然后弹出磁盘或不使用它并弹出磁盘都没有什么区别,除了弹出不会花费那么长时间,dd conv=fsync因为它会具有更少的(不?)要刷新的缓冲区。但是,如果您将可移动磁盘拉出而不弹出,则不确定是否所有缓冲区都有机会被写入。

这里最大的区别可能是 fsync 选项强制操作系统在等待 dd (或弹出)完成时立即刷新缓冲区,如果没有它,它们将在后台伺机刷新,并且内核可能会延迟刷新它有利于首先刷新的其他 I/O。

这里的要点是,内核将延迟一些写入,以支持其他更重要的 I/O(例如,对同一设备的读取或其他写入)。通过使用fsync(或eject),你告诉内核这个特定的I/O是最重要的,现在就完成它。

数据的来源在这里并不相关,只涉及数据写入的位置以及等待数据的时间。

相关内容