本文へ移動
vast-cowのブログ
前のページへ戻る

WindowsでVHDXを作成する方法と差分VHDXを作成する方法

この記事を編集

前提

WindowsでVHDXを作成する方法は主に次の3つです。

方法用途
ディスクの管理 GUI手作業で簡単に作る
PowerShell / Hyper-V モジュール自動化、差分VHDX作成に向く
DiskPartWindows標準CLIで作る、Hyper-Vモジュール不要

差分VHDXを作る場合は、通常 PowerShell の New-VHD -Differencing を使うのが最も簡単です。Microsoft公式ドキュメントにも、New-VHD -ParentPath c:\Base.vhdx -Path c:\Diff.vhdx -Differencing という差分VHDX作成例があります。(Microsoft Learn)


1. 通常のVHDXを作成する方法

方法A: GUI「ディスクの管理」で作成

  1. Win + X

  2. ディスクの管理 を開く

  3. メニューから 操作 → VHD の作成

  4. 以下を指定する

    • 場所: C:\VHD\Base.vhdx

    • サイズ: 例 64 GB

    • 形式: VHDX

    • 種類:

      • 固定サイズ: 最初から全容量を確保。性能・安定性重視
      • 可変容量: 使用量に応じてファイルが増える。容量節約向き
  5. 作成後、ディスク一覧に追加される

  6. 右クリックして ディスクの初期化

  7. GPT または MBR を選択

    • 通常は GPT
  8. 未割り当て領域を右クリック

  9. 新しいシンプル ボリューム

  10. NTFS などでフォーマット


方法B: PowerShellでVHDXを作成

管理者権限のPowerShellで実行します。

可変容量VHDXを作成

New-VHD -Path "C:\VHD\Base.vhdx" -SizeBytes 64GB -Dynamic

固定サイズVHDXを作成

New-VHD -Path "C:\VHD\Base.vhdx" -SizeBytes 64GB -Fixed

New-VHD は仮想ハードディスクを作成するHyper-V PowerShellコマンドレットです。MicrosoftのHyper-Vモジュールにも New-VHD が含まれています。(Microsoft Learn)

作成したVHDXをマウントして初期化・フォーマットする例です。

Mount-VHD -Path "C:\VHD\Base.vhdx"

$disk = Get-Disk | Where-Object PartitionStyle -eq "RAW" | Sort-Object Number -Descending | Select-Object -First 1

Initialize-Disk -Number $disk.Number -PartitionStyle GPT

New-Partition -DiskNumber $disk.Number -UseMaximumSize -DriveLetter V |
    Format-Volume -FileSystem NTFS -NewFileSystemLabel "BaseVHDX" -Confirm:$false

方法C: DiskPartでVHDXを作成

Hyper-V PowerShellモジュールを使わず、Windows標準の diskpart で作成できます。MicrosoftのDiskPartリファレンスでは、create vdisk は仮想ハードディスクを作成し、作成直後は未初期化ディスクと同じ状態になると説明されています。(Microsoft Learn)

管理者権限のコマンドプロンプトで実行します。

diskpart

DiskPart内で以下を実行します。

create vdisk file="C:\VHD\Base.vhdx" maximum=65536 type=expandable
select vdisk file="C:\VHD\Base.vhdx"
attach vdisk
create partition primary
format fs=ntfs quick label="BaseVHDX"
assign letter=V
exit

ポイント:

maximum=65536

は MB単位 なので、65536 MB = 64 GB です。

type=expandable

は可変容量です。固定サイズにしたい場合は次のようにします。

create vdisk file="C:\VHD\Base.vhdx" maximum=65536 type=fixed

attach vdisk はVHD/VHDXをマウントし、ローカルディスクとして表示するコマンドです。(Microsoft Learn)


2. 別のVHDXをベースに差分VHDXを作成する方法

差分VHDXの考え方

差分VHDXは、親VHDXを読み取り元として使い、変更分だけを子VHDXに保存する形式です。

Base.vhdx        ← 親ディスク。基本イメージ
  └─ Diff01.vhdx ← 子ディスク。変更分だけ保存

たとえば、以下のような用途に向いています。


重要な注意点

差分VHDXを作る前に、親VHDXについて次を守る必要があります。

注意点理由
親VHDXは変更しない子VHDXとの整合性が壊れる可能性がある
親VHDXの場所を不用意に変えない子VHDXが親を見つけられなくなる
親VHDXを削除しない子VHDXが使用不能になる
親VHDXは読み取り専用にすると安全誤更新を防げる
差分チェーンを深くしすぎない性能低下・管理複雑化の原因になる

親VHDXを保護する例:

Set-ItemProperty -Path "C:\VHD\Base.vhdx" -Name IsReadOnly -Value $true

解除する場合:

Set-ItemProperty -Path "C:\VHD\Base.vhdx" -Name IsReadOnly -Value $false

3. PowerShellで差分VHDXを作成する

基本コマンド

New-VHD `
  -ParentPath "C:\VHD\Base.vhdx" `
  -Path "C:\VHD\Diff01.vhdx" `
  -Differencing

Microsoft公式ドキュメントでも、-ParentPath に親VHDX、-Path に作成する差分VHDX、-Differencing を指定する例が示されています。(Microsoft Learn)


作成後にマウントする

Mount-VHD -Path "C:\VHD\Diff01.vhdx"

マウントすると、Windowsからは通常のディスクのように見えます。

ただし、差分VHDXは親VHDXの内容をベースにしているため、通常は親側にすでにパーティションやファイルシステムが存在します。その場合、初期化やフォーマットは不要です。


差分VHDXをアンマウントする

Dismount-VHD -Path "C:\VHD\Diff01.vhdx"

4. 差分VHDXを使った実用例

例: ベースOSイメージからテスト環境を作る

# 親VHDX
$parent = "D:\VHD\BaseWindows.vhdx"

# 差分VHDX
$child = "D:\VHD\Test01.vhdx"

# 差分ディスク作成
New-VHD -ParentPath $parent -Path $child -Differencing

# マウント
Mount-VHD -Path $child

複数作る場合:

New-VHD -ParentPath "D:\VHD\BaseWindows.vhdx" -Path "D:\VHD\Test01.vhdx" -Differencing
New-VHD -ParentPath "D:\VHD\BaseWindows.vhdx" -Path "D:\VHD\Test02.vhdx" -Differencing
New-VHD -ParentPath "D:\VHD\BaseWindows.vhdx" -Path "D:\VHD\Test03.vhdx" -Differencing

構成はこうなります。

BaseWindows.vhdx
 ├─ Test01.vhdx
 ├─ Test02.vhdx
 └─ Test03.vhdx

各差分VHDXは独立した変更分を持ちます。


5. 差分VHDXの親パスを確認・修正する

親VHDXの場所を移動した場合、子VHDXが親を見つけられなくなることがあります。

その場合は Set-VHD -ParentPath で親パスを設定できます。Microsoftの Set-VHD ドキュメントでは、差分VHDの親ディスクのパスを指定する -ParentPath パラメータが説明されています。(Microsoft Learn)

Set-VHD `
  -Path "C:\VHD\Diff01.vhdx" `
  -ParentPath "D:\VHD\Base.vhdx"

6. 差分VHDXを親VHDXに統合する

差分VHDXの内容を親または別の差分ディスクに統合したい場合は Merge-VHD を使います。Microsoftの説明では、Merge-VHD は差分VHDチェーン内の仮想ハードディスクをマージするコマンドレットです。(Microsoft Learn)

例:

Merge-VHD -Path "C:\VHD\Diff01.vhdx" -DestinationPath "C:\VHD\Base.vhdx"

ただし、親VHDXに直接統合するとベースイメージが変わります。クリーンなベースを維持したい場合は、統合前にバックアップを取るか、別ファイルへ変換する方が安全です。


7. 最小構成のコマンドまとめ

通常のVHDX作成

New-VHD -Path "C:\VHD\Base.vhdx" -SizeBytes 64GB -Dynamic

マウント

Mount-VHD -Path "C:\VHD\Base.vhdx"

差分VHDX作成

New-VHD -ParentPath "C:\VHD\Base.vhdx" -Path "C:\VHD\Diff01.vhdx" -Differencing

差分VHDXマウント

Mount-VHD -Path "C:\VHD\Diff01.vhdx"

アンマウント

Dismount-VHD -Path "C:\VHD\Diff01.vhdx"

推奨運用

検証用途なら、次の構成が扱いやすいです。

D:\VHD\
 ├─ Base\
 │   └─ WindowsBase.vhdx       ← 読み取り専用
 └─ Diff\
     ├─ Lab01.vhdx
     ├─ Lab02.vhdx
     └─ Lab03.vhdx

親VHDXは完成後に読み取り専用にし、実験はすべて差分VHDX側で行うのが安全です。


この記事を編集
この記事を共有:

コメント


前の記事
Rocky Linux 9 の rootfs を F2FS に変更する手順
次の記事
PDFページ結合ツール