VHD のオフラインパッチ by DISM
前回、仮想マシンのゲスト OS やアプリケーションのパッチ管理は、基本的に物理環境と同じであること、そしてオフラインやロールバックする仮想マシンについては、管理を複雑にすることを説明しました。仮想環境の特徴や利点である、容易な複製、スナップショットなどの仮想環境ならではの機能は、開発やテスト環境では非常に便利ですが、実運用環境向きではない (使用すべきでない) 理由についても触れました。
さて、今回は、Hyper-V や Windows Virtual PC の VHD (仮想ハードディスク) ファイルに対して、オフライン (仮想マシンのゲスト OS を起動しないという意味) でパッチを適用する、Windows 7 および Windows Server 2008 R2 に用意された新しい方法を紹介したいと思います。この方法を使うと、オフラインの仮想マシンを、オフラインのまま最新状態に更新できますし、コマンドライン ベースなのでパッチ管理の自動化にも使えるかもしれません。オフライン パッチと言うと、前回もちょっと触れたマイクロソフトの Offline Virtual Machine Servicing Tool 2.1 (http://technet.microsoft.com/en-us/library/cc501231.aspx) を思い浮かべる方もいると思います。しかしこのツール、実際にはメンテナンス ホストに対象の仮想マシンを配置し、仮想マシンを起動してゲスト OS を更新するという仕組みになっています。このツールの “Offline” とは、ライブラリに格納されたオフラインの仮想マシンを指しており、更新は完全にオンラインで行われます。このツールに興味を持たれた方にとっては、ちょっとがっかりするでしょう。次期バージョンの Virtual Machine Servicing Tool 3.0 では、“Offline”という文字が外れ、更新対象の仮想マシンが、ホスト上の仮想マシンにも拡大されます。また、VHD ファイルのオフライン パッチにも対応する予定です。
Virtual Machine Servicing T
ool 3.0 のリリースを待たずとも、VHD ファイルのオフライン パッチ機能は、Windows 7 および Windows Server 2008 R2 の標準機能だけで実現可能です。使用するのは、DISM コマンド (C:\Windows\System32\DISM.exe, 展開イメージのサービスと管理ツール) です。実は、Virtual Machine Servicing Tool 3.0 も DISM を利用することになります。
DISM はもともと、Windows のイメージ展開のためのツール (Windows 自動インストール キット 2.0 以前の PEimg を置き換えるもの) であり、WIM (Windows イメージング形式) ファイル形式の OS イメージのマウント/アンマウントや、OS イメージへの Windows の機能 (Windows Server の役割/機能) の有効化/無効化、更新パッケージ (MSU ファイル) やドライバーのインストール/アンインストールなどの機能を持ちます。また、オフライン イメージ (/image オプション) だけでなく、実行中の OS であるオンライン イメージ (/Online オプション) にも対応しており、Windows の機能の有効化/無効化や、更新パッケージ (MSU ファイル)のインストール/アンインストールのコマンドライン実行に使用できます。
実際に、
Hyper-V の仮想マシンの VHD ファイルに対して、更新パッチをオフラインで適用してみましょう。この仮想マシンは、ゲスト OS として Windows Server 2008 R2 が稼働しています。ゲスト OS は、4 月 23 日に Windows Update を手動実行したのが最後の更新で、その後、オフラインのままにしておきます。この仮想マシンの VHD ファイルに、更新プログラム 976422 (2 月 22 日公開) と 980408 (4 月 26 日公開) を直接インストールしてみます。いずれも、セキュリティ更新プログラムではない、オプションの更新プログラムであり、Windows Update による自動更新ではインストールされないものです。
DISM には、VHD ファイ
ルのマウント/アンマウント機能はありません (WIM ファイルのマウントは可能です) が、Windows 7 および Windows Server 2008 R2 は、標準で VHD ファイルのマウント/アンマウントに対応しています。VHD ファイルをマウントするには、「ディスクの管理」スナップインまたは DISKPART コマンド (SELECT VDISK FILE=”VHD ファイルのパス”, ATTACH VDISK, DETACH VDKSK) を使用します。
VHD ファイルをローカル ドライブにマウントしたら、あらかじめダウンロードしておいた更新ファイルを次のコマンドラインでインストールします (VHD ファイル内の Windows フォルダーのあるパーティションが H: ドライブにマウントされた場合)。
DISM /image:H: /Add-Package /PackagePath:Windows6.1-KB976422-x64.msu
DISM /image:H: /Add-Package /PackagePath:Windows6.1-KB980408-x64.msu
VHD ファ
イルをアンマウントし、仮想マシンを起動してみます。仮想マシン起動時、「Windows を構成するための準備中 … コンピューターの電源を切らないでください。」という、Windows Update に付きものの画面が表示されてから、ログオン画面が表示されます。ログオン後、インストールされた更新プログラムを確認すると、DISM でインストールした 2 つの更新プログラムが確かにインストールされていることがわかります。
この方法を使用すると、仮想マシンをオフラインのままで、更新プログラムをインストールし、ゲスト OS を最新状態に維持できそうです。ただし、必要な更新プログラムをどうやって適切に判断するかが課題になります。DISKPART コマンドを使用すれば (diskpart /s コマンドを記述したファイル)、VHD ファイルのマウントやアンマウントをバッチ化でき、DISM による更新プログラムのインストールと組み合わせて自動化できるでしょう。しかし、VHD ファイルの Windows フォルダーのあるパーティションがどのドライブ文字にマウントされるかは、事前に検証しておく必要があるでしょう。
DISM による MSU ファイルのインストール、アンインストールに対応しているのは、Windows 7 および Windows Server 2008 R2 以降で、旧バージョンの Windows を含めて汎用的に使用できるわけではありません。しかし、この方法を知っていると、いろいろと便利です。
たとえば、更新パッチが原因でシステムが正常起動できなくなった場合、システム回復環境 ( OS メディアから起動可能) を使用して、DISM コマンドで問題の更新パッチをアンインストールできます。DISM は、Sysprep 実行済みのイメージに対しても、更新パッチをインストールできます。Sysprep 済みのイメージは、初回起動時に Mini Setup でシステムの初期化が開始してしまうので、DISM の方法を知っていれば、Sysprep を再実行することなく、イメージを最新の状態に維持できます。
Sysprep の話が出たので、次回は仮想マシンの Sysprep によるテンプレート化と、Mini Setup の自動化について取り上げたいと思います。