~Hyper-V 移行・導入の実践~
Windows Server 2008には仮想化技術であるHyper-Vが実装され、一般的にOS標準のHyper-Vマネージャを利用して仮想マシンを管理します。
検証過程で、Hyper-Vマネージャが提供する情報だけでは解決できなかったトラブルにおいて、PowerShellの活用によって解決した事例を紹介します。
PowerShellとはWindows Server 2008に標準で実装されているオブジェクト指向のスクリプト言語です。Cmdlet(以降コマンドレット)と呼ばれるコマンド群が用意されており、直感的でわかりやすいスクリプト作成ができます。
仮想環境のディスクであるVHDファイルは、性能の観点から容量固定として利用することを推奨しています。一方、VHDファイルを容量可変として作成した場合、以下の利点があります。
検証環境では上記の利点から、仮想マシンのVHDファイルを容量可変とし、図1のように複数の作業者がディスク容量を意識することなく仮想マシンを作成できようにしました。
しかし、検証を終えた仮想マシンの削除管理が不十分だったため、残ったVHDファイルがディスク容量を圧迫し、ディスクの空き容量が枯渇してしまいました。
その結果、容量の拡張を試みた仮想マシンが一時停止し、その後に拡張しようとした仮想マシンが連鎖的に一時停止してしまう問題が発生しました。
図1 仮想マシン作成イメージ
この問題を回避するには、ディスクの空き容量を確保する必要があります。その1つの手段として利用されていない仮想マシンを整理、削除することを考えました。では、削除すべき仮想マシンをどう判断するか?
今回は各仮想マシンの最終利用日時をベースに削除候補を挙げることにしました。
主に管理者はHyper-Vマネージャを利用して仮想マシンを管理します。(図2.参照)
Hyper-Vマネージャでは中央ペインにある仮想マシンの一覧で仮想マシンの状態(実行中・一時停止・オフ・保存完了)を確認できますが、仮想マシンの最終利用日時を知ることはできません。
図2 Hyper-Vマネージャ
一方、PowerShellでは、Hyper-Vマネージャで取得できなかった仮想マシンの各種情報を、コマンドレットにより引き出せることが調査の結果わかりました。
図3 スクリプト実行時のイメージ
PowerShellを利用し、最終利用日時の他、作成者情報も取得するスクリプトを作成しました。
スクリプト例は以下の機能を持っています。
このスクリプトを定期的に実行(タスクスケジューラに登録)することで物理サーバのディスクの異常をメールで受信できます。
そして、このメールを受信すれば、長期間利用されていない仮想マシンを削除候補とし、管理者は削除可否を判断することができます。
Hyper-Vマネージャではできない作業をPowerShellで簡単に補完、実現できます。今回作成したスクリプトでは、ファイル情報の取得やソートといった一連の処理をGet-Itemproperty、Sort-Objectというコマンドレット1行で簡単に実装できました。また他のスクリプト言語と同様、PowerShellも変数の型が柔軟に変更されるので、型を意識せず直感的に利用することもできました。
今回は記述していませんが、マイクロソフトのSystem Center Virtual Machine Manager 2008(以降、SCVMM2008)を利用して、SCVMM2008の専用のコマンドレットを組み合わせることにより幅広いニーズにあった仮想マシン関連のPowerShellスクリプト作成が期待できます。