[トップページ] [FAQ 一覧]

対象:EC2 Launch

ドライブレターマッピングによる EC2インスタンスのドライブ名設定





ドライブ名変更の現象


インスタンスに複数のパーティションが存在しドライブレターがアサインされている場合、sysprep 後に起動するとドライブレターが変更されてしまいます。

例えば

Cドライブ
Eドライブ
Fドライブ

とアサインされいてる Windows を EC2Launch で sysprep した場合、起動すると

Cドライブ
Dドライブ
Eドライブ

とドライブ名が詰められてしまいます。

EC2Launchによりドライブ名が変更となる



旧EC2Config時代の解決方法


EC2Config時代 (Windows Server 2008ごろ)はGUIでドライブの設定が可能でしたが、 EC2LaunchではGUIでは設定不可となりました。
(DriveLetterConfig.xmlでも可能)


EC2Launchの解決方法




Windows Server 2016などでの対応方法です。

(1)EC2Launchでは以下の設定ファイルで行います。


C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json



json形式のファイルです。Windowsでのパーティションのラベル名、およびドライブをセットで記述します。
以下の例では "cdrive"というラベル名のパーティションは C ドライブに設定するという意味です。

設定例:

{
"driveLetterMapping": [
{
"volumeName": "cdrive",
"driveLetter": "C"
},
{
"volumeName": "edrive",
"driveLetter": "E"
},
{
"volumeName": "gdrive",
"driveLetter": "G"
},
{
"volumeName": "idrive",
"driveLetter": "I"
},
{
"volumeName": "kdrive",
"driveLetter": "K"
},
{
"volumeName": "mdrive",
"driveLetter": "M"
}


]
}




ラベルの設定方法は以下の通りです。以下の例ではE ドライブのラベルを設定しています。


C:\>label e:
Volume in drive E: is edrive
Volume Serial Number is ****-****
Volume label (32 characters, ENTER for none)? edrive




(2)以下スクリプトを一度だけ実行します。-Scheduleにより次回実行時に初期化されます。このオプションを指定しないと今すぐ初期化され意味がありません。なぜならEC2 Launch によるsysprep 後の次回起動時、あるいは EC2Launch による sysprep、停止後に生成された AMI から初めて起動されるときにディスクドライブがずれるからです。


C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule



実験結果では 既に初期化されているパーティションは初期化されませんでした。初期化されていない場合は初期化される(中身が消される)と思われます。


うまく動作しない場合


もしDriveLetterMappingConfig.jsonの設定が有効とならない場合、切り分けとして手動でドライブレターを変更してみてください。何らかの理由でロックされている可能性があります。

以下コマンドで json ファイルを Powershell のオブジェクトに変換してみてください。もし変換に失敗したら、jsonファイルに文法の誤りあると思われます。


PS> Get-Content C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json -Encoding UTF8 -Raw | ConvertFrom-Json




JSONに文法エラーがある場合:


PS C:\> Get-Content C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json -Encoding UTF8 -Raw | ConvertFrom-Json
ConvertFrom-Json : Invalid array passed in, ',' expected. (100): {
"driveLetterMapping": [
{
"volumeName": "cdrive",
"driveLetter": "C"
}
{
"volumeName": "edrive",
"driveLetter": "E"
},
{
"volumeName": "gdrive",
"driveLetter": "G"
},
{
"volumeName": "idrive",
"driveLetter": "I"
},
{
"volumeName": "kdrive",
"driveLetter": "K"
},
{
"volumeName": "mdrive",
"driveLetter": "M"
}
]
}
At line:1 char:113
+ ... \DriveLetterMappingConfig.json -Encoding UTF8 -Raw | ConvertFrom-Json
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand




成功時:

PS C:\> Get-Content C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json -Encoding UTF8 -Raw | ConvertFrom-Json

driveLetterMapping
------------------
{@{volumeName=cdrive; driveLetter=C}, @{volumeName=edrive; driveLetter=E}, @{volumeName=gdrive; driveLetter=G}, @{vo...




EC2Launch まとめ

ログを確認する


以下にログが保存されています。内容をチェックしエラーの原因を特定します。


C:\ProgramData\Amazon\EC2-Windows\Launch\Log\DiskInitialization.log




already taken by another disk エラー




以下のエラーが "DiskInitialization.log"に記録されている場合があります。


Drive letter 'X' is already taken by another disk .. skipping it



これは "DriveLetterMappingConfig.json" でドライブ名を変更しようとしましたが、すでに使用されていた場合などに表示されます。

その場合は変更する順番を大きいドライブを先に設定すると解決する場合があるようです

例:
C
D
E
F

ではなく
F
E
D
C

の順に変更する。

仮想メモリ(ページファイル)が設定されているドライブは変更できない


Windows 環境においては通常は仮想メモリはCドライブに設定されていますが、もし他のドライブに設定されているインスタンスをAMI化(イメージ化)する場合は注意が必要です。

例えば仮想メモリをDドライブに設定しているとします。

C:ラベル名=OS
D:ラベル名=data (仮想メモリ)
F:ラベル名=app

このインスタンスをEC2 Launch によりAMI化した場合、ドライブ名が以下のとおり変更になったとします。

C:ラベル名=OS
D:ラベル名=app (仮想メモリ)
E:ラベル名=data

この場合、DiskInitialization.ps1 によりDドライブをFドライブに変更しようとしますが、Dドライブは仮想メモリとして設定されているためOSによりFドライブへの変更が拒否されてしまします。
これは DiskInitialization.log には出力されませんでした。このように仮想メモリをCドライブ以外に設定している場合は注意が必要です。


【超重要】本ページは情報が古くなっている可能性があります。参考程度にしてください。








[ 一覧に戻る]


【注意事項】本ページの内容は個人的に調査した結果がであり内容が正しいことは保証されません。
またAWSサービスは常に改良、アップデートされており本ページの内容が古く誤った内容になる可能性もあります。変更になっても本ページが正しく更新されるとは限りません。
あくまでも参考程度でご覧ください。内容により発生したいかなる時間的損害、金銭的損害、その他の損害に関しても何人も保証しません。