我运行的是Ubuntu系统,有时需要一段时间才能关闭。显然,简而言之,GNU/Linux 试图停止所有正在运行的进程,刷新文件系统日志,然后切断电源。我的理由是,当断电时,RAM 中保存的所有数据都会丢失,因此系统不需要手动终止进程,因为它们无论如何都会死掉。运行sudo sync
然后断电是否是正确关机 ( shutdown -h now
) 的安全(且速度明显更快)的替代方案,还是会带来硬件/安全危险?
答案1
这样做sudo sync
可确保将应用程序已写入但保留在内存缓冲区中的数据刷新到磁盘。这就是它的全部作用。它不会正确关闭系统,并可能导致数据丢失和其他事故。这并不是灾难性的——众所周知,电源故障会发生——但最好避免这种情况。以下是正确关闭的作用:
- 通知应用程序会话即将终止。应用程序可能会提示您确认关闭,并可能执行紧急保存到文件。他们还可以删除临时文件,否则这些文件会累积。
- 正确关闭网络连接。如果连接突然中断,那么在一段时间内,对方不会意识到您的计算机已经消失,并且会继续尝试向某个连接发送数据或期望从该连接接收数据,而该连接将不会再出现任何生命(即使您的计算机已关闭)。计算机重新启动)。
- 写入日志条目以确认关闭期间发生的情况。如果出现问题并且您需要进行调查,这非常有用。
- 卸载所有文件系统。这将文件系统标记为干净。您可以用关机期间的一点点时间来换取下次启动时更长的时间(但在人类规模上仍然很小1,2),以及遇到错误的较低风险(因为突发故障情况没有像正常情况那样经过彻底测试)手术)。
¹ RAID 卷可能除外:如果需要验证 RAID 卷,则可能需要数小时 - 它是在后台完成的,因此不会阻塞,但确实会导致性能下降。
²除了较旧的非日志文件系统(例如 ext2),它需要很长的时间FSCK如果没有完全卸载。
答案2
不,一般来说这是不安全的。sync
将挂起的数据(当前位于缓冲区中的写入操作的数据)写入磁盘。但是,如果您尚未关闭应用程序,则应用程序可能仍然有尚未写入的数据。
想象一个 GUI 程序,它在启动时读取配置文件,并在程序退出时写入配置文件。如果您更改 GUI 中的设置,sync
将无济于事,因为应用程序尚未写入此数据。
另一个例子是 torrent 客户端。 Async
会将最新数据写入磁盘,但不会断开与覆盖网络的连接。让连接从另一端超时是不礼貌的,如果可能的话,您应该向覆盖层宣布您要离开。
您通常应该给程序一个正确关闭的机会。话虽如此,但在某些情况下这并没有什么区别。但是,文件系统可能仍被标记为肮脏的如果没有正确卸载。
旁注:sync
可以使用用户权限调用。