Hormoz Asked: 2022-09-12 17:53:35 +0800 CST2022-09-12 17:53:35 +0800 CST 2022-09-12 17:53:35 +0800 CST 不设置 conv=fsync 是否意味着如果您关闭计算机,则副本可能不完整? 772 因此,据我所知, conv=fsync 意味着缓存在 dd 退出之前已完全写入。但这是否意味着 dd 退出时写入不完整?就像我关闭计算机(在 dd 看似完成之后)文件可能不完整? 使用 dd 将所有零写入硬盘驱动器怎么样? dd 1 个回答 Voted Best Answer user10489 2022-09-12T18:12:51+08:002022-09-12T18:12:51+08:00 dd conv=fsync导致 dd 在退出之前刷新它正在写入的文件的操作系统缓存。 通常,如果没有此选项,则 dd 将在操作系统接受所有要写入的数据后立即退出。如果您关闭操作系统,它将在关闭之前将内容刷新到磁盘并卸载文件系统。 因此,如果您正常关闭,它与使用 fsync 选项并没有太大不同。但是如果你在没有它的情况下运行 dd ,等待它完成,然后拔掉插头,所有的赌注都没有了。当然,即使使用 fsync 选项,如果您这样做,事情可能不会顺利,但至少 dd 的输出会在磁盘上。 同样,如果这是一个可移动驱动器,那么如果您使用 fsync 然后弹出磁盘或不使用它并弹出磁盘,则不会有什么不同,除非弹出不会花费很长时间,dd conv=fsync因为它会更少(没有?)要刷新的缓冲区。但是,如果您将可移动磁盘拉出而不弹出,则不确定是否所有缓冲区都有机会被写入。 可能这里最大的区别是 fsync 选项强制操作系统在您等待 dd (或弹出)完成时立即刷新缓冲区,如果没有它,它们将在后台机会性地刷新,并且内核可能会延迟刷新它支持首先刷新的其他 I/O。 这里的重点是内核会延迟一些写入以支持其他更重要的 I/O(例如,读取或对同一设备的其他写入)。通过使用 fsync(或弹出),你告诉内核这个特定的 I/O 是最重要的,现在就完成它。 数据的来源在这里无关紧要,只与数据写入的位置和等待时间有关。
dd conv=fsync
导致 dd 在退出之前刷新它正在写入的文件的操作系统缓存。通常,如果没有此选项,则 dd 将在操作系统接受所有要写入的数据后立即退出。如果您关闭操作系统,它将在关闭之前将内容刷新到磁盘并卸载文件系统。
因此,如果您正常关闭,它与使用 fsync 选项并没有太大不同。但是如果你在没有它的情况下运行 dd ,等待它完成,然后拔掉插头,所有的赌注都没有了。当然,即使使用 fsync 选项,如果您这样做,事情可能不会顺利,但至少 dd 的输出会在磁盘上。
同样,如果这是一个可移动驱动器,那么如果您使用 fsync 然后弹出磁盘或不使用它并弹出磁盘,则不会有什么不同,除非弹出不会花费很长时间,
dd conv=fsync
因为它会更少(没有?)要刷新的缓冲区。但是,如果您将可移动磁盘拉出而不弹出,则不确定是否所有缓冲区都有机会被写入。可能这里最大的区别是 fsync 选项强制操作系统在您等待 dd (或弹出)完成时立即刷新缓冲区,如果没有它,它们将在后台机会性地刷新,并且内核可能会延迟刷新它支持首先刷新的其他 I/O。
这里的重点是内核会延迟一些写入以支持其他更重要的 I/O(例如,读取或对同一设备的其他写入)。通过使用 fsync(或弹出),你告诉内核这个特定的 I/O 是最重要的,现在就完成它。
数据的来源在这里无关紧要,只与数据写入的位置和等待时间有关。