8.3. 关于关机的更多信息

在关闭 Linux 系统时,遵循正确的步骤非常重要。 如果您不这样做,您的文件系统可能会损坏,文件可能会变得混乱。 这是因为 Linux 有一个磁盘缓存,它不会立即将内容写入磁盘,而只是以一定的时间间隔写入。 这大大提高了性能,但也意味着如果您只是随意关闭电源,缓存可能会保存大量数据,并且磁盘上的内容可能不是一个完全正常的文件系统(因为只有部分内容已写入磁盘)。

反对直接拨动电源开关的另一个原因是,在多任务系统中,后台可能有很多事情在进行,而直接断电可能会是灾难性的。 通过使用正确的关机顺序,您可以确保所有后台进程都可以保存其数据。

正确关闭 Linux 系统的命令是 shutdown。 它通常以两种方式之一使用。

如果您运行的系统只有您一个用户,那么使用 shutdown 的常用方法是退出所有正在运行的程序,注销所有虚拟控制台,以 root 身份登录其中一个控制台(或者如果您已经是 root 用户,则保持 root 身份登录,但您应该切换到 root 的主目录或根目录,以避免卸载问题),然后给出命令 shutdown -h now (替换now如果您想要延迟,可以使用加号和一个以分钟为单位的数字来代替,尽管在单用户系统上您通常不需要这样做)。

或者,如果您的系统有多个用户,请使用命令 shutdown -h +time message,其中time是以分钟为单位的时间,直到系统停止运行,以及message是系统关机的简短说明。

# shutdown -h +10 'We will install a new 
disk.  System should
> be back on-line in three hours.'
#
这将警告所有人系统将在十分钟后关闭,他们最好离开或丢失数据。 警告会打印到有人登录的每个终端,包括所有 xterm
Broadcast message from root (ttyp0) Wed Aug  2 01:03:25 1995...

We will install a new disk.  System should
be back on-line in three hours.
The system is going DOWN for system halt in 10 minutes !!
警告会在启动前自动重复几次,随着时间临近,间隔会越来越短。

当真正的关机在任何延迟后开始时,所有文件系统(除了根文件系统)都会被卸载,用户进程(如果有人仍然登录)会被终止,守护进程会被关闭,所有文件系统都会被卸载,通常一切都会稳定下来。 完成后,init 会打印一条消息,提示您可以关闭机器电源。 然后,并且只有在那时,您才应该将手指移向电源开关。

有时,尽管在任何好的系统上都很少见,但不可能正确关机。 例如,如果内核崩溃并死机,并且通常行为不端,则可能完全无法发出任何新命令,因此正确关机有点困难,您几乎可以做的就是希望没有受到太严重的损坏并关闭电源。 如果问题不那么严重(例如,有人用斧头敲击了您的键盘),并且内核和 update 程序仍然正常运行,那么最好等待几分钟,让 update 有机会刷新缓冲区缓存,然后再断电。

在过去,有些人喜欢使用 sync 命令关机三次,等待磁盘 I/O 停止,然后关闭电源。 如果没有正在运行的程序,这等同于使用 shutdown。 但是,它不会卸载任何文件系统,这可能会导致 ext2fs “干净文件系统”标志出现问题。 不建议使用三同步方法。

(如果您想知道:三次同步的原因是在 UNIX 的早期,当命令是单独键入时,这通常为完成大部分磁盘 I/O 提供了足够的时间。)