セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.38 Hyper-V VMの管理に役立つスクリプト|ラボ環境 in オンプレを作る(6)
2024年08月29日配信
2024年08月29日更新
執筆者:山内 和朗
オンプレミスとAzure上のラボ環境のHyper-Vホストには、Hyper-V仮想マシン(VM)の管理に役立つPowerShellスクリプトを配置しています。自分の作業を効率化するために作成したスクリプトですが、せっかくなので皆さんに公開し、使い方を説明したいと思います。
ラボ環境のHyper-Vホストには、現状、以下の5つのPowerShellスクリプトを用意しています。
[enable-nestedvirt.ps1](.txt形式でダウンロード)
Hyper-Vを実行する物理マシン、および入れ子になった仮想化が有効なHyper-V VMおよびAzure VMでは、自身のHyper-V環境に作成するVMでさらに入れ子になった仮想化を有効にすることができます。入れ子になった仮想化が有効なVMでは、Hyper-Vを有効化できるほか、Hyper-Vハイパーバイザーに依存する機能(Microsoft Defender Application Guard≪MDAG≫、Windowsサンドボックス、Windows Subsystem for Linuxバージョン2≪WSL2≫、仮想化ベースのセキュリティ≪VBS≫など)を使用することができます。
「Hyper-Vマネージャー」スナップン(virtmgmt.msc)には、入れ子になった仮想化を有効にするオプションはありません。その設定はPowerShellで行う必要があります。その方法については「vol.18 ラボ環境 on Azureを作る(6) - VMテンプレートを作成する」で説明しました。「enable-nestetvirt.ps1」は、PowerShellによる設定を簡素化するものです。
PS C:¥> .¥enable-nestedvirt.ps1 "仮想マシン名" |
Hyper-VホストがWindows Admin Center(WAC)で管理されている場合、WACの「仮想マシン」ツールを使用すると、GUIで入れ子になった仮想化を有効化できることも紹介しておきます(画面2)。
画面2 WACを導入している場合、WACの「仮想マシン」ツールを使用して入れ子になった仮想化を有効化することもできる
「offlinepatch.ps1」は、「vol.31 VMテンプレートのオフラインパッチスクリプト|続・ラボ環境 on Azure(3)」で説明したものと同じものです。PackageDirで指定したフォルダーに、更新対象のWindows向けの更新プログラムパッケージ(.msu)をダウンロードして実行すれば、VMをオフラインにしたまま更新プログラムのインストールができるというものです(画面3)。
PS C:¥> .¥offlinepatch.ps1 -PackageDir "<パッケージパス>" -TargetVhd "<VHD(x)のパス>" -MountDir "<マウント先パス>" |
画面3 オフラインのVHD(x)に対して更新プログラムを適用するスクリプト「offlinepatch.ps1」
このスクリプトはVMテンプレートの更新を想定していますが、作成済みのVMのVHD(x)を更新するのにも利用できます。その場合は、更新対象のVHD(x)に差分ディスクやチェックポイント(.avhd(x))が存在しないようにしてください。差分ディスクやチェックポイントが存在する場合、親のVHD(x)の更新により、親子のチェーンが壊れ、差分ディスクやチェックポイントが使用不能になります。
物理デバイスや仮想マシンのC:ドライブは更新プログラムのインストールにより、ディスク使用が増加していきます。オンラインで次のコマンドラインを実行すると、更新プログラムの管理に使用されるコンポーネントベースサービス(CBS)が最適化され、ディスク使用を大幅に節約できる場合があります。ただし、実行には数時間かかる場合がある他、実行後に過去の更新プログラムのアンインストールができなくなることには注意してください。
C:¥> DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase |
上記のコマンドラインは、/Onlineを/Imageに置き換えることで、ローカルマウントしたオフラインイメージに対して実行することもできます。「cleanup-image.ps1」は、VHD(x)のローカルマウント、DISM /Cleanup-Imageの実行、VHD(x)のマウント解除の一連の操作をスクリプト化したものです。
PS C:¥> .¥cleanup-image.ps1 -TargetVhd "<VHD(x)のパス>" -MountDir "<マウント先パス>" |
「cleanup-image.ps1」は、次の「optimize-image.ps1」を実行する前に実行すると、サイズ縮小効果のアップが期待できます。
「Hyper-Vマネージャー」スナップインから実行できる「仮想ハードディスクの編集ウィザード」は、容量可変タイプのVHD(x)の縮小が期待できる「最適化」オプションがあります(画面4)。しかし、このオプションを選択して実行しても、期待したほどサイズが縮小されない場合があります。
画面4 「仮想ハードディスクの編集ウィザード」の「最適化」オプションは、なぜか期待したほど容量可変タイプのVHD(x)のサイズを縮小してくれない(この問題は以前のバージョンから)
「最適化」オプションは、「Optimize-VHD(Microsoft)」コマンドレットを実行しているものと想像しますが、Microsoftのドキュメントによると「To use Optimize-VHD, the virtual hard disk must not be attached or must be attached in read-only mode.(Optimize-VHDを使用するには、仮想ハードディスクがアタッチされていないか、読み取り専用モードでアタッチされている必要があります。)」と説明されています。「最適化」の実行は、そもそも接続されていない状態でなければ実行できません(実行中のVMのVHD(x)のウィザードには表示されません)。もしかしてと思い、読み取り専用モードでマウントしてPowerShellで実行してみたところ、Optimize-VHDを2回実行することで大幅なサイズ縮小を確認できました(その実験については、旧ブログの記事とそのリンク先記事を参照)。「optimize-vhd.ps1」はその実験を踏まえて一連の操作をスクリプト化したものです(画面5)。
PS C:¥> .¥optimize-image.ps1 "<VHD(x)のパス>" |
画面5 元々19.8GBのVHD(x)にオフラインパッチしたところ23.2GBに増加、それを「cleanup-image.ps1」と「optimize-image.ps1」にかけると22.0GBに縮小された。ちなみに、「cleanup-image.ps1」を省略して「optimize-image.ps1」を実行した場合、23.1GBとなったことから、「cleanup-image.ps1」の効果がわかる
最後の「find-childvhd.ps1」は、VHD(x)のフルパスと、検索先フォルダーのルートを指定することで、指定したVHD(x)を親とする差分ディスクおよびチェックポイント(.avhd(x))を再帰的に検索するスクリプトです(画面6)。
PS C:¥> .¥cleanup-image.ps1 -ParentVhd "<VHD(x)のパス>" -MountDir "<マウント先パス>" |
画面6 指定したVHD(x)を親に持つ差分ディスクとチェックポイントを再帰的に検索するスクリプト「find-childvhd.ps1」
評価、検証環境では、ディスク使用の節約とVMの作製時間の短縮のために、同じVHD(x)を親とした差分ディスクを作成して、複数のVMを作成することがあります。この方法を多用すると、誤って親VHD(x)を削除してしまったり、変更を加えてしまったりして、差分ディスクやチェックポイントとのチェーンが破損することがあります。このスクリプトは、そのような事故を未然に防ぐために作成しました。
2024年10月08日 | メモ. 必要な機能は標準装備で意外と簡単! Hyper-Vホストクラスターの構築 |
---|---|
2024年10月07日 | vol.49 電子メールによる通知|BOMおじさんとZabbix(5) |
2024年10月03日 | ITニュース. Windows 11バージョン24H2(OSビルド26100)の一般提供開始 |
2024年10月03日 | vol.48 「アクティブチェック: 不明」の理由は大文字小文字|BOMおじさんとZabbix(4) |
2024年10月02日 | ITニュース. Windows Server 2025、ホットパッチ(プレビュー)提供開始と最新プレビュービルドの公開 |
2024年09月30日 | vol.47 Windows Serverを監視対象に追加する|BOMおじさんとZabbix(3) |
2024年09月26日 | vol.46 Zabbix UIのセットアップと日本語化|BOMおじさんとZabbix(2) |
2024年09月25日 | ITニュース. 企業のパッチ管理の基盤「WSUS」が非推奨へ、どうする!?オンプレのパッチ管理 |
2024年09月24日 | vol.45 BOMを担ぐおじさん、Zabbixと戯れる |
2024年09月19日 | vol.44 USBドライブのマウントを強制解除|コマンド&スクリプト強化週間 |