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

dso*_*len 6 linux

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

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

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

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

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

Gil*_*il' 6

sync实用程序sync系统调用的简单包装。

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

sync在挂起或休眠序列的倒数第二个阶段,也就是在关闭硬件电源之前调用。这里别无选择,必须说“现在将所有数据写入磁盘”。

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

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

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


小智 1

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