Debian Linuxで「shutdown -r now」の動作が「reboot -f」と異なるのはなぜですか?


11

最近、厄介な断続的なNFSクライアント/サーバーハングマウントポイントの問題に対処する必要がありました。クライアントで問題が発生した場合、他の奇妙な動作とともにアンマウントできません。私が今までに持っている唯一の即時解決は、クライアントボックスを再起動することです。

しかし、shutdown -r nowまったく機能しません。私を発見したので、reboot -fこれは、ありません、システムを再起動します。どうして?私はマニュアルページを読みましたが、私の質問に答えるものは何もないようです。

なぜshutdown -r now動作が異なるのですreboot -fか?

(NFSの問題の解決を続けていますが、それはここでの私の質問ではありません。)

回答:


20

シャットダウンのmanページから:

TIMEが経過すると、シャットダウンはinit(8)デーモンに要求を送信して、システムを適切なランレベルに落とします。

initシステムがランレベルを変更すると、ジョブを開始および停止します。再起動によりランレベル6に入ると、システムは/etc/rc6.d内のすべてのスクリプトを実行します。システムがに応答していないためshutdown/etc/rc6.d(おそらくK05nfs-commonNFSの問題を考慮して)のスクリプトがスタックし、シャットダウンシーケンスが終了しない可能性があります。実際、ランレベル6に変更したときにinitが最後に実行するのはreboot -d -f -iです。

reboot -f すべてのスクリプトをスキップして、システムを直接再起動します。


あなたの答えを私の文脈にリンクしてくれてありがとう。
ストゥトンプソン

12

shutdowninitシャットダウン手順の開始を指示します。これには、システムがシャットダウンしていることをログインユーザーに通知し、すべてのプロセスを正常に終了し、ドライブをアンマウントおよび同期するなどが含まれます。IOを待っているプロセスが強制終了するのは非常に難しく、スタックしたNFSマウントをアンマウントできないため、ここでハングアップしています。

reboot -f、一方で、そのいずれもせずにすぐにサーバーを再起動します。(rebootプログラムinitは、サーバーをシャットダウンするために呼び出します。-fフラグがinitない場合、現在再起動していると考えられるかどうかを確認し、そうでない場合は、shutdown代わりに呼び出してプロセスを開始します)。


あなたの答えを私の文脈にリンクしてくれてありがとう。
ストゥトンプソン

4

'reboot -f'はランレベル0にならないため、OSにCPUを直接再初期化するよう指示します。私の最も近いLinuxボックスのマニュアルページには次のように書かれています。

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

シャットダウンのmanページで詳細を説明しています。


1

intrNFSマウントでオプションを使用する場合shutdown -r now、NFS IOが完了するのを待っているプロセスを強制終了できます。これにより、ファイルが破損する可能性がありますが、shutdown -f作成するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.