最近のアップデート後、コンピュータはもう起動しません!私が確認できるのは次のとおりです。
- これは会社の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
)、複数のサービスが起動してから操作が停止します。 init=/bin/sh
Grubのコマンドラインに追加してルートシェルを取得できますlinux
。追加するとさらに進むことができます。systemd.unit=basic.target systemd.shell
これにより複数のサービスが開始され、tty9 でルートシェルが実行されます。
- ルートシェルで実行すると、
systemctl start multi-user.target
コンピュータがロックされます。したがって、これらのサービスのいずれかによって問題が発生する可能性があります。 - 私は
systemctl list-dependencies multi-user.target
どのサービスが開始されたかを確認するために走りました。リストされた依存関係を1つずつ手動で開始しましたが、すべてがうまく始まりました。
したがって、これは一部のソフトウェアによって発生したハードウェア障害のように見えます(あるコンピュータでは発生しますが、他のコンピュータでは発生しないため)。ところでどんなソフトウェアか。コンピュータが停止しすぎてログを取得できませんでした。便利なコンソール出力も得られません。
便利なデバッグ技術:
- Alt+ SysRq:SysRq マジックキーを使用すると、緊急再起動などの操作を実行できます。非常に低いレベルでカーネルにアクセスするので、最も深刻な競合を除いてすべてがうまく機能します。私の場合、Alt+はSysRq応答しないため、衝突の重大度を示します。
- Shift起動パラメータを変更するには、電源を入れて数秒間押し続けます。 BIOSがキーボードを初期化した後、オペレーティングシステムが起動する前にこのキーを押す必要があります。これは作る幼虫メニューが表示されます。
- GrubメニューのeCommand Lineを押してメニュー項目を編集します。 Linuxブートパラメータを変更するには、で始まる行に移動します
linux
。最新のUbuntuでは、「Ubuntu用の高度なオプション」で古いカーネルを見つけることができます。コマンドラインを必要に応じて変更し、Ctrl+xスタートを押します。ここで行った変更はこの実行にのみ適用され、ディスクには保存されません。 - コマンドラインのいくつかの便利なオプションは次のとおりです
linux
。quiet nosplash
ほぼすべての開始メッセージを非表示にします。問題の診断に必要な起動時にコンソールにメッセージを表示するには、それを削除します。recovery
サービスの少ないルートシェルを提供します。ルートパスワードを知る必要があります。 「回復モード」メニュー項目はこの機能を使用します。init=/bin/sh
サービスがまったくないルートシェルを提供します。通常の起動を再開するには、を実行しますexec init
。この時点で、initや一部のサービスの起動などのsystemdオプションを渡すことができますexec init --unit=basic.target
(これはログイン方法を開始しないため、他のコンソールでシェルを実行する方が良いです)。ルートファイルシステムは読み取り専用でマウントされ、書き込み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
。 tty9に切り替えるにはAlt+を押します。F9- また、見ることができますFedoraシステムプロンプト、Arch Linuxの起動に関する問題のヒント。
答え1
質問
私の問題は(いくつか?)Skylake CPUの最新のIntelマイクロコードと最新のLinuxカーネルの間の既知の問題であることがわかりました。SSD。バラよりUbuntuのバグ#1759920同じ問題に関連する他のいくつかのエラー(例:Ubuntuのバグ#1746806 "sssdがAWS c5およびm5インスタンスとクラッシュしてCPU 100%を引き起こすようです。"そしてUbuntuのバグ#1746418 "linux-image-4.13.0-32-genericをインストールした後、Xorgを起動するとシステムがハングします。"。次の場合、このエラーが発生する可能性があります。
- 最新のIntel CPUを使用しています。私が知っている限り、このエラーは以下でのみ表示されます。チョンホCPU。
- あなたはインテルマイクロコードパッケージがインストールされました。テスト済みの古いカーネルに戻ることは、以前のマイクロコードでのみそのカーネルを実行できるため、機能しません。
- ユーザー認証のために、コンピュータは企業ネットワーク(通常はLDAPまたはActive Directory)に接続されています。エラーを発生させる別の方法がありますが、次を実行してください。SSD最も一般的な犯人のようです。という報告もある。Xorgクラッシュ。
このエラーは軽減によって発生します。幽霊2018年1月に公開されたセキュリティ問題です。いくつかのカーネルコードといくつかのカーネルコードの間に非互換の問題があります。プロセッサマイクロコードこれにより、場合によってはロックが発生することがあります。
修正する方法
- 正しく起動しない場合は、Grubプロンプトでカーネルコマンドラインを編集する必要があります。説明とルートシェルを入手する方法については、質問を参照してください。
- この特定のエラーの回避策は次のとおりです。
noibpb
カーネルコマンドラインにパラメータを追加する(1746418/14、1759920/56)。これにより、正常に起動していくつかの回復を実行できます。
これにより、問題を引き起こした脆弱性の軽減が無効になります。つまり、コンピュータが特定の攻撃に対して脆弱になります。これはローカル攻撃です。つまり、攻撃者はコンピュータ上でコードを実行する必要がありますが、これらの攻撃は、たとえばWebブラウザのJavaScriptを介して実行される可能性があります。
他の方法がない場合は、noibpb
修正されたカーネルが得られるまでカーネルコマンドラインに追加して永続的に作成できます。 - Ubuntuでは修正が予想されます2018年4月23日週間、おそらくカーネル4.4.0-117と4.13.0-39でしょう。同時に、Tyler Hicksがテストカーネルをリリースしました。~のため4.4そして4.13。
この問題をどのように診断しますか?
私はいくつか試しました(質問を参照)、basic.target
到達と到達の間のどこかでエラーが発生したことを確認しましたmulti-user.target
。そのため、デフォルトのsystemdターゲットをbasic.target
(systemctl set-default basic.target
)に設定し、debug-shell
サービス(systemctl enable debug-shell
)を有効にしてルートシェルを取得しました。
私はsystemctl list-dependencies multi-user.target
1つずつリストされた依存関係を実行し、手動で起動しました。これは衝突を起こさなかった。
すべてのサービスが直接提供されるわけではありません。システム。一部は次のように管理されます。突然現れるサービスの一部は次のように管理されます。SysVinitスクリプト。以下のシェルスクリプトはこれらすべてを実行します。注:私はこれを一度だけテストしましたが、設計どおりに動作が停止しました。
#!/bin/sh
wants=$(systemctl show -p Wants multi-user.target | sed 's/^Wants=//' | tr ' ' '\n' | sort)
log=/var/tmp/multi-user-steps-$(date +%Y%m%d-%H%M%S)
log () {
echo "$* ..." | tee -a "$log"
sync
"$@"
ret=$?
echo "$* -> $ret" | tee -a "$log"
sync
return $ret
}
# systemd services
for service in $wants; do
log systemctl start $service
sleep 2
done
# upstart services
for conf in /etc/init/*.conf; do
service=${conf##*/}; service=${service%.conf}
log service ${service} start
sleep 2
done
# sysvinit services
for service in /etc/rc3.d/S*; do
log ${service} start
sleep 2
done
コンピュータが起動するとすぐに動作が停止しますsssd
。そこで、「sssd linux kernelhang」のウェブ検索で次のような結果が得られました。https://bugs.launchpad.net/cloud-images/+bug/1746806診断とソリューション。