在closureslinux之前仍然需要同步(8)的执行吗?

我仍然看到有人推荐使用sync; sync; sync; sleep 30; halt sync; sync; sync; sleep 30; halt 在谈论closures或重新启动Linux时sync; sync; sync; sleep 30; halt咒语。

我从一开始就一直在运行Linux,尽pipe这是BSD 4.2 / 4.3和SunOS 4天的推荐程序,但我不记得我至less在过去十年中必须这样做,在此期间我可能经历了Linux的关机/重启,可能有数千次。

我怀疑这是一个不合时宜的时代,因为即使在单用户模式下(例如/ tmp),内核也不能卸载和同步文件系统和其他关键文件系统,因此有必要明确告知它尽可能多的数据到磁盘。

现在,在内核源代码中没有find相关的代码(通过http://lxr.linux.no和google进行挖掘),我怀疑内核是否足够聪明,即使是根文件系统也能够干净地卸载,而且文件系统足够聪明在正常shutdown / reboot / poweorff期间卸载之前有效地进行同步(2)。

只有在文件系统不能完全卸载的情况下(例如物理磁盘故障)或系统处于只强制直接重启(8)的状态时,才会将其"sync; sync; sync"冻结(例如,负载太高,无法安排关机命令)。

在卸载可移动设备之前,我也从不执行sync过程,并且从来没有遇到任何问题。

另一个例子–Xen允许从Dom0发送shutdown命令,这被认为是“干净的关机”,没有任何人必须login并键入魔法sync; sync; sync sync; sync; sync 首先sync; sync; sync

我是对的,还是因为几千次系统closures而感到幸运?

人们会跑sync; sync的原因sync; sync halt之前的sync; sync是因为halt命令不会在较老的linux上干净地closures系统。 在SYSVr4系统上执行此操作的正确方法始终是告诉init移至不同的运行级别。

BSD和SunOS 4不是SYSVr4操作系统,这就是它们不同的原因。 Solaris(SunOS 5)是SYSVr4,Linux挑选出想要使用的SYSVr4标准的位。

使用halt实际上是在大多数UNIX(Linux是例外之一)上执行它的一个非常糟糕的方式,因为它实际上并没有运行init脚本来执行诸如停止进程和卸载磁盘之类的事情 – 它只是停止处理器。

如果你可以保证永远不会使用任何types的UNIX系统,那么你可以继续使用halt – 如果有机会你会使用其他的UNIX,那么我build议养成使用init _runlevel_shutdown

shutdown命令实际上告诉init进程改变它的运行级别运行级别 ,这样init会继续运行与该运行级别相关的每个K * init脚本和S * init脚本。 运行级别0中的一个脚本执行卸载文件系统。

在Linux上, halt命令只是调用shutdown命令,除非运行级别已经是0(closures)或6(重新启动) 所以没有损失那里。

使用umount卸载文件系统的操作将在卸载之前将数据同步到磁盘。

如果你一直在运行sync; sync; halt sync; sync; halt 因为开发人员已经确保halt来做正确的事情,所以在Linux上sync; sync; halt来的时候你可以保持文件系统状态。 但是,使用shutdown now更加正确

使用多个sync调用是为了让操作系统和磁盘有时间来刷新写入队列。 "sync; sync; sync"不被认为是有用的; 一个做了"sync<cr> sync<cr> sync<cr" ,而你的ASR-33做了回车/换行提供了足够的延迟。 停止总是呼叫同步; 问题是在断电之前是否有足够的时间来排队。

原始海报的sync; sleep 30 sync; sleep 30更符合目标。

只能说出为什么你会多次发出sync 。 该命令调度刷新到磁盘,但在实际刷新完成之前返回。 任何后续的sync命令都会阻塞,直到任何未完成的刷新正在进行,然后再安排其他刷新和退出。 因此, sync; sync sync; sync确保同步刷新。 你不需要做2次以上,也不需要sleep

你们告诉我们所有的“同步;同步”同步没有任何目的是揭示你的年龄。

回到过去的好时代,在Unix是青less年时代之前,我们曾经不得不使用TAPE来满足我们的stream媒体/备份需求。 通常情况下,我们会挂载一个基于磁带的文件系统来备份数据,等等。 这是一个很薄的磁带塑料带,我们有一些人,把我们的文件存储..

“同步;同步;同步”命令是一种方式,这些旧的磁带机可以告诉自己倒退到最后(关机之前) – 他们有板上的固件,可以接收同步cmd(就像所有好的文件系统如果几乎立即跟随两个同步缓冲命令,则磁带驱动器本身将解释这意味着“倒带和卸下磁带”。 没有任何办法可以告诉磁带机倒带,超出这个方法,而且有点卡住了。当硬盘变得更加可用的时候,这个习惯就传递到了这个词上 – 我们硬的老操作员不仅仅是重新分配)我们的肌肉记忆你知道! 我相信在磁带变得不那么普遍,硬盘驱动器变得更加可用之后不久,它就实现了民间传说的地位,但对于我们这些使用磁带驱动器的人来说,它仍然有其用途。