vm.gowatana.jp

NEOにほんごVMware(仮)

PowerCLI での VM 設定変更例。(MemoryReservationLockedToMax)

PowerCLI で、Set-VM や Set-VMResourceConfiguration といったコマンドレットにオプションが用意されていない設定を変更してみます。今回は、VM の「すべてのゲスト メモリを予約 (すべてロック)」を設定変更してみます。(古い投稿は こちら

今回の内容です。

 

今回の環境

今回利用した環境は下記です。ただし、以前のバージョンでも同様に設定できます。

  • vCenter Server 7.0 U3
  • PowerShell 5.1(Windows 10)
  • PowerCLI 12.4

 

設定変更してみるパラメータ

VM のリソース設定に、「すべてのゲスト メモリを予約 (すべてロック)」 というものがあります。これは、API のプロパティでは MemoryReservationLockedToMax です。

この設定を有効化すると、VM が起動されたときに設定容量までメモリが予約されて、必ず利用できることが保証されます。

ただし、この設定は PowerCLI の Set-VM のようなコマンドレットでは変更できません。そこで、オブジェクトのもつ ExtensionData から、API のメソッドを利用して変更してみます。

 

MemoryReservationLockedToMax 設定変更の例 1

VM「vm01」は、「すべてのメモリを予約」 が無効な状態(False)です。

PowerCLI> Get-VM -Name "vm01" | select {$_.ExtensionData.Config.MemoryReservationLockedToMax}

$_.ExtensionData.Config.MemoryReservationLockedToMax
----------------------------------------------------
                                               False

 

ついでに、いくつか他の VM も設定確認しておきます。

PowerCLI> Get-VM -Name "vm0?" | select Name,@{N="MemoryReservationLockedToMax";E={$_.ExtensionData.Config.MemoryReservationLockedToMax}} | Sort-Object Name

Name MemoryReservationLockedToMax
---- ----------------------------
vm01                        False
vm02                        False
vm03                        False

 

VM の設定を格納するオブジェクトを作成しておきます。

PowerCLI> $spec = New-Object VMware.Vim.VirtualMachineConfigSpec

 

そして、MemoryReservationLockedToMax を有効(True)に設定します。

ただしこの時点では、まだ VM には反映されません。

PowerCLI> $spec.MemoryReservationLockedToMax = $true
PowerCLI> $spec.MemoryReservationLockedToMax
True

 

設定したオブジェクト($spec)を指定して、ReconfigVM メソッドで VM を再構成します。

PowerCLI> (Get-VM -Name "vm01").ExtensionData.ReconfigVM($spec)

 

これで、VM の「すべてのメモリを予約」設定が有効(True)になりました。

PowerCLI> Get-VM -Name "vm0?" | select Name,@{N="MemoryReservationLockedToMax";E={$_.ExtensionData.Config.MemoryReservationLockedToMax}} | Sort-Object Name

Name MemoryReservationLockedToMax
---- ----------------------------
vm01                         True
vm02                        False
vm03                        False

 

vSphere Client でも、設定変更されたことが確認できます。

f:id:gowatana:20211104005908p:plain

 

MemoryReservationLockedToMax 設定変更の例 2

ここまでのコマンドラインを元に、ForEach-Object で複数の VM をまとめて設定してみます。

Get-VM -Name "vm0?" | foreach {
    $vm = $_
    $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
    $spec.MemoryReservationLockedToMax = $true
    $vm.ExtensionData.ReconfigVM($spec)
}

 

vm0?(vm01、vm02、vm03)の設定が、True に変更されました。

PowerCLI> Get-VM -Name "vm0?" | select Name,@{N="MemoryReservationLockedToMax";E={$_.ExtensionData.Config.MemoryReservationLockedToMax}} | Sort-Object Name

Name MemoryReservationLockedToMax
---- ----------------------------
vm01                         True
vm02                         True
vm03                         True

 

MemoryReservationLockedToMax 無効化での注意点

MemoryReservationLockedToMax を有効化してから無効に変更(True → False)した場合は、メモリ予約の容量値は残ってしまいます。

f:id:gowatana:20211104011440p:plain

 

これは下記のように、一般的な Set-VMResourceConfiguration コマンドレットで解除(ゼロに変更)できます。

PowerCLI> Get-VM -Name "vm01" | Get-VMResourceConfiguration | Set-VMResourceConfiguration -MemReservationMB 0

 

参考情報

VirtualMachineConfigSpec オブジェクトでは、下記のように設定できそうな項目を確認できます。

PS C:\> $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
PS C:\> $spec

ChangeVersion                :
Name                         :
Version                      :
CreateDate                   :
Uuid                         :
InstanceUuid                 :
NpivNodeWorldWideName        :
NpivPortWorldWideName        :
NpivWorldWideNameType        :
NpivDesiredNodeWwns          :
NpivDesiredPortWwns          :
NpivTemporaryDisabled        :
NpivOnNonRdmDisks            :
NpivWorldWideNameOp          :
LocationId                   :
GuestId                      :
AlternateGuestName           :
Annotation                   :
Files                        :
Tools                        :
Flags                        :
ConsolePreferences           :
PowerOpInfo                  :
NumCPUs                      :
VcpuConfig                   :
NumCoresPerSocket            :
MemoryMB                     :
MemoryHotAddEnabled          :
CpuHotAddEnabled             :
CpuHotRemoveEnabled          :
VirtualICH7MPresent          :
VirtualSMCPresent            :
DeviceChange                 :
CpuAllocation                :
MemoryAllocation             :
LatencySensitivity           :
CpuAffinity                  :
MemoryAffinity               :
NetworkShaper                :
CpuFeatureMask               :
ExtraConfig                  :
SwapPlacement                :
BootOptions                  :
VAppConfig                   :
FtInfo                       :
RepConfig                    :
VAppConfigRemoved            :
VAssertsEnabled              :
ChangeTrackingEnabled        :
Firmware                     :
MaxMksConnections            :
GuestAutoLockEnabled         :
ManagedBy                    :
MemoryReservationLockedToMax :
NestedHVEnabled              :
VPMCEnabled                  :
ScheduledHardwareUpgradeInfo :
VmProfile                    :
MessageBusTunnelEnabled      :
Crypto                       :
MigrateEncryption            :
SgxInfo                      :
FtEncryptionMode             :
GuestMonitoringModeInfo      :
SevEnabled                   :
PmemFailoverEnabled          :

 

以上、PowerCLI のメソッドを利用して VM を設定変更してみる話でした。