一時ディスクのドライブ文字が変わる

Last Update: feedback 共有

こんにちは。Azure テクニカル サポート チームの重田です。

Azure Windows VM では、規定で一時ディスクにドライブ文字 D が割り当てられますが、
お客様の中には、アプリケーションの仕様上、データ ドライブを D ドライブと設定しなければならない場合があります。
その場合には、下記公開情報の手順にて一時ディスクのドライブ文字を変更いただけます。

しかしながら、一時ディスクのドライブ文字を D から変更いただいている場合、VM の停止 / 起動など物理ホスト サーバーの移動いただいた際に、一時ディスクのドライブ文字が変更される場合があります。


■ 問題の動作につきまして

物理ホストの移動するタイミングにて、一時ディスクのドライブ文字が変更される動作は、下記のタイミング・条件によりごく稀に発生する場合があります。

  • タイミング:
    VM の停止 (割り当て解除) / 起動、再デプロイ、サイズ変更、ASR で対向リージョンにフェールオーバーを行ったなど、物理ホストサーバ移動後の VM の起動時

  • 条件:
    データ ドライブのドライブ文字 (例えば D) に対して、一時ディスクのドライブ文字が T など、ドライブ文字間が空いているアルファベットをご設定いただいている

  • 変更点:
    一時ディスクのドライブ文字が、データ ドライブのドライブ文字に連続したドライブ文字に変更される
    (例えば、データ ドライブ文字が D の時に一時ディスクのドライブ文字 が E に変更される)

  • 発生頻度:
    ごく稀

結論から申し上げますと、本動作は、現行の Azure の想定された起こりうる動作でございます。
すでに内部にて Azure の動作の改善点として確認されており、現在対処の準備を進めておりますが、現行の動作からの変更ということで長期にわたる可能性があり、直近での改善は困難であると想定されます。


■ 問題の動作による影響につきまして

Azure Marketplace イメージから作成した Windows VM では、規定で pagefile.sys
(仮想メモリ / ページング ファイル) が一時ディスクにシステム管理サイズで設定されております。

一時ディスクに pagefile.sys をご設定いただいている状況で、一時ディスクのドライブ文字が変更された場合、C ドライブに pagefile.sys が設定・配置されます。
そのため、ご利用状況によって pagefile.sys が拡張された際に、C ドライブの容量を圧迫することがございます。


■ 対処策につきまして

現在、本動作につきましては、下記 2 つの方法が対処策となります。

  1. 一時ディスクを既定値である D ドライブで運用いただく。
  2. OS 起動時に一時ディスクのドライブ文字を確認し、変更されている場合には再度ドライブ文字をご変更いただく。
    pagefile.sys を一時ディスクにご設定いただいている場合には、そちらも併せてご変更いただく (要再起動)。

対処策 1 につきましては、ご利用いただくアプリケーションの要件でデータ ドライブのドライブ文字を D にしなければならないといった制約がない場合にご検討ください。

対処策 2 につきましては、手動変更ではなく、タスクスケジューラにて登録した PowerShell スクリプトを OS 起動時に実行する方法 (スタートアップ スクリプト) になります。
具体的なサンプル スクリプトと、タスクスケジューラによるスクリプト実行設定を下記にご紹介いたします。

□ サンプル スクリプト

本サンプル スクリプトは、ドライブ文字の設定状況を確認し、一時ディスクのドライブ文字が変更されている場合にはドライブ文字および pagefile.sys の設定を変更する処理を行う PowerShell スクリプトになります。
一時ディスクを T ドライブ としておりますので、お客様にて必要に応じてご変更ください。

※ 一時ディスクのドライブ文字が変更されていない場合には、特に設定変更の処理は実施されません。
※ 本スクリプトが実行された際には、ゲスト OS の再起動 が実施されます。

なお、お客様環境に導入いただく際には、十分な検証作業をご実施ください。

免責事項

本サンプルスクリプトは、サンプルとして提供されるものであり、製品の実運用環境で使用されることを前提に提供されるものではありません。

本サンプルコードおよびそれに関連するあらゆる情報は、「現状のまま」で提供されるものであり、商品性や特定の目的への適合性に関する黙示の保証も含め、明示・黙示を問わずいかなる保証も付されるものではありません。

マイクロソフトは、お客様に対し、本サンプルコードを使用および改変するための非排他的かつ無償の権利ならびに本サンプルコードをオブジェクトコードの形式で複製および頒布するための非排他的かつ無償の権利を許諾します。

但し、お客様は、(1)本サンプルコードが組み込まれたお客様のソフトウェア製品のマーケティングのためにマイクロソフトの会社名、ロゴまたは、商標を用いないこと、(2)本サンプルコードが組み込まれたお客様のソフトウェア製品に有効な著作権表示をすること、および(3)本サンプルコードの使用または頒布から生じるあらゆる損害 (弁護士費用を含む)に関する請求または訴訟について、マイクロソフトおよびマイクロソフトの取引業者に対し補償し、損害を与えないことに同意するものとします。

SampleScript.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#一時ディスクのラベル
$DriveLabel="Temporary Storage"

#現在の一時ディスクのドライブ文字
$DriveLetter=Get-Volume | where FileSystemLabel -match $DriveLabel

#変更したい一時ディスクのドライブ文字
$NewDriveLetter="T"

#現在存在するドライブ文字
$AllLetter=Get-Partition | select DriveLetter

#pagefile の設定情報があるレジストリ パス
$RegistryPath="Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management"

#pagefile の設定: T ドライブにシステム管理サイズで pagefile.sys を設置
$NewValue="T:\pagefile.sys 0 0"

#ドライブの存在判定 (現在 T ドライブが存在しているか)
if (!($AllLetter.DriveLetter -contains $NewDriveLetter)) {

#存在しない場合
#現在の一時ディスクのドライブ文字を T ドライブに再設定
Set-Partition -Driveletter $DriveLetter.DriveLetter -NewDriveLetter $NewDriveLetter

#設定後、T ドライブに改めて pagefile.sys 設定
Set-ItemProperty -Path $RegistryPath -Name PagingFiles -Value $NewValue

#OS 再起動
Restart-Computer
}

□ タスクスケジューラの設定

タスクスケジューラは以下のようにご設定いただけますと、OS 起動時にスクリプトを実行することが可能となります。
上記サンプル スクリプトをお客様のご利用状況に合わせてご変更いただき (例えば、一時ディスクのドライブ文字を適宜ご変更いただくなど)、タスクスケジューラにご設定ください。

1) SampleScript.txt をSampleScript.ps1 に変更します。

2) [サーバー マネージャー] - [ツール] - [タスク スケジューラ] から
[タスクの作成] をクリックします。

3) [全般] タブにて以下の設定を実施します。

名前 : 任意でご設定ください
タスク実行時に使うユーザー アカウント : 管理者権限ユーザ
ユーザーがログオンしているかどうかにかかわらず実行する : 有効
最上位の特権で実行する : 有効

4) [トリガー] - [新規] にてタスクの開始に [スタートアップ時] を選択し、[OK] をクリックします。

5) [操作] - [新規] にて [プログラムの開始] が選択されている事を確認し、以下を設定後、[OK] を押下して設定を反映させます。

プログラム/スクリプト : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加 : <SampleScript.ps1 のパス>\SampleScript.ps1

※ パスワードを要求されましたら、対象ユーザー (管理者) のパスワードを入力します。


本稿が皆様のお役に立てれば幸いです。

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。