我很好奇为什么/bin/sync存在。我理解它的功能,为什么会发生分页,以及为什么操作系统同步很重要。但是,我仍然无法看出调用/bin/sync是什么时候有用的。
在我看来,无论什么时候发生任何重要的事情,Linux都必须同步(比如在关闭之前,proto中缺少这一点会导致同步;神话)。如果Linux将是可靠的,而且我们似乎都相信它是可靠的,那么我必须假设它将确保在FS运行不同步会损害操作系统的命令之前将块写入FS。
同步(8)手册页建议在程序以不适当的方式关闭时运行同步。我看到了这一点,虽然我认为只有极少数的程序有理由使用同步(并等待以确保建议有效),但无法通过一种让操作系统为它们同步的更干净的方法来关闭。
无论如何,sync(8)与/bin/sync二进制文件不一样。我想我一定是错过了二进制很有用的一种情况?我见过的唯一一个用例是在打电话给mem以释放更多内存之前就运行它,也许可以稍微更好地了解您的“可用”内存。如果你意识到你的计算机会爆炸,并且在同步发生之前有足够的时间输入同步,那将是很有用的,但是没有人用手去做,而不是某个叫同步(8)的看门狗程序。
我丢失的二进制文件还有其他优点吗?
发布于 2016-01-01 02:34:14
“同步的历史”对google来说是件难事;-)一个完全不知情的猜测是,至少有一个合法的用途是让内核开发人员更改同步(2)系统调用来测试。他们需要一种方式来调用syscall,这比停止或创建文件系统要方便一些吗?
发布于 2016-01-01 01:07:20
sync实用程序是围绕sync系统呼叫的一个简单包装器。
您不需要在关闭计算机…之前显式调用它因为关机脚本会帮你!实际上,在大多数情况下,这是不必要的,因为卸载文件系统或将其切换为只读文件系统,会将文件系统的数据刷新到磁盘,而关闭脚本就是这样做的。调用sync是一个带带和支撑的东西,万一出了问题,一个进程不知怎的挺过了关机顺序,并阻止了卸载。
sync也在暂停或休眠序列的下一个最后阶段被调用,就在关闭硬件之前。这里没有其他选择,必须说“现在就把所有数据写到磁盘上”。
当sync有用的另一次是在做有可能导致崩溃的事情之前,例如尝试一个实验性的驱动程序。
在程序崩溃之前调用sync是无用的。sync处理程序和存储介质之间缓冲区中的数据;它不会对程序没有保存到文件的数据做任何事情。
在检查可用内存时,调用sync也是无用的,因为它不会影响可用内存。虽然它为回收做了免费的写缓冲区,但它实际上并没有释放那些缓冲区--当内核需要为其他东西分配内存时,它们将被释放,同时它们作为缓存存在。
发布于 2016-01-01 03:11:21
也许您知道,sync在处理一些大数据到一个缓慢的驱动器时是有用的。只是为了确保所有的东西都写到外部驱动器上,然后再拔出来!
https://unix.stackexchange.com/questions/252551
复制相似问题