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

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.30 VHD(x)に対するオフラインパッチ|続・ラボ環境 on Azure(2)

 

 

vol.30 VHD(x)に対するオフラインパッチ|続・ラボ環境 on Azure(2)

2024年07月25日配信
執筆者:山内 和朗

 Windows Updateはトラブルが無ければよいのですが、トラブルが発生してしまうとその解決に多くの時間がとられる場合があります。まれに原因不明のインストール失敗、ダウンロードとインストールが何時間も進まない、再起動後のクラッシュのループ、クラッシュのループからの自動回復失敗といったケースに遭遇することがあります。トラブルシューティングの方法はいくつかありますが、あまり知られていないオフラインパッチを紹介します。

 前回は、「Windows回復環境(Windows Recovery Environment≪Windows RE、WinRE≫」または「Windowsプレインストール環境(Windows Preinstallation Environment≪Windows PE、WinPE≫」からの手順を紹介しましたが、今回はHyper-V仮想マシン(VM)のオフラインパッチです。VMを起動することなく、仮想ハードディスク(VHDまたはVHDX)に直接オフラインパッチします。

 

VHD(x)をローカルマウントしてのオフラインパッチ

 

 WindowsおよびWindows Serverは、VHDやVHDX(以下、VHD(x))をローカルドライブとしてマウントすることができます。オフラインパッチは第3のOS環境から行うものですが、Hyper-V VMの場合は、そのVMをホストしているWindowsやWindows Server(Hyper-Vホスト)がすぐに利用できる第3のOS環境です。もちろん、VHD(x)を別のマシンにコピーして、そこでオフラインパッチすることもできますが、VHD(x)はサイズが大きいので、Hyper-Vホストで行うのが最も効率的です。

 VHD(x)をローカルマウントする方法はいたって簡単です。VHD(x)ファイルをダブルクリックするか、VHD(x)ファイルの右クリックメニューから「マウント」を選択します(VMにチェックポイントがある場合は、チェックポイントを削除して親ディスクに結合した上で)。すると、ローカルの空いているドライブ文字に、ドライブとして自動的にマウントされます。

 あとは、あらかじめダウンロードしておいた更新プログラムのMSUパッケージを以下のコマンドラインを実行してオフラインのWindowsイメージに適用します。WinREやWinPEから実行するのとは異なり、/ScratchDirの指定は不要です。

C:\> DISM /Add-Package /Image:<マウント先ドライブ:¥> /PackagePath:<MSUパッケージのパス(.msu)>


 DISMコマンドが成功したら、エクスプローラーでマウント先の右クリックメニューから「取り出し」マウントを選択して、マウントを解除すれば完了です(画面1、画面2)。Hyper-V VMを起動すれば、更新されたイメージでゲストOSが起動します。

画面1
画面1 Hyper-V VMのVHD(x)をHyper-Vホストのローカルにマウントする

 

画面2
画面2 マウント先のドライブを指定して、DISMコマンドで更新プログラムのMSUパッケージを適用し、マウントを解除する

 次のように、VHD(x)のマウントから更新プログラムの適用、マウント解除までのすべてをコマンドラインで操作することも可能です。

C:\> DISM /Mount-Image /Imagefile:<vhd(x)のパス> /index:1 /mountdir:<vhd(x)のマウントポイント(C:\mountやE:\など)>
C:\> DISM /Add-Package /Image:<vhd(x)のマウントポイント(C:\mountやE:\など)> /PackagePath:<MSUパッケージのパス>
C:\> DISM /Unmount-Image /mountdir:<vhd(x)のマウントポイント(C:\mountやE:\など)> /Commit

 

VMテンプレートのオフラインでのパッチやカスタマイズ

 

 「vol.18 ラボ環境 on Azureを作る(6) - VMテンプレートを作成する」では、Hyper-V VMをSysprepを実行して一般化したイメージをエクスポートし、VMテンプレートを作成する方法を紹介しました。オフラインパッチを利用すれば、一般化したイメージに対して更新プログラムをインストールすることができます。つまり、オフラインパッチの方法を知っていれば、Sysprepを何度も実行しなくても、テンプレートのイメージを最新の状態に維持することができるのです。また、サーバーの機能の追加や削除もオフラインで実施することが可能です。

 サーバーの機能の追加や削除を行うには、DISMコマンドの/Get-Packagesでパッケージ名とその状態(有効/無効)を調べ、/Add-Packageまたは/Remove-Packageを実行します。

C:\> DISM /Image:<vhd(x)のマウントポイント> /Get-Packages
C:\> DISM /Image:<vhd(x)のマウントポイント> /Add-Package /PackageName:<パッケージID>
C:\> DISM /Image:<vhd(x)のマウントポイント> /Remove-Package /PackageName:<パッケージID>


 次の例は、Windows Server 2022のテンプレートのイメージに「Telnetクライアント」を追加し、「Azure Arc Setup」(Windows Server 2022に2023年10月の累積的な更新プログラムで追加された新しい機能、デスクトップエクスペリエンスで既定で有効)を削除します(画面3、画面4)。

C:\> DISM /Image:<vhd(x)のマウントポイント> /Enable-Feature /FeatureName:TelnetClient
C:\> DISM /Image:<vhd(x)のマウントポイント> /Disable-Feature /FeatureName:AzureArcSetup

 

画面3
画面3 VMテンプレート(Windows Server 2022)から、「Telnetクライアント」を追加し、「Azure Arc Setup」を削除

 

画面4
画面4 オフラインで更新されたVMテンプレートをHyper-Vにインポートすると、「Telnetクライアント」が有効で、「Azure Arc Setup」が無効になっていることを確認できる

blog_subscribe

blog_comment

最新記事