最近使用した会社のコンピュータが起動時にクラッシュする

最近使用した会社のコンピュータが起動時にクラッシュする

最近のアップデート後、コンピュータはもう起動しません!私が確認できるのは次のとおりです。

  • これは会社の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/shGrubのコマンドラインに追加してルートシェルを取得できます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.targetsystemctl set-default multi-user.targetGUIがないサーバーの場合)。
    • systemd.debug-shelltty9でルートシェルを起動します。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月に公開されたセキュリティ問題です。いくつかのカーネルコードといくつかのカーネルコードの間に非互換の問題があります。プロセッサマイクロコードこれにより、場合によってはロックが発生することがあります。

修正する方法

  1. 正しく起動しない場合は、Grubプロンプトでカーネルコマンドラインを編集する必要があります。説明とルートシェルを入手する方法については、質問を参照してください。
  2. この特定のエラーの回避策は次のとおりです。noibpbカーネルコマンドラインにパラメータを追加する1746418/141759920/56)。これにより、正常に起動していくつかの回復を実行できます。
    これにより、問題を引き起こした脆弱性の軽減が無効になります。つまり、コンピュータが特定の攻撃に対して脆弱になります。これはローカル攻撃です。つまり、攻撃者はコンピュータ上でコードを実行する必要がありますが、これらの攻撃は、たとえばWebブラウザのJavaScriptを介して実行される可能性があります。
    他の方法がない場合は、noibpb修正されたカーネルが得られるまでカーネルコマンドラインに追加して永続的に作成できます。
  3. 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.targetsystemctl set-default basic.target)に設定し、debug-shellサービス(systemctl enable debug-shell)を有効にしてルートシェルを取得しました。

私はsystemctl list-dependencies multi-user.target1つずつリストされた依存関係を実行し、手動で起動しました。これは衝突を起こさなかった。

すべてのサービスが直接提供されるわけではありません。システム。一部は次のように管理されます。突然現れるサービスの一部は次のように管理されます。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診断とソリューション。

関連情報