您应该同步进行的哲学是否存在真理?同步; 同步; 同步?


27

当我于2000年在Cisco Systems的Linux上首次被引入Linux时,我得到了该sync命令的优点,该命令用于将缓冲区刷新到磁盘以防止文件系统损坏/数据丢失。不仅那里的同事告诉我,而且大学的朋友告诉我,总是要运行sync“几次”或“一堆”,即5到10次,而不是一次。

从那以后我一直保持着这种习惯,但是,这有什么好处吗?有人听说过吗?而且最重要的是,任何人都可以为您需要sync多次运行才能使其有效的想法提供良好的理论依据/经验证据吗?

Answers:


34

sync三次键入命令时,我听到了(对不起,我忘了在哪里)(如:S Y N C Return,等待提示,重复,重复)。我还读到起源是一个特定的系统,即使它告诉操作系统一切都很好,磁盘仍需要花费几秒钟来完成其缓冲区的刷新。再输入两次命令将使磁盘有足够的时间稳定下来。似乎这些年来,目的已被遗忘,并且该建议被缩写为sync; sync; sync不会产生预期的效果(由于磁盘已报告“全部清除”,因此第二和第三次同步将立即完成,并且提示会回来太早)。

我从未听说过sync可以使用多种操作的系统,并且我非常怀疑是否存在任何操作。我认为这是一个城市传奇。另一方面,我认为在某些系统中,您应该在同步后和关闭电源之前等待几秒钟。

谷歌搜索会导致一些独立的并发分析,例如sync的传说。另请参见在关闭Linux之前是否仍需要执行sync(8)?


1
很好,谢谢!我应该澄清,我帮sync; sync; sync; sync的称号,我有时会键入这样的说法,我还听到它向我解释同样的方式,也就是同步,等待,再次同步,等待等等
约什-

9

这里的老朋友。回到TAPE的辉煌年代,连续3次快速同步是一种告诉TAPE控制器不仅取消链接/解开磁带流,而且还对其进行倒带的方法,即设置FD / rw头到0。

实际上,只有使用基于TAPE的Unix的人们才有效地使用了“ sync; sync; sync”,即那些将文件安装在当时最便宜的存储设备/ var / spool上的应用程序。;)

MIPS Risc / OS操作员手册在此页面上有一个页面。


6

当然,在较早的UNIX系统上,同步多个安全性更高,但并非所有命令行都以“ sync; sync; sync”同步。在80年代中期,它被提炼为:

当您关闭系统电源时,您将同步三遍。不多不少。同步数为3,同步数为3。您不得同步四次,也不得同步两次,只是您要第三次同步...

我真的不知道这三个时间是哪里来的,除了也许很有趣。但是这个词在大街上要做两次。不是“ sync; sync”,而是外壳程序上的两行。

例如,在V7 UNIX时代,文件系统修复并不是一件很有趣的事情。您必须手工完成,对文件系统的工作原理以及dcheck,ncheck和icheck之类的程序有很多了解。fsck,如果有的话,并不总是您会信任的。

这听起来像是一个“我们两路都走过雪”的故事。好吧,我们没有重启或关闭之类的精美命令。当您想重新引导系统时,您将文件系统与sync同步,然后在控制台上按Ctrl-P使其停止。

当sync命令退出时,内核已经安排了同步,但是并不是所有的缓冲区(包括所有重要的文件系统超级块)都必须将其写入磁盘。因此,运行同步然后在安全之前停止运行非常容易。

再次运行同步是一件容易的事,花费时间,并且具有一定的直观吸引力,而不必了解所有内容,也不必处理诸如“数到10”之类的模糊指令。

在V7手册页上甚至还有一个BUG部分,update还说:

在运行更新的情况下,如果在执行同步时暂停CPU,则文件系统可能会损坏。这部分是由于DEC硬件在NPR请求失败时写入零。一种解决方法是让sync(1)暂时将系统时间至少增加30秒,以触发更新的执行。这将有30秒的宽限期来暂停CPU。

(顺便说一句,这是V7手册第1卷的最后一部分)

随着时间的流逝,用于关闭和重新引导系统的文件系统工具和程序会更好地避免这种情况。当系统神秘运行时,民间传说,伏都教和系统魔法会进入其中。同步两次使您不必费力地将文件系统重新组合在一起的可能性就降低了,因此它已成为惯例的一部分。一旦完成了很多次,您就无需考虑。然后有人注意到并问为什么。答案是:“总是那样做。它更安全。”

我不会声称这是权威性的,在某些细节上我可能是错的。但我认为它与原点非常接近。


听起来像是我学到的东西……但这只是伏都教还是真的有什么原因吗?其他一些答案也很好地建议了这种习惯在我们系统管理员中已经形成的方式
Josh

@Josh给出了原因。“当退出同步命令时,内核已经安排了同步,但是并不是所有的缓冲区(包括所有重要的文件系统超级块)都必须将其写入磁盘。” 另请参见:“根据标准规范(例如POSIX.1-2001),sync()计划写入,但是可能在实际写入完成之前返回。” man7.org/linux/man-pages/man2/sync.2.html
sourcejedi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.