最近の更新の後、コンピューターが起動しなくなりました!ここに私が決定できるものがあります:
- これは、企業ITから提供されたごく最近のコンピューターです。最新のIntel CPU(Skylake世代)が搭載されています。
- コンピューターはUbuntu 16.04を実行します。
- コンピューターは3月に最後に正しく起動しました。この問題は、おそらくソフトウェアの更新またはハードウェアのバグが原因です。
- 16.04を実行している別のコンピューターで、ほとんど同じソフトウェアがインストールされています(使用しました
apt-clone
)が、正常に動作します。異なるハードウェア(amd64ですが、異なるCPU、異なるGPUなど)があります。 - カーネルは起動し、initrdは正しく動作します。グラフィックモードでスプラッシュスクリーンで起動すると、dm-cryptボリュームのパスワードの入力を求められますが、最後に表示されるのは、正常にマウントされたことです。
- ログインプロンプトが表示される前にハングします。コンピューターがハングすると、ハードハングになります。Alt+ でもSysRq応答しません。ファンが完全にオンになるので、CPUは明らかに100%に固定されています。
- 再起動する前に実行していたカーネルがまだあります。Grubメニューでこのカーネルを選択すると、同じロックアップが得られます。したがって、これは既存のカーネルバグであり、他の何かによってトリガーされるように見えますが、それは何ですか?
- スプラッシュスクリーンをオフにすると(Grub
splash
のlinux
コマンドラインから削除)、多数のサービスが開始され、ロックされます。 Grubのコマンドラインに追加
init=/bin/sh
することで、ルートシェルを取得できますlinux
。さらに追加することでさらに取得できますsystemd.unit=basic.target systemd.shell
これにより、多数のサービスが開始され、tty9でルートシェルが実行されます。
systemctl start multi-user.target
そのルートシェルから実行すると、コンピューターがロックします。したがって、これらのサービスのいずれかによって問題が引き起こされていると考えられます。systemctl list-dependencies multi-user.target
どのサービスが開始されるかを確認するために走りました。リストされた依存関係を1つずつ手動で開始し、すべてが正常に開始されました。
そのため、これはハードウェアのバグのように見えます(1台のコンピューターでは発生しますが、他のコンピューターでは発生しないため)。一部のソフトウェアによってトリガーされます。しかし、どのソフトウェアですか?コンピューターが非常に激しくロックするため、ログを取得できません。有用なコンソール出力も取得できません。
便利なデバッグ手法:
- Alt+ SysRq:マジックSysRqキー。緊急リブートなどを実行できます。非常に低いレベルでカーネルにアクセスするため、最悪のクラッシュ以外のすべてで機能します。私の場合、Alt+ SysRqは応答しません。これは、クラッシュの深さを示しています。
- ブートパラメータを変更するにはShift、電源を入れた後、数秒間押し続けます。BIOSがキーボードを初期化した後、オペレーティングシステムが起動する前に押す必要があります。これにより、Grubメニューが表示されます。
- Grubメニューで、を押しeてメニューエントリのコマンドラインを編集します。Linuxブートパラメーターを変更するには、で始まる行に移動します
linux
。最新のUbuntuでは、「Ubuntuの詳細オプション」の下に古いカーネルがあります。コマンドラインに必要な変更を加えたら、Ctrl+ xを押して起動します。ここで行った変更は、このブート専用であり、ディスクには保存されません。 linux
コマンドラインのいくつかの便利なオプション:quiet nosplash
ほとんどすべてのブートメッセージを非表示にします。それらを削除して、ブート中にコンソールにメッセージを取得します。これは、問題を診断する機会を得るために必要です。recovery
サービスがほとんどないルートシェルを提供します。ルートパスワードを知る必要があります。「リカバリモード」メニューエントリはこれを使用します。init=/bin/sh
サービスのないルートシェルを提供します。通常の起動を再開するには、を実行しexec init
ます。この時点で、systemdオプションを渡すことができます。たとえばexec init --unit=basic.target
、initおよびいくつかのサービスを開始します(これはログインする方法を開始しないため、別のコンソールでシェルを実行することをお勧めします)。ルートファイルシステムは読み取り専用でマウントされていることに注意してください。mount -o remount,rw /
それに書き込むことができるように実行します。systemd.unit=basic.target
非常に基本的なサービスセットを開始します。これにはログインする方法が含まれていないことに注意してください!これをデフォルトにするにsystemctl set-default basic.target
は、ルートプロンプトで実行します。元のデフォルトのターゲットを復元するには、実行しますsystemctl set-default graphical.target
(またはsystemctl set-default multi-user.target
GUIのないサーバーの場合)。systemd.debug-shell
tty9でルートシェルを開始します。systemctl enable debug-shell
ルートプロンプトで実行することにより、ブートごとにこれを有効にできます。で問題を解決した後、これを無効にすることを忘れないでくださいsystemctl disable debug-shell
。Alt+ F9を押してtty9に切り替えます。- Fedora systemdのヒント、Arch Linuxブート問題のヒントも参照してください。