您应该同步的理念是否正确?同步;同步;同步?

您应该同步的理念是否正确?同步;同步;同步?

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

从那时起我就一直保持着这个习惯,但是,这样做有什么好处吗?还有其他人听过这个吗?最重要的是,任何人都可以提供良好的理由/经验证据来支持/反对您需要运行sync多次才能有效的想法吗?

答案1

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

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

谷歌搜索导致了一些独立的并发分析,例如同步传奇。也可以看看关闭linux之前还需要执行sync(8)吗?

答案2

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

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

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

答案3

当然,对于某些较旧的 UNIX 系统来说,多次同步会更安全,但并不是所有的同步都在一个命令行上进行“同步;同步;同步”。在 80 年代中期,这被提炼为:

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

我真的不知道这三次是从哪里来的,只是也许很有趣。但街上的话就做了两次。不是作为“sync;sync”,而是作为 shell 上的两行单独的行。

早在 V7 UNIX 时代,文件系统修复就没那么有趣了。您必须手动完成此操作,了解文件系统的工作原理以及 dcheck、ncheck 和 icheck 等程序的特性。 fsck,如果你有的话,并不总是你会信任的。

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

当同步命令退出时,内核已安排同步,但并非所有缓冲区(包括最重要的文件系统超级块)都一定已到达磁盘。因此,运行同步然后在安全之前停止是非常容易的。

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

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

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

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

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

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

相关内容