Hyper-V/WSL2 の VHD/VHDX ディスクファイルは Windows NTFS の圧縮や暗号化が有効だと VM として起動できない
「うげーめんどくせー仕様」と思わず声に出した一件です。内容はタイトルの通りです。
D:\home_config\hyper-v\ubuntu01\ubuntu01> Get-ChildItem -Recurse -Path *.vhdx | Select-Object FullName, Attributes
FullName Attributes
-------- ----------
D:\home_config\hyper-v\ubuntu01\ubuntu01\Virtual Hard Disks\ubuntu01.vhdx Archive, Compressed
D:\home_config\hyper-v\ubuntu01\ubuntu01> Start-Vm -Name ubuntu01
Start-Vm : 'ubuntu01' は起動できませんでした。
Synthetic SCSI Controller (インスタンス ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX): 電源をオンにできませんでした。エラー '仮想デ
ィスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解除されている必
要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。'。
次のエラーが原因でアタッチメント 'D:\home_config\hyper-v\ubuntu01\ubuntu01\Virtual Hard Disks\ubuntu01.vhdx' を開けませんでした
: '仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解除さ
れている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。'。
'ubuntu01' は起動できませんでした。(仮想マシン ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)
'ubuntu01' Synthetic SCSI Controller (インスタンス ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX): 電源をオンにできませんでした。エラ
ー: '仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解除
されている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。' (0xC03A001A)。(仮想マシン I
D XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)
'ubuntu01': 次のエラーが原因でアタッチメント 'D:\home_config\hyper-v\ubuntu01\ubuntu01\Virtual Hard Disks\ubuntu01.vhdx' を開け
ませんでした: '仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗
号化が解除されている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。' (0xC03A001A)。(仮
想マシン ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)
発生場所 行:1 文字:1
+ Start-Vm -Name ubuntu01
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Start-VM], VirtualizationException
+ FullyQualifiedErrorId : OperationFailed,Microsoft.HyperV.PowerShell.Commands.StartVM
D:\home_config\hyper-v\ubuntu01\ubuntu01>
D:\home_config\hyper-v\ubuntu01\ubuntu01> . compact /U "D:\home_config\hyper-v\ubuntu01\ubuntu01\Virtual Hard Disks\ubuntu01.vhdx"
D:\home_config\hyper-v\ubuntu01\ubuntu01\Virtual Hard Disks\ のファイルを圧縮解除しています
ubuntu01.vhdx [OK]
1 ディレクトリ内の 1 ファイルが圧縮解除されました。
D:\home_config\hyper-v\ubuntu01\ubuntu01> Get-ChildItem -Recurse -Path *.vhdx | Select-Object FullName, Attributes
FullName Attributes
-------- ----------
D:\home_config\hyper-v\ubuntu01\ubuntu01\Virtual Hard Disks\ubuntu01.vhdx Archive
D:\home_config\hyper-v\ubuntu01\ubuntu01> Start-Vm -Name ubuntu01
D:\home_config\hyper-v\ubuntu01\ubuntu01>
# 無事起動。
Hyper-V(WSL)のディスクである VHDX はの容量を小さくしようと NTFS 圧縮をかけたのですが、上記のようなエラーが出ました。これは前世代 VHD ファイルを使用した Hyper-V の時代(2008)からもそうであるらしく、現在も続く仕様です。
NTFS 暗号化をかけたファイルも同様のようです。 BitLocker 環境では問題なく Hyper-V は動くので NTFS に限るようです。 SMB 上では? とか疑問は尽きないですが、ややこしいので割愛いたします。
なお、上記現象を回避するには、 VHDX ファイルの NTFS 圧縮・暗号化解除以外ありません。
VHDX/VHD ファイルも結局は単なるファイルシステム上の 1 つのファイルであり、圧縮をかけようも特に VHDX の動作にはパフォーマンス以外影響はないはずなのですが、不思議です。想像でしかありませんが、パフォーマンスの問題の観点から VHD ファイルの NTFS 圧縮を無効強制にしたか、NTFS の機能から VHDX/VHD ファイルを操作しているのかな、と思いましたが調べても「何故そうなのか」は分からず。
仮にパフォーマンスが問題だったとしても、今の CPU 性能であれば何ら問題ないとは思いますが……。 Optimize-VHD などのコマンドレットなどディスクバキュームの方法はありますので、そちらを積極的に使えということでしょうか。と言っても、透過圧縮の方が楽なので残念。
Hyper-V をベースとする WSL2 も同様ですので、 NTFS 圧縮を多様する環境ですと注意が必要です。
参考
いいなと思ったら応援しよう!
老後、奥さんと世界一周のための費用にします。