所以据我所知 conv=fsync 意味着缓存在 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是最重要的,现在就完成它。
数据的来源在这里并不相关,只涉及数据写入的位置以及等待数据的时间。