为什么“shutdown -r now”与 Debian Linux 上的“rebo​​ot -f”行为不同?

为什么“shutdown -r now”与 Debian Linux 上的“rebo​​ot -f”行为不同?

我最近不得不处理一个棘手的、间歇性的 NFS 客户端/服务器挂起挂载点问题。当问题发生在客户端上时,我无法卸载,还有一些其他奇怪的行为。到目前为止,我唯一的直接解决办法是重新启动客户端。

但根本shutdown -r now不起作用。后来我发现reboot -f重新启动系统。为什么?我读过手册页,但似乎没有什么能回答我的问题。

为什么shutdown -r now行为与不同reboot -f

(我正在继续解决 NFS 问题,但这不是我这里的问题。)

答案1

来自关机手册页:

一旦 TIME 时间过去,shutdown 就会向 init(8) 守护进程发送一个请求,让系统进入适当的运行级别。

init在系统更改运行级别时启动和停止作业。由于重新启动而进入运行级别 6 时,系统将运行 /etc/rc6.d 中的所有脚本。由于您的系统没有响应shutdown,很可能是 中的脚本/etc/rc6.d(可能是K05nfs-common由于您的 NFS 问题)卡住了,导致无法完成关机序列。事实上,在更改为运行级别 6 时 init 运行的最后一件事是reboot -d -f -i

reboot -f跳过所有脚本并直接重启系统。

答案2

shutdown指示init开始关机程序,包括让登录用户知道系统正在关机、正常终止所有进程、卸载和同步驱动器等。您在这里被挂起是因为等待 IO 的进程往往很难终止,而您挂起的 NFS 挂载无法卸载。

reboot -f另一方面,立即重新启动服务器而不执行任何操作。(reboot程序init调用来关闭服务器。如果没有该-f标志,它将检查是否init认为它当前正在重新启动,如果不是,它将调用shutdown来启动该过程)。

答案3

因为“rebo​​ot -f”不会进入运行级别 0 - 它告诉操作系统直接重新初始化 CPU。我最近的 Linux 机器上的手册页显示:

 -f     Force halt or reboot, don't call shutdown(8)

关机手册页有更多解释。

答案4

如果您intr在 NFS 挂载上使用该选项,则shutdown -r now应该能够终止等待 NFS IO 完成的进程。这可能会导致文件损坏,但可能不会比shutdown -f创建文件更多。

相关内容