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