本記事は、 Windows Advent Calendar 2024 初日の記事だ。
今年もついに始まった技術記事の Advent Calendar シーズン。 みんなこぞって参加しよう!!!
突然だが、 VirtualBox や VMware には、 "リンクしたクローン" という機能がある。
例えば、同じ OS のサーバーを 10台 用意する必要がある際に、まず1台キッティングした後にこの機能を使って複製すると、仮想HDDのサイズを大幅に節約することができる。
Hyper-V には同じ機能は用意されていないのだが、「差分ディスク」という機能を使えば、似たようなことを実現できる。 1
流れ:
- 仮想マシン作る
- 自動チェックポイントを外す
- キッティング
- Windows ならページングファイル(仮想メモリ)サイズを小さめに (256-512MB)
- 仮想 DVD ドライブからメディアを取り外し
- チェックポイントを作成
- 差分ディスクだけ作成
- 仮想マシンを差分ディスクを指定して作成
ただし、 VirtualBox などと異なり、任意のチェックポイントからの差分は作成できない。
必ず初回のチェックポイントからの差分となる。
では、細かい手順を見ていこう。
仮想マシンを作る ~ キッティング
とりあえずベースとなる VM を、第2世代で作成する。
チェックポイントは有効にしつつ、自動チェックポイントは無効にしておこう。
この状態で一通り OS のセットアップを行う。
本記事の主題となる「リンクしたクローン」とは直接関係しないが、 Hyper-V で VM を作成する場合は、 OS 毎に以下のように設定しておくとベターだ。
- 共通
- ホスト OS の PowerShell で
Set-VMProcessor -VMName "VM名" -ExposeVirtualizationExtensions $true
を実行し、仮想化支援のネストを有効にする
- ホスト OS の PowerShell で
- Windows
- セキュリティセクションで トラステッド プラットフォーム モジュール (TPM) を有効にする
- 評価版OS の場合、 VM のネットワークアダプターの仮想スイッチの接続を無しにしてキッティングをして、 評価用ライセンス認証をしていない状態のままで次のステップに進んだ方が良い
- あとでスナップショットを使って戻ったときに、評価版のライセンス延長回数を0に戻せるため
- ページングファイル(仮想メモリ)サイズを小さめに (256-512MB) して、高速スタートアップも OFF にする
- スナップショット後の起動でストレージの書き込み…すなわち差分ストレージのサイズが大きくなるため
- Linux
- セキュリティセクションのセキュアブートで、 テンプレートを "Microsoft UEFI 証明機関" とするか、 セキュアブート自体を無効にする
- インストールする Linux ディストリビューションの、セキュアブート対応状況による
一通り設定が済んだら、 1~2回再起動した後改めてシャットダウンし、 スナップショットをひとつだけ作成 しておく。
差分 HDD を作成する
次に、「作成」から「ハード ディスク」を選択し、差分ハードディスクを選択する。
HDD には適当な名前をつけつつ、 親となる HDD には前項でスナップショットを作成した HDD を選択しておこう。
差分 VM を作成する
いよいよ、「作成」から「仮想マシン」を選択し、目的の差分 VM を作成する。
「仮想ハード ディスクの選択」のセクションで、既存の仮想HDDを選択し、前項で作成した差分HDDを選択しよう。
新たに作成した VM の設定は、差分元の VM の設定を何も引き継いでいないので、以下のような設定はきっちり設定し直しておこう。
- セキュリティの設定
- メモリサイズ
- 自動チェックポイント
Set-VMProcessor
での仮想化支援機能のネスト
最後、手動でスナップショットを作成して完成だ。
差分 VM を複数作成したいなら、「差分 HDD の作成」と「差分 VM の作成」の作業を繰り返せば良い。
トラブルシューティング
起動時に以下のエラーが発生する場合、キッティングの手順でスナップショットを作成せずに 差分 HDD を作成してしまっている可能性がある。
'仮想マシン名' の状態を変更しようとして 、アプリケーションでエラーが発生しました。
'仮想マシン名' は起動できませんでした 。
Synthetic SCSI Controller (インスタンス ID ***): 電源をオンにできませんでした 。 エラー '仮想ハード ディスクのチェーンが壊れています。親仮想ハード ディスクと差分ディスクの識別子が一致しません。'。
差分チェーンの仮想ディスク '仮想ディスクのパス.vhdx' を開こうとして問題が発生したため、仮想ディスク '仮想ディスクのパス.vhdx' を開けませんでした: '仮想ハード ディスクのチェーンが壊れています。親のハード ディスクの ID と差分ディスクの ID が一致しません。'。
差分を作成した時点のデータから、親 HDD が書き換わってしまっていたり、そもそも親 HDD が見つからなかったりアクセス権が無かったりで開けないのが原因だ。
なお、このエラーが出たてしまった場合 [ディスクの編集] からチェーンの壊れた差分ディスクを開き、 [再接続] を選択すると復旧できる場合がある。