かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.15 ラボ環境 on Azureを作る(3)- 更新エラーの解消

 

 

vol.15 ラボ環境 on Azureを作る(3)- 更新エラーの解消

2024年06月03日配信
2024年07月12日更新
執筆者:山内 和朗

 前回は、Azure VMをデプロイしてリモートデスクトップ(RDP)接続を確認したところまで進みました。今回はこのVMのOS環境を整えていきます。まずは、「停止済み(割り当解除状態)」状態のAzure VMを開始して、リモートデスクトップ接続しましょう(注:コスト削減のためディスクの種類を低料金のものに変更していた場合は、元の種類に戻してから)。

 今回は、最初にやるべきことを済ませていきたかったのですが、それを中断させるエラーに遭遇しました。Windows Updateの更新の履歴に、このブログの読者ならよくご存じのあのエラーが報告されているのを目にしたからです。

 

[smalldisk]の留意点とWindows Server 2022ゲストの問題点

 

 前回、「[smalldisk]Windows Server 2022 Datacenter - x64 Gen2」イメージからAzure VMをデプロイしました。Azure MarketplaceのWindowsイメージのOSディスクは128GBが既定ですが、[smalldisk]が付くWindowsイメージは30GBのOSディスクで作成されており、OSディスクのストレージ料金(Managed Disksの料金≪外部サイト≫)を節約するのに効果があります。しかし、前回触れたように、私のオンプレミスのHyper-Vホスト環境のC:ドライブの使用量は既に30GBを超えているため、OSディスクのサイズを既定の30GBから64GBに変更しました。以前はこのようなことはできなかったと記憶していますが、現在はOSディスクのサイズを選択できるようになっています。

 

 Azure Marketplaceの[smalldisk]イメージは30GBのディスクイメージであるため、64GBのOSディスクに変更したとしても、そのままではOSディスクの後ろ34GB未割割り当ての状態です。[smalldisk]イメージを30GB以上のOSディスクを選択してデプロイした場合、最初に行うべきことの1つに、C:ボリューム(OSパーティション)の拡張があります。ボリュームを拡張するために、Server Coreの場合はDISKPARTコマンドを使用する必要がありますが、Desktop Experienceの場合は「Disk Management(ディスクの管理)」スナップイン(Diskmgmt.msc)を使用してGUIで簡単に操作できます(画面1)。ただし、未割り当ての領域(34815MB)のすべてを使って拡張するのではなく、ここでは1GB(1024MB)だけ残して拡張(34815ー1024=33791を拡張)します。その理由はこの後すぐに分かります。

画面1
画面1 未割り当ての領域に1GB(1024MB)だけ残してC:ドライブのボリュームサイズを拡張する

 

 Windows Server 2022ベースのイメージ(少なくとも2024年4月までのイメージ)を使用してAzure VMをデプロイし、Windows Updateを実行すると、もれなくある更新プログラムのインストールに失敗してエラーになります(画面2)。このブログのvol.1vol.6で説明してきた、あのWindows回復環境(WinRE)のセキュリティ更新プログラム(Windows Server 2022の場合はKB5034439≪外部サイト≫)の問題です。

画面2
画面2 Windows Server 2022のAzure VMでは、Windows Updateの度にKB5034439のインストールがエラーで失敗する

 Windows Server 2022ベースのAzure VMのエラーの原因は、回復パーティションの領域不足ではありません。WinREが無効になっていることが原因で回避策はあります(Server Coreの場合は別の理由でやはり失敗し、2024年4月時点で回避策は存在しません)。

 Azure MarketplaceにあるWindowsイメージは、WinREが無効化されており、回復パーティションもセットアップされていません。おそらく、WinREが有効になっていたとしても、それを使用して再起動した後にコンソールに対話して作業することが、クラウド環境ではできないからです(少なくともAzureではできません、「ブート診断」機能でコンソール表示を確認することはできます)。WinREが無効になっているのは、Windows Server 2022イメージに限らず、Windows Server 2019やWindows Server 2016イメージの場合も同様です。

 Windows Server 2019以前のWindows Serverバージョンには、WinREのセキュリティ更新プログラムがリリースされていませんが、Windows Server 2022向けには2024年1月にKB5034439(外部サイト)としてリリースされました。WinREが無効になっている限り、またはこの問題に対する回避策を講じない限り、Windows Updateの度に同じエラーが繰り返される可能性があります(Microsoftは2024年4月30日にこの問題のステータスを「解決済み」にしましたが、解決するためにはマニュアルによる対応が必要です)。

 

エラー解消のため、クラウドでは無用なWinRE環境を敢えて整える

 

 Azureというクラウド環境では、WinREは必要ないわけですが、WinREが有効になっていないと、当面(Microsoftが何らかの対処を行うまで)、問題の更新プログラムKB5034439のエラーが繰り返されることになります。そこで、WinREが必要ないことは分かっていますが、更新プログラムのエラーを回避する目的で、回復パーティションとWinREをセットアップしようと思います。このブログのvol.1~vol.6の内容や、vol.12のトラブル解決解決事例をお読みになった方なら、この場合の具体的な手順は書いていませんが、それができそうなことは分かるはずです。

 OSディスクに未割り当て領域を1GB(1024MB)だけ残しておいたのは、正にこのためです。まず、DISKPARTコマンドを使用して、回復パーティションを作成します。前回デプロイしたAzure VMの場合、OSパーティションはディスク0のパーティション4にあるので、残りの1GB(1024MB)の未割り当て領域をすべて使って回復パーティション(パーティション5になります)を作成します。

C:\> DISKPART
DISKPART> LIST DISK
DISKPART> SELECT DISK 0
DISKPART> CREATE PARTITION PRIMARY
DISKPART> FORMAT QUICK FS=NTFS LABEL="WinRE"
DISKPART> set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
DISKPART> gpt attributes=0x8000000000000001
DISKPART> LIST PARTITION
DISKPART> EXIT

 

 Azure MarketplaceのWindows Server 2022イメージには、一度もWinREがセットアップされていません。そのため、「C:¥Windows¥System32¥Recovery」にもWinREイメージ(winre.wim)は存在しません。どこかから、WinREイメージを持ってこない限り、WinREをセットアップすることはできないのです。

 方法の1つは、Windows Server 2022のインストールメディア(ISO)に収録されているOSのインストールイメージ「Install.wim」をローカルパスにマウントして、「<マウント先のパス>¥Windows¥System32¥Recovery」にあるWinREイメージを、「C:¥Windows¥System32¥Recovery」にコピーし、その後、WinREを有効化します。以下のコマンドラインは、ISOイメージはE:ドライブにマウントされており、マウント先としてC:¥work¥mount(空のディレクトリ)を使用する場合の実行例です。

C:\> DISM /mount-image /imagefile:E:\Sources\Install.wim /Index:1 /MountDir:C:\work\mount /ReadOnly
C:\> XCOPY /h C:\work\mount\windows\system32\recovery\winre.wim C:\Windows\System32\Recovery
C:\> DISM /Unmount-Image /MountDir:C:\work\mount /Discard
C:\> reagentc /enable
C:\> reagentc /info

 

 もう1つの方法は、WinREが有効になっているWindows Server 2022からWinREイメージをコピーしてくる方法です。WinREを一時的に無効にし、「C:¥Windows¥System32¥Recovery」をZIP圧縮して(画面3)、リモートデスクトップ接続のクリップボード経由でAzure VMにコピーします。ZIP圧縮後にWinREを有効化すれば、コピー元は元の状態に戻ります。次に、Azure VMにコピーしたZIPファイルをAzure VM側で展開し、XCOPYコマンドで「C:¥Windows¥System32¥Recovery」にコピーします。コピー後、WinREを有効化すれば、新たに作成した回復パーティション(パーティション5)にWinREがセットアップされ、有効になるはずです(画面4)。

画面3
画面3 オンプレミスのWindows Server 2022環境でWinREを一時的に無効化し、「C:¥Windows¥System32¥Recovery」をZIP圧縮して、Azure VMにリモートデスクトップ接続経由でコピー

 

画面4
画面4 「Recovery.zip」を展開し、WinREイメージを「C:¥Windows¥System32¥Recovery」にコピーしてから、WinREを有効化する

 回復パーティションに十分な空き領域があり、WinREが有効になっていれば、失敗していたKB5034439のインストールは、次のWindows Update時に成功するはずです(画面5)。なお、最新状態の Windows Server 2022からコピーしたWinREイメージ(つまり、パッチ済みのWinREイメージ)であっても、更新プログラムKB5034439は検出され、ダウンロード、インストールされます。

画面5
画面5 失敗していたKB5034439のインストールが成功

 最後にもう一度指摘しておきますが、Server CoreベースのWindows Server 2022では、この手順を実施してもエラーは解消しません。KB5034439には、Server Core固有の問題があります。

 

 今回はここまでにしておきましょう。Azure VMのゲストOSをシャットダウンし、さらにAzure VMを「停止済み(割り当て解除)」状態にすることを忘れずに。マネージドディスクの種類の変更による、ストレージのコスト抑制対策も。

 

blog_subscribe

blog_comment

最新記事