VHDファイルをPowershellで拡張したい場合があると思います。例えば,RDSのクラスター環境でUPDを使用している場合などです。
その際,Hyper-V Roleがインストールされたサーバーから,以下のようなコマンドでUPDを拡張することが可能です。
Set-Service -Name defragsvc -StartupType Manual
$UserName = "AD User Account Name"
$VHDXFile = "\\ServerName\PathToUPD\UVHD-$((Get-ADUser $UserName).SID).vhdx"
$DiskExtend = 50GB
Resize-VHD -Path $VHDXFile -SizeBytes $DiskExtend
$DiskMount = Mount-VHD -Path $VHDXFile -NoDriveLetter -PassThru | Get-Disk | Get-Partition
$PartSize = $DiskMount | Get-PartitionSupportedSize
$DiskMount | Resize-Partition -Size ($PartSize.SizeMax)
Dismount-VHD -Path $VHDXFile
しかし,場合によっては,以下のようなエラーが出てしまうかもしれません。
Resize-Partition : Size Not Supported
At C:\Users\username\Desktop\filename.ps1:9 char:14
+ $DiskMount | Resize-Partition -Size ($PartSize.SizeMax)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (StorageWMI:ROOT/Microsoft/.../MSFT_Partition) [Resize-Partition], CimException
+ FullyQualifiedErrorId : StorageWMI 4097,Resize-Partition
このような場合,原因として何が考えられるでしょうか。
指定したサイズがディスクの容量を超えている
エラーメッセージからも分かるように,パラメーターで指定したパーティションサイズが,許容値を超えているようです。
しかし,その数値は,Get-PartitionSupportedSizeのSizeMax値を取ってきているのに,どうして受け付けてもらえないのでしょうか。
可能性の1つには,MBとbyteの単位の違いによるすれ違いがあるかもしれません。
Resize-Partitionで扱う単位は基本的にMBですが,Get-PartitionSupportedSizeで帰ってくる値は,1024を1単位とするbyteです。
それで,1024と1000の誤差によって丸められてしまった下桁が,許容値に収まらなくさせている可能性があります。
あるいは,ボリュームのサイズと,実際に使用できるキャパシティにも誤差があります。20GBで拡張したつもりなのに,OSからみると,19.9GBとなっていたりする経験がおありでしょう。
マスターファイルテーブル($Mft)などで使用されている管理領域分が加味されていないため,拡張に失敗している可能性もあります。
いずれにせよ,解決方法は簡単で,指定するサイズを少し小さくしてやることです。
上述のスクリプトで,Resize-Partition -Size ($PartSize.SizeMax -2MB)のように,2MBぐらいを引いてやるとエラーなく拡張できると思います。
それでもエラーが消えないようなら,3MBに増やすなどしてみてください。
エラーが表示されたとしても,実際にはパーティションが拡張されていることもありますので,実際にVHDをマウントして確認してみるのが手っ取り早いです。
以上,VHDをResize-Partitionする際の”Size Not Supported”エラーの対処法でした。
コメント