我从一开始就一直在运行Linux,虽然这是BSD 4.2 / 4.3和SunOS 4天的推荐程序,但我记不起至少在过去的十年中我必须这样做,在此期间我可能经历了几千次Linux的关机/重启.
我怀疑这是不合时宜的,因为内核无法卸载和同步根文件系统和其他关键文件系统即使在单用户模式(例如/ tmp)期间也需要,因此有必要明确告诉它尽可能多的数据到磁盘.
现在,如果没有在内核源代码中找到相关代码(通过@L_403_1@和google挖掘),我怀疑内核足够智能,甚至可以干净地卸载根文件系统,文件系统足够智能,可以有效地进行同步(2)在正常关机/重启/ poweorff期间卸载之前.
“sync; sync; sync”仅在文件系统无法彻底卸载(例如物理磁盘故障)或系统处于仅强制直接重启(8)的情况下才能从其中取出冻结(例如,负载太高,无法安排关机命令).
在卸载可移动设备之前,我也从不执行同步过程,也从不遇到问题.
另一个例子 – Xen允许DomU从Dom0发送一个关闭命令,这被认为是“干净关闭”,没有任何人必须登录并键入魔法同步;同步;先同步.
我是对的,还是幸运的是几千个系统停机?
解决方法
BSD和SunOS 4不是SYSVr4操作系统,这就是它们不同的原因. Solaris(SunOS 5)是SYSVr4,Linux选择它想要使用的SYSVr4标准位.
使用halt实际上是在大多数UNIX上执行它的一种非常糟糕的方式(Linux是其中一个例外),因为它实际上并不通过init脚本来执行诸如停止进程和卸载磁盘之类的事情 – 它只是停止了处理器.
如果你可以保证你永远不会使用任何类型的UNIX系统而不是Linux那么你可以继续使用停止 – 如果有可能你会使用其他UNIX然后我建议养成使用习惯init _runlevel_或shutdown.
shutdown命令实际上告诉init
进程更改其运行级别run level – 这样做init然后继续运行每个K * init脚本和与该运行级别关联的S * init脚本.运行级别0中的一个脚本执行文件系统的卸载.
在Linux上,halt命令只调用shutdown命令,除非运行级别已经为0(关闭)或6(重新启动)anyway;所以没有损失.
使用umount卸载文件系统的操作会在卸载之前将数据同步到磁盘.
如果你一直在运行同步;同步;在Linux上停止你对文件系统状态一直没有问题,因为开发人员确保停止做正确的事情;但是使用它会更正确:立即关闭