Hyper-VでVHDを選べないときは、最初に「第2世代仮想マシンの起動ディスクとしてVHDを使おうとしていないか」を確認します。第2世代はUEFIでVHDXから起動する設計のため、新規作成ウィザードの既存起動ディスクにVHDを指定できません。ただし原因は世代だけではなく、ファイル形式、差分ディスクの親、アクセス権、別ホストでの使用中、破損、ゲストOSのBIOS・UEFI方式も関係します。世代を推測で選び直したり元VHDを上書き変換したりせず、読み取り確認とバックアップから始めます。
VHD、VHDX、仮想マシン世代を分けて理解する
VHDとVHDXは仮想ハードディスクのファイル形式です。第1世代と第2世代は仮想マシンの仮想ファームウェアとデバイス構成です。Microsoftは新規ワークロードでは、Secure BootやUEFIを利用できる第2世代を推奨していますが、既存のレガシーBIOS向け起動ディスクや非対応OSでは第1世代が必要です。仮想マシンの世代は作成後に変更できません。
- 第1世代:レガシーBIOSを使用し、IDE接続のVHDまたはVHDXから起動する互換性重視の構成
- 第2世代:UEFIと仮想SCSI起動を使用し、起動ディスクはVHDX。Secure Bootが既定で有効
- VHD:旧形式で最大容量などの制約が大きい。既存BIOSイメージで残っていることが多い
- VHDX:最大64TB、障害耐性、4KB論理セクター、オンライン拡張などを備える現行形式
拡張子を.vhdから.vhdxへ名前変更しても変換にはなりません。また、VHDをVHDX形式へ変換しても、ディスク内OSが自動的にMBR/BIOSからGPT/UEFIへ移行するわけではありません。形式、パーティション方式、ブートローダー、仮想マシン世代は別々に適合させる必要があります。
元ファイルを変更せず状態を確認する
Hyper-Vホストで管理者PowerShellを開き、対象ファイルのパス、サイズ、形式、種類、親ディスクを確認します。次のコマンドはVHDをマウントせず情報を読み取ります。共有ストレージ上で使用中のVHDは、実際に所有しているホスト以外からGet-VHDすると「使用中」エラーになることがあります。
Get-Item 'D:\VM\legacy.vhd' | Select-Object FullName, Length, LastWriteTime, Attributes
Get-VHD -Path 'D:\VM\legacy.vhd' | Format-List Path, VhdFormat, VhdType, FileSize, Size, ParentPath
Get-VM | Select-Object Name, Generation, State, Path
Get-VMHardDiskDrive -VMName '対象VM' | Select-Object VMName, ControllerType, ControllerNumber, Path
動的ディスクか固定ディスクか、差分ディスクならParentPathが存在するかを確認します。AVHDXはチェックポイントの差分であり、単独の起動ディスクとして扱ったり、エクスプローラーで手動結合したりしません。仮想マシンが実行中、保存状態、レプリカ、クラスタ管理下の場合は、所有ノードと管理方式を確認します。
新規作成ウィザードでVHDが選べない場合
既存VHDがBIOSで起動するOSディスクなら、ウィザードの「世代の指定」へ戻り、第1世代を選ぶのが互換性を保つ方法です。ただし第1世代を選べば常に起動するわけではありません。ゲストOSが対応していること、ディスクに有効なブート構成があること、IDEコントローラーの起動ディスクとして接続されることを確認します。Windows 11ゲストは第2世代が前提なので、古いVHDをそのままWindows 11用として起動する判断はできません。
新規環境として第2世代を使いたい場合は、最も安全なのは第2世代VMへ対応OSを新規インストールし、旧VHDはデータ移行元として扱う方法です。既存OSを第2世代へ移行する場合は、OSがUEFIをサポートするか、ディスクをGPTへ変換できるか、ブート領域と回復領域、暗号化、バックアップ製品、ライセンスを含めた別の移行計画が必要です。VHDXへの形式変換だけを成功条件にしません。
VHDXへ変換する場合の安全な手順
Convert-VHDは元ディスクから別の仮想ディスクへデータをコピーするオフライン操作です。対象VHDはVMから取り外し、マウントされていない状態にします。業務VMなら停止時間を合意し、アプリ整合性のあるバックアップを取得します。保存先には変換後の実容量と作業余裕が必要です。元VHDと同じ場所へ上書きせず、新しい名前で出力します。
Get-VHD -Path 'D:\VM\legacy.vhd' | Format-List Path, VhdFormat, VhdType, Size, ParentPath
Convert-VHD -Path 'D:\VM\legacy.vhd' -DestinationPath 'D:\VM\legacy-converted.vhdx'
Get-VHD -Path 'D:\VM\legacy-converted.vhdx' | Format-List Path, VhdFormat, VhdType, Size, ParentPath
-DeleteSource は元ファイルを削除するため付けません。差分ディスクは親子関係と変換順序が絡むため、この単純例を適用せず、チェックポイント、バックアップ、レプリカを含めて設計します。変換後は本番ネットワークから切り離した検証VMで起動、ファイルシステム、サービス、アプリ、イベントログを確認します。成功が確認できるまで元VHDを保持し、切り戻し時は元VM構成と元VHDの組み合わせへ戻します。
世代以外の原因を切り分ける
- ファイルが参照画面に出ない:ウィザードが要求する拡張子、実ファイルの拡張子、隠し拡張子、パスを確認する
- アクセス拒否:Hyper-V仮想マシン管理サービスとVM IDに必要なACL、保存先の共有権限を確認し、Everyoneフルコントロールで回避しない
- 使用中:別VM、別ホスト、バックアップ、ウイルス対策、マウント状態を調べ、プロセスを強制終了しない
- 差分ディスクエラー:ParentPathと親ID、チェーン全体を確認し、親ディスクを直接書き換えない
- 起動デバイスなし:VM世代とゲストのBIOS/UEFI方式、コントローラー、ブート順序、Secure Bootテンプレートを確認する
- LinuxがSecure Bootで止まる:対応ディストリビューションとMicrosoft UEFI Certificate Authorityテンプレートを確認し、無条件にSecure Bootを切らない
- クラスタで失敗:所有ノード、CSVパス、フェールオーバークラスターマネージャー上の状態を確認する
最終確認
選択可能になっただけで完了とはせず、VMの世代、ディスク形式、コントローラー、起動方式を構成記録へ残します。検証起動ではネットワーク競合を避けるため仮想スイッチを未接続にし、同じコンピューター名やIPで本番と同時起動しません。OS起動後にディスク状態、時刻、統合サービス、アプリ整合性を確認してから計画した切り替えを行います。問題があれば変換先を破棄し、変更していない元VHDと元VMへ戻せる状態が安全な完了条件です。

コメント