Azure VM(Windows)の仮想メモリとPowerShellでの設定変更

前回のエントリではWindows11機にて仮想メモリのページファイルの確認をおこなった。今回はAzure VMのWindows ServerでPowerShellを使った仮想メモリの設定変更を実施したので、その方法をまとめていく。

Azure VMのWindows Serverでは、一部のVMサイズを除き、仮想メモリページファイル(pagefile.sys)は既定でDドライブ(一時ディスク)上に作成される。(既定で一時ディスクを持たないサイズのVMについてはMSLearnを参照)

今回は、Cドライブ上に新たにページファイルを作成・設定を行い、その後、Dドライブ上のページファイルを参照している仮想メモリ設定を無効化、削除するまでの流れを中心に記載する。

検証環境と制約条件

  • OSエディション:Windows Server 2022
  • バージョン:Datacenter
  • SKU:Standard B2s (2vcpu、4 GiBメモリ)
  • PowerShellバージョン:5.1

コマンドプロンプトもしくはPowerShellからwmic(Windowsマシン上のさまざまな情報を取得できる管理用コマンドラインツール)での設定も検討したが、wmicはWindows 10 21H1、およびWindows Server 21H1 半期チャネル リリース時点で非推奨となっているため(MSLearn)、今回はPowerShellコマンドで設定変更を行うことにした。

PowerShellを使ったページファイルの設定変更

Get-WMIObjectで設定確認

設定変更を行う前に現状を確認する。これはGet-WMIObjectコマンドレットで実施できる。
Get-WMIObjectについてはこちらを参照。WMIとして保持されるオブジェクトはプロバイダ、クラスなどで分類わけがされており、ページファイル設定などのOS上の情報は”オペレーティング システム”クラスに属する”Win32_PageFileUsage”クラスが該当するらしい。
(オペレーティングシステムクラスに属するクラスだけで多数存在しているので、詳細はMSLearnにて)

以下の内容で実行した。

Get-WMIObject -Class Win32_PageFileUsage

ページファイルのパスが D:\pagefile.sys となっていることが確認できる。次はCドライブ上にpagefileを作成する。

Set-WmiInstanceで仮想メモリ設定変更、無効化

Set-WmiInstanceコマンドレットでWMIクラスインスタンスの作成・設定が行える。
基本的に -Class で操作対象クラスを指定、 -Arguments 引数で設定したい内容を記述する。

仮想メモリのページファイルは複数ドライブにまたがって複数作成できるので、とりあえずCドライブ直下に作成してみる。(サイズの最大値最小値もひとまず適当)

Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{Name='C:\pagefile.sys';InitialSize=2048;MaximumSize=4096}

ページファイルが作成された。

続いてDドライブ上のページファイルを無効化する。Set-WMIInstance コマンドレットで最小値と最大値を0にすれば無効化できるらしいが、自分は別の方法でやってみた。
調べたところ、Get-WMIObjectで対象のクラスのインスタンスを取得、そのインスタンスで Delete()メソッドを実行することで対象オブジェクトの情報を消せることが分かった。(配列$pagefilesettingの0番目のデータを対象にDelete()を実行)

PS C:\Users\azureuser> Get-WmiObject -Class Win32_PageFileSetting

MaximumSize Name            Caption
----------- ----            -------
          0 D:\pagefile.sys D:\ 'pagefile.sys'
       4096 C:\pagefile.sys C:\ 'pagefile.sys'


PS C:\Users\azureuser> $pagefilesetting = Get-WmiObject -Class Win32_PageFileSetting
PS C:\Users\azureuser> $pagefilesetting[0].Delete()
PS C:\Users\azureuser>
PS C:\Users\azureuser> Get-WmiObject -Class Win32_PageFileSetting

MaximumSize Name            Caption
----------- ----            -------
       4096 C:\pagefile.sys C:\ 'pagefile.sys'


PS C:\Users\azureuser>

設定が無効(ページングファイルなし)になっていることが確認できる。

古いページファイルを削除する方法

コマンドラインもしくはシステムの詳細設定からページファイルを無効化しただけでは、古いページファイルは残存したままとなる。(ページファイルが確認できない、という方はこちらのエントリを参考にフォルダーオプションを変更してみてほしい。)

別プログラムがまだ参照しているらしい。一度、サーバを再起動してみる。

古いページファイルが削除されていることが確認できた。

コメント

タイトルとURLをコピーしました