你应该同步的哲学是否真实?同步; 同步; 同步?

Jos*_*osh 31 buffer synchronization

当我第一次接触 Linux 时,2000 年在 Cisco Systems 工作,我被教导了该sync命令的优点,用于将缓冲区刷新到磁盘以防止文件系统损坏/数据丢失。不仅那里的同事告诉我,大学里的朋友也告诉我总是跑sync“几次”或“一堆”,也就是说,也许 5-10 次,而不是一次。

从那以后我一直保持这个习惯,但是,这有什么好处吗?有没有其他人听说过这个?最重要的是,任何人都可以为/反对您需要sync多次运行才能有效的想法提供良好的基本原理/经验证据吗?

Gil*_*il' 34

我听到它(对不起,我忘记在哪里)输入sync命令三遍(如:S Y N C Return,等待提示,重复,重复)。我还读到起源是一个特定的系统,即使在它告诉操作系统一切正常之后,磁盘也需要几秒钟才能完成刷新其缓冲区。再输入两次命令使磁盘有足够的时间来解决。似乎多年来,目的被遗忘,建议被缩写为sync; sync; sync不会达到预期的效果(因为磁盘报告了“全部清除”,第二次和第三次同步会立即完成,提示会回来太早)。

我从来没有听说过有多个sync操作有任何用处的系统,我非常怀疑是否存在。我认为这是一个都市传说。另一方面,我发现在某些系统中,您应该在同步后和断电前等待几秒钟,这是非常可信的。

谷歌搜索导致一些独立的并发分析,例如同步传奇。另请参阅在关闭 linux 之前还需要执行 sync(8) 吗?.


小智 10

老前辈在这里。回到 TAPE 的辉煌时代,连续 3 次快速同步是一种告诉 TAPE 控制器不仅取消链接/解开磁带流,而且还倒带它的方法,即设置 FD/rw-head到 0。

“同步;同步;同步”实际上只被我们这些使用基于 TAPE 的 Unix 咬牙切齿的人有效地使用,即文件安装在 /var/spool 上的应用程序,这是当时最便宜的存储。;)

MIPS Risc/OS 操作员手册上有一个关于此的页面..


Win*_*Win 7

肯定有一些较旧的 UNIX 系统,对它们进行多次同步更安全,但并非全部都在一个命令行上作为“同步;同步;同步”。在 80 年代中期,这被提炼为:

当你关闭系统时,你应该同步三遍。不多也不少。三为同步次数,同步次数为三。四次不同步,两次都不同步,除非你继续第三次同步......

我真的不知道这三个时间是从哪里来的,除了可能很有趣。但是在街上的话要做到两次。不是“同步;同步”,而是外壳上的两个单独的行。

回到 V7 UNIX 时代,文件系统修复并不是很有趣。您必须手工完成,了解很多关于文件系统如何工作以及 dcheck、ncheck 和 icheck 等程序的特性。fsck,如果你拥有它,并不总是你会信任的东西。

这听起来像是一个“我们在雪地里走上坡路”的故事。好吧,我们没有像重启或关机这样的花哨命令。当您想重新启动系统时,您将文件系统与同步同步,然后在控制台上按 Ctrl-P 以停止它。

当同步命令退出时,内核已安排同步,但并非所有缓冲区(包括最重要的文件系统超级块)都必须将其发送到磁盘。所以很容易运行同步,然后在安全之前停止。

再次运行同步是一件容易的事情,占用了时间,并且具有一定的直观吸引力,而无需理解所有内容,或者处理诸如“数到 10”之类的模糊指令。

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

更新运行时,如果 CPU 在执行同步时停止,文件系统可能会损坏。这部分是由于 DEC 硬件在 NPR 请求失败时写入零。修复方法是让 sync(1) 临时将系统时间增加至少 30 秒以触发更新的执行。这将为停止 CPU 提供 30 秒的宽限期。

(顺便说一下,这是 V7 手册第 1 卷中的最后一件事)

随着时间的推移,文件系统工具和用于关闭和重新启动系统的程序变得更好,以避免处理这个问题。当系统表现得很神秘时,民间传说、伏都教和系统魔法就会进入其中。同步两次使您不必拿出小镊子将文件系统重新组合在一起的可能性大大降低,因此它成为仪式的一部分。一旦你做了很多次,你就会不假思索地去做。然后有人注意到并问为什么。答案类似于,“总是那样做。这样更安全。”

我不会声称这是权威的,我可能对某些细节有误解。但我认为它非常接近起源。