/bin/sync 在现代 Linux 中什么时候有用?

/bin/sync 在现代 Linux 中什么时候有用?

我很好奇为什么 /bin/sync 存在。我了解它的作用、为什么会发生分页以及为什么操作系统同步很重要。但是,我仍然看不到调用 /bin/sync 何时有用。

在我看来,每当发生重要的事情时,Linux 就必须进行同步(例如在关闭之前,原始 Linux 中缺乏同步会导致同步;同步;同步;神话)。如果 Linux 是可靠的,而且我们似乎都相信它是可靠的,那么我必须假设它将确保在运行会在没有同步的情况下损害操作系统的命令之前将块写入 FS。

sync(8) 手册页建议当程序将以不正确的方式关闭时运行sync。我有点看到这一点,尽管我认为只有极少数程序有理由使用同步(并等待以确保建议有效),但无法通过让操作系统更干净的方法关闭为他们同步。

无论如何,sync(8) 与 /bin/sync 二进制文件不同。我想我一定错过了二进制文件有用的情况?我见过的唯一用例是在调用 mem 之前运行它以释放更多内存,也许可以更好地了解“可用”内存。如果您以某种方式意识到您的计算机将要爆炸并且在它发生之前有足够的时间输入sync,那么这将很有用,但没有人手动执行此操作,而不是某个调用sync(8)的看门狗程序。

我所缺少的二进制文件还有其他优点吗?

答案1

sync公用事业是一个简单的包装sync系统调用

您不需要在关闭计算机之前显式调用它......因为关闭脚本会为您完成此操作!实际上,在大多数情况下这不是必需的,因为卸载文件系统或将其切换为只读会将该文件系统的数据刷新到磁盘,并且关闭脚本会执行此操作。调用sync是一件很重要的事情,以防出现问题并且进程以某种方式在关闭序列中幸存下来并阻止卸载。

sync也在挂起或休眠序列的倒数第二阶段(即关闭硬件之前)调用。这里没有其他选择,必须说“现在将所有数据写入磁盘”。

另一种有用的时间sync是在做有导致崩溃风险的事情之前,例如尝试实验性驱动程序。

sync在 a 之前调用程序崩溃是没有用的。sync处理程序和存储介质之间的缓冲区中的数据;它不会对程序未保存到文件的数据执行任何操作。

检查可用内存时,调用sync也是无用的,因为它不会影响可用内存。虽然它确实释放写入缓冲区以进行回收,但它实际上并没有释放这些缓冲区 - 当内核需要为其他内容分配内存时,它们将被释放,同时它们仍作为缓存保留。

答案2

“同步的历史”对于谷歌来说是一件很难的事情;-) 一个完全不知情的猜测是,至少一个合法的用途是内核开发人员对sync(2)系统调用进行更改以进行测试。他们需要一种比停止或卸载文件系统更方便的调用系统调用的方法?

答案3

也许您知道sync在将一些大数据复制到慢速驱动器时很有用。只是为了确保在将其拉出之前所有内容都已写入外部驱动器!

相关内容