我最近不得不面对一个烦人的,间歇性的NFS客户机/服务器挂载点问题。 当客户端发生问题时,我不能卸载以及其他一些奇怪的行为。 我唯一的直接解决scheme是重新启动客户端。
但是shutdown -r now根本不起作用。 自从我发现了reboot -f ,它会重启系统。 为什么? 我已阅读手册页,但似乎没有回答我的问题。
shutdown -r now行为与reboot -f不同? (我正在继续解决NFS问题,但这不是我的问题。)
从关机手册页:
一旦TIME过去,关机会向init(8)守护进程发送请求,使系统进入适当的运行级别。
init在系统更改运行级别时启动和停止作业。 由于重新启动而进入运行级别6时,系统将运行/etc/rc6.d中的所有脚本。 由于你的系统没有响应shutdown ,可能是/etc/rc6.d的脚本(可能是K05nfs-common因为你的NFS问题)卡住了,不允许closures序列完成。 实际上,当改变到运行级别6时,init运行的最后一件事是reboot -d -f -i 。
reboot -f跳过所有脚本并直接重启系统。
shutdown指示init开始closures过程,这包括让已login的用户知道系统正在closures,优雅地终止所有进程,卸载和同步驱动器等等。 你被挂在这里,因为进程等待IO往往是非常难以杀死,你的卡住的NFS挂载不能卸载。
reboot -f ,另一方面立即重新启动服务器而不做任何的。 ( reboot是程序init调用closures服务器,如果没有-f标志,它会检查init认为它正在重新启动,如果没有,它会调用shutdown来启动进程)。
因为'reboot -f'没有进入运行级别0,它会通知操作系统直接重新初始化CPU。 我最近的Linux上的手册页说:
-f Force halt or reboot, don't call shutdown(8)
关机手册页解释更多。
如果在NFS挂载中使用intr选项,那么shutdown -r now应该能够终止等待NFS IO的进程来完成。 这可能会导致文件损坏,但可能不会超过shutdown -f创build。