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サービスは常に改良、アップデートされており本ページの内容が古く誤った内容になる可能性もあります。変更になっても本ページが正しく更新されるとは限りません。
あくまでも参考程度でご覧ください。内容により発生したいかなる時間的損害、金銭的損害、その他の損害に関しても何人も保証しません。