2019年12月11日のWindows Update後、Windows Server 2012が再起動を繰り返して正常に起動できなくなることがあるという問題が、翌週明けに公式情報として明らかになりました。影響を受けた場合、「セーフモード」で起動させることで簡単に解消するという手順が示されましたが、もし問題のWindows Server 2012がAzure仮想マシンだったらそう簡単にはいきません。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
2019年12月11日にリリースされたWindows向けの品質更新プログラムは、ホリデーシーズンを理由に、2019年最後の更新プログラムとなりました。そして、12月11日の直後からSNSで「Windows Server 2012」が再起動を繰り返して終わらないという情報が出始めました。
翌週の12月16日、TechNetのJapan Windows Commercial Supportフォーラムで、この問題の原因と対処方法(回避策および問題発生時の対処方法)が報告され、回避策を含むサポート情報「サービススタック更新プログラム(SSU):よく寄せられる質問」が公開されました。
この問題の詳しい原因については上記の情報を見ていただくとして、問題が発生した場合(再起動を繰り返す場合)の回避策は、起動直後に[F8]キーを押して「セーフモード」で起動を試み(1回目は失敗するようです)、セーフモードで起動してから再起動すると、次回から通常起動するというものでした(画面1)。
対処方法が示される前にこの問題に遭遇してしまった方(サーバ管理者など)は、どうやって正常化すればよいのか悩んだと思いますが、対処方法が示された今なら簡単に問題を解消できます。ただし、セーフモードで起動するためには、ローカルコンソールにアクセスできる必要があります。もし、問題が発生したサーバがMicrosoft Azureなどのクラウド上で稼働しているものだとしたらどうすればよいのでしょうか。
また、「Windows Server 2016」からは、起動直後の[F8]キーは既定の状態では利用できなくなりました。電源のリセットを繰り返せば自動修復が始まるので、その後に起動オプションを選択することもできますが、その場合もローカルコンソールにアクセスできることが前提になります。
他のクラウドのことは分かりませんが、Azure仮想マシンの場合は「シリアルコンソール」という機能を利用することで、[F8]キーを使用してセーフモードで起動することができます。
シリアルコンソールは、「ブート診断」が有効になっているAzure Resource ManagerデプロイのWindowsおよびLinux仮想マシンで利用できるもので、リモートデスクトップ(RDP)接続やSSH接続を使用せずに、AzureポータルからWindows Serverの帯域外管理機能であるEMS(緊急管理サービス)の「SAC(Special Administrative Console)」やLinuxの端末(ttys0)に対話的に接続することができます(画面2、画面3)。
シリアルコンソールを利用したセーフモードでの起動とSACのコマンドプロンプト操作によるトラブル対応の方法は、Windows Server 2012だけでなく、「Windows Server 2008」から最新の「Windows Server, version 1909」まで共通して使える方法です(サポートは終了しましたが「Windows Server 2003」からの機能です、クライアントOSでは使用できません)。
ただし、Windows ServerでEMSが有効になっているとしても、既定の状態ではシリアルコンソールを使用してセーフモードで起動することはできないでしょう。シリアルコンソールは[F8]キーを送信する機能がありますが、適切なタイミングで[F8]キーをローカルコンソールに送信する必要があるからです。
つまり、今回の問題のように再起動を繰り返すようになってしまってからでは遅いのです。今回のような問題が今後も起きないとも限らないので、今のうちに準備しておきましょう。
なお、Azure MarketplaceのWindows Serverイメージ(ただし、2018年3月以降のイメージ)であれば、EMSが有効化されており、EMSのSACを使用して再起動やシャットダウン、コマンドプロンプトへのアクセスが可能です。古いイメージからデプロイした仮想マシンやカスタムイメージをアップロードしてデプロイした仮想マシンの場合は、以下のドキュメントに従ってEMSを有効化することで、シリアルコンソールに対応することができます。
Azure仮想マシンのWindows ServerでEMSを有効にしているのは、ブート構成データの以下の設定です。
bcdedit /ems {default} on bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200
しかし、セーフモードで起動するためには、上記の設定でEMSが有効になっているだけでは不十分です。Windows ServerのAzure仮想マシンを通常起動して、RDP接続し、コマンドプロンプトで以下のコマンドラインを実行します。このコマンドラインは、「Windowsブートマネージャー」({bootmgr})のメニューを一定時間(timeout 秒数)、起動時に表示する(displaybootmenu yes)ように構成し、WindowsブートマネージャーでもEMSを有効(bootems yes)にします(画面4)。
bcdedit /set {bootmgr} displaybootmenu yes bcdedit /set {bootmgr} timeout 30 bcdedit /set {bootmgr} bootems yes
このように構成することで、次回の起動または再起動時にシリアルコンソールを開いておけば、シリアルコンソールにWindowsブートマネージャーのメニューが表示されるようになります。
Windowsブートマネージャーのメニューが表示されている待ち時間の間にシリアルコンソールの「Fn」メニューから[F8]キーを送信すれば、「詳細ブートオプション」ページがシリアルコンソールに表示されるので、「セーフモード」またはその他のオプションを選択して起動することができます(画面5)。
なお、セーフモードで起動した場合、Azure仮想マシンへのRDP接続は利用できないため、SACの「CMD」コマンドを使用してコマンドプロンプトに接続して作業するか、SACの「RESTART」コマンドなどを使用して操作してください(画面6)。
問題が発生してからではセーフモードで起動するには遅過ぎるといいましたが、方法がないわけではありません。問題のWindows Serverを含む仮想ハードディスク(VHD)を別のAzure仮想マシンに接続し、オフラインでブート構成データを編集するのです。詳しくは、「Windows用Azureシリアルコンソール」ドキュメントで説明されています。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2019-2020)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.