Resize-Partitionで”Size Not Supported”エラーが出るときの対処法

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”エラーの対処法でした。

コメント