かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.177 Azure MigrateによるVM移行ーVHDの最適化|Windows Server 2016 EOSまであと334日
2026年02月12日配信
執筆者:山内 和朗
Windows Server 2016の製品ライフサイクルとサポート終了日(End of LifeCycle《EOL》、End of Support《EOS》)である2027年1月12日までのカウントダウンが進んでいます。この連載シリーズのテーマの1つはAzureへの移行です。前回から「Azure Migrate」を使用したオンプレミスのHyper-V仮想マシン(VM)のAzure VMへの移行を進めています。前回は、Azureへの移行前にHyper-V VMのWindowsおよびLinuゲストをAzure向けに準備する方法を説明しました。今回は仮想ハードディスク(VHD/VHDX)の最適化を行います。Windows VMを例に説明します。
Azure VMの仮想ハードディスクは、容量固定のVHDです。だからといって、アップロード用にVHDを準備するのとは異なり、移行元のHyper-V VMの仮想ハードディスクの種類を容量固定のVHDにする必要はありません。パフォーマンスや効率性に優れた容量可変のVHDXで全く問題がありません。
Azure Migrateでは、Hyper-V VMのスナップショットが作成され、初期レプリケーションでAzureのストレージにVMのディスクイメージ全体がアップロードされます。その後変更が追跡され、差分のディスク変更が定期的にアップロードされます。その背後ではWindows ServerのHyper-Vレプリカの技術と、Azure Site Recoveryのサービスが使用されています。このディスクイメージのアップロードはブロックレベルで行われるため、移行元の仮想ハードディスクの形式や種類には依存しません。アップロードされたディスクイメージは、最終的に、移行時(Azure VMのデプロイ時)にManaged Diskとして容量固定VHDが作成されます。
Hyper-V レプリケーションのしくみはどのように機能しますか?|Azure(Microsoft Learn)
アップロード時の使用帯域と時間を効率化するためには、Hyper-VのVMのゲストOSのディスク使用を最適化しておくことが重要です。Windows VMであれば、ディスククリーンアップ(cleanmgr.exe、Windows Serverデスクトップエクスペリエンスの場合)を使用してシステムファイルのクリーンアップを実行したり、次のコマンドラインを実行して、使用していないWinSxSコンポーネントストアをクリーンアップします。なお、/Resetbaseパラメーターを付けると、これまでインストールされたWindowsの品質更新プログラムがアンインストールできなくなるため、アンインストールの可能性を残したい場合は/Resetbaseパラメーターを付けないでください。
| DISM /Online /Cleanup-Image /StartComponentCleanup /Resetbase |

画面1 DISMコマンドを実行してWinSxSコンポーネントストアをクリーンアップし、ディスク領域を解放する
Managed Diskの容量固定VHDは、ディスクのプロビジョニングされた容量に基づいて課金されます(画面2)。Hyper-V VMのVHD/VHDXの既定のサイズは127GBですが、OSディスクとしては大きすぎる割り当ての場合があります。極端に使用量が増加することのないOSディスクの場合、十分な空き領域を考慮に入れたうえで、Managed Diskの特定サイズ(32GB《P4/E4/S4》、64GB《P6/E6/S6》、128GB《P10/E10/S6》など)に収まるようにすると、無駄な課金を回避できます。例えば、Windows Server Server CoreインストールであればOSディスクは30GB程度で十分でしょう。

画面2 Premium SSDのサイズと価格-Managed Disks の価格|Azure(Microsoft)
Windows VMの場合は「ディスクの管理」スナップイン(Diskmgmt.msc)を使用して、十分な空き領域(例えばディスクの20~30%またはGB)を考慮してC:ドライブのパーティションを縮小します。その後、「Hyper-Vマネージャー」の「ディスクの編集」を使用してVHD/VHDXを縮小します(画面3、画面4、画面5)。

画面3 「ディスクの管理」スナップインを使用してC:ドライブのパーティションを縮小する

画面4 「Hyper-Vマネージャー」の「ディスクの編集」を使用してVHD/VHDXのサイズを縮小する
Server Coreの場合は、DISKPARTコマンドを使用してC:ドライブのパーティションを縮小(SHRINK)します。また、VMを停止して、Hyper-VホストにVMのVHD/VHDXをローカルマウントすれば、「ディスクの管理」スナップイン使用して縮小できます。縮小後、VHD/VHDXを切断すれば完了です(画面5)。
| DISKPART DISKPART> LIST DISK DISKPART> SELECT DISK ディスク番号 DISKPART> LIST VOLUME DISKPART> SELECT VOLUME ボリューム番号 DISKPART> SHRINK QUERYMAX DISKPART> SHRINK DESIRED=縮小したいMB DISKPART> EXIT |

画面5 Server Coreの場合はHyper-VホストにVHD/VHDXをマウントし、「ディスクの管理」スナップインでパーティションを縮小後、VHD/VHDXを切断する
なお、ゲストOSがWindows Server 2022以降の場合、回復パーティションがディスクの最後尾に配置されます。この回復パーティションの存在によって、大きくディスクサイズを縮小することができません。その場合は、Windows回復環境(WinRE)の登録を削除したうえで、回復パーティションを削除し、その後、C:ドライブのパーティションを縮小します(画面6)。Azure VMには、回復パーティションはあっても使用されることがないため(ローカルコンソールに対話できないため)、削除しても問題はありません。回復パーティションは「ディスクの管理」スナップインでは削除できないため、DISKPARTコマンドを使用して削除します。
| DISKPART DISKPART> LIST DISK DISKPART> SELECT DISK ディスク番号 DISKPART> LIST PARTITION DISKPART> SELECT PARTITION パーティション番号 DISKPART> DELETE PARTION OVERRIDE DISKPART> EXIT |

画面6 回復パーティションが最後尾にある場合は、WinREを無効にし(reagentc /disable)、回復パーティションを削除してから、C:ドライブのパーティションを縮小する
Linuxのパーティションサイズの縮小については、詳しくないので知りたい人はご自身が使用しているLinuxディストリビューションについて調べて実施してください。今回はあらかじめ30GBのディスク(VHDX)を割り当てたVMにLinuxをインストールしてあります。
Linux VMの場合、次のようなことが思いつきますが、実はあまりこの辺のところ詳しくありません。
古いカーネルの削除
ログや一時ファイルの削減
不要なパッケージやサービスの削除
パーティションサイズの縮小
など
シーズン1目次|Windows Server 2016 EOSまであとX日 シーズン2(1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9)|(10)