Windows インスタンスでのディスクとボリュームのマッピング
EBS ボリュームを持つ Windows インスタンスは、ルートボリュームとして機能します。Windows インスタンスが AWS PV または Citrix PV ドライバーを使用している場合、オプションで最大 25 個のボリュームを追加し、合計 26 個のボリュームを作成できます。詳細については、インスタンスボリューム数の制限を参照してください。
インスタンスのインスタンスタイプによって、0 から 24 のインスタンスストアボリュームをインスタンスに使用できます。インスタンスで使用できる任意のインスタンスストアボリュームを使用するには、AMI の作成時またはインスタンスの起動時にそれらを指定する必要があります。インスタンスが実行中は、AMI の作成時、またはインスタンスの起動時に EBS ボリュームを追加するか、アタッチすることもできます。
インスタンスにボリュームを追加するときに、Amazon EC2 が使用するデバイス名を指定します。詳細については、Windows インスタンスでのデバイス名を参照してください。AWSWindows Amazon マシンイメージ (AMI) には、Amazon EC2 でインスタンスストアおよび EBS ボリュームを Windows ディスクおよびドライブ文字にマップするのに使用するドライバー一式が含まれています。AWS PV または Citrix PV ドライバーを使用する Windows AMI からインスタンスを起動した場合、このページ記載された関係を使用して、Windows ディスクをインスタンスストアおよび EBS ボリュームにマップできます。Windows AMI で Red Hat PV ドライバーを使用している場合、Citrix ドライバーを使用するようにインスタンスを更新できます。詳細については、Windows インスタンスでの PV ドライバーのアップグレードを参照してください。
目次
NVMe ボリュームの一覧表示
Disk Management または Powershell を使用して Windows インスタンス上のディスクを検索できます。
Disk Management を使用した NVMe ディスクの一覧表示
Disk Management を使用して Windows インスタンス上のディスクを検索できます。
Windows インスタンス上のディスクを見つけるには
-
リモートデスクトップを使用して Windows インスタンスにログインします。詳細については、 Windows インスタンスに接続するを参照してください。
-
[Disk Management] ユーティリティを起動します。
-
ディスクを確認します。ルートボリュームは、
C:\
としてマウントされた EBS ボリュームです。他に表示されているディスクがない場合は、AMI を作成したとき、またはインスタンスを起動したときに追加のボリュームを指定しませんでした。以下は、2 つの追加の EBS ボリュームで、
r5d.4xlarge
インスタンスを起動した場合に使用可能なディスクの例です。
PowerShell を使用した NVMe ディスクの一覧表示
次の PowerShell スクリプトでは、各ディスクと対応するデバイス名およびボリュームを一覧表示できます。これは、NVMe EBS とインスタンスストアボリュームを使用する、AWS Nitro System 上に構築されたインスタンスで使用することを意図したものです。
Windows インスタンスに接続し、次のコマンドを実行して PowerShell スクリプトの実行を有効にします。
Set-ExecutionPolicy RemoteSigned
次のスクリプトをコピーし、Windows インスタンスに mapping.ps1
として保存します。
# List the disks for NVMe volumes function Get-EC2InstanceMetadata { param([string]$Path) (Invoke-WebRequest -Uri "http://169.254.169.254/latest/$Path").Content } function GetEBSVolumeId { param($Path) $SerialNumber = (Get-Disk -Path $Path).SerialNumber if($SerialNumber -clike 'vol*'){ $EbsVolumeId = $SerialNumber.Substring(0,20).Replace("vol","vol-") } else { $EbsVolumeId = $SerialNumber.Substring(0,20).Replace("AWS","AWS-") } return $EbsVolumeId } function GetDeviceName{ param($EbsVolumeId) if($EbsVolumeId -clike 'vol*'){ $Device = ((Get-EC2Volume -VolumeId $EbsVolumeId ).Attachment).Device $VolumeName = "" } else { $Device = "Ephemeral" $VolumeName = "Temporary Storage" } Return $Device,$VolumeName } function GetDriveLetter{ param($Path) $DiskNumber = (Get-Disk -Path $Path).Number if($DiskNumber -eq 0){ $VirtualDevice = "root" $DriveLetter = "C" $PartitionNumber = (Get-Partition -DriveLetter C).PartitionNumber } else { $VirtualDevice = "N/A" $DriveLetter = (Get-Partition -DiskNumber $DiskNumber).DriveLetter if(!$DriveLetter) { $DriveLetter = ((Get-Partition -DiskId $Path).AccessPaths).Split(",")[0] } $PartitionNumber = (Get-Partition -DiskId $Path).PartitionNumber } return $DriveLetter,$VirtualDevice,$PartitionNumber } $Report = @() foreach($Path in (Get-Disk).Path) { $Disk_ID = ( Get-Partition -DiskId $Path).DiskId $Disk = ( Get-Disk -Path $Path).Number $EbsVolumeId = GetEBSVolumeId($Path) $Size =(Get-Disk -Path $Path).Size $DriveLetter,$VirtualDevice, $Partition = (GetDriveLetter($Path)) $Device,$VolumeName = GetDeviceName($EbsVolumeId) $Disk = New-Object PSObject -Property @{ Disk = $Disk Partitions = $Partition DriveLetter = $DriveLetter EbsVolumeId = $EbsVolumeId Device = $Device VirtualDevice = $VirtualDevice VolumeName= $VolumeName } $Report += $Disk } $Report | Sort-Object Disk | Format-Table -AutoSize -Property Disk, Partitions, DriveLetter, EbsVolumeId, Device, VirtualDevice, VolumeName
スクリプトを次のように実行します。
PS C:\>
.\mapping.ps1
次に、ルートボリューム、2 つの EBS ボリューム、および 2 つのインスタンスストアボリュームを持つインスタンスの出力例を示します。
Disk Partitions DriveLetter EbsVolumeId Device VirtualDevice VolumeName
---- ---------- ----------- ----------- ------ ------------- ----------
0 1 C vol-03683f1d861744bc7 /dev/sda1 root
1 1 D vol-082b07051043174b9 xvdb N/A
2 1 E vol-0a4064b39e5f534a2 xvdc N/A
3 1 F AWS-6AAD8C2AEEE1193F0 Ephemeral N/A Temporary Storage
4 1 G AWS-13E7299C2BD031A28 Ephemeral N/A Temporary Storage
Windows インスタンスで Tools for Windows PowerShell の認証情報を設定しなかった場合、スクリプトは EBS ボリューム ID を取得できず、EbsVolumeId
列に N/A が使用されます。
NVMe EBS ボリュームのマッピング
AWS Nitro System 上に構築されたインスタンスでは、EBS ボリュームは NVMe デバイスとして公開されます。Get-Disk
PS C:\>
Get-Disk
Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 3 NVMe Amazo... AWS6AAD8C2AEEE1193F0_00000001. Healthy Online 279.4 GB MBR 4 NVMe Amazo... AWS13E7299C2BD031A28_00000001. Healthy Online 279.4 GB MBR 2 NVMe Amazo... vol0a4064b39e5f534a2_00000001. Healthy Online 8 GB MBR 0 NVMe Amazo... vol03683f1d861744bc7_00000001. Healthy Online 30 GB MBR 1 NVMe Amazo... vol082b07051043174b9_00000001. Healthy Online 8 GB MBR
ebsnvme-id コマンドを実行して、NVMe ディスク番号を EBS ボリューム ID およびデバイス名にマッピングすることもできます。
PS C:\>
C:\PROGRAMDATA\Amazon\Tools\ebsnvme-id.exe
Disk Number: 0 Volume ID: vol-03683f1d861744bc7 Device Name: sda1 Disk Number: 1 Volume ID: vol-082b07051043174b9 Device Name: xvdb Disk Number: 2 Volume ID: vol-0a4064b39e5f534a2 Device Name: xvdc
ボリュームの一覧表示
Disk Management または Powershell を使用して Windows インスタンス上のディスクを検索できます。
Disk Management を使用したディスクの一覧表示
Disk Management を使用して Windows インスタンス上のディスクを検索できます。
Windows インスタンス上のディスクを見つけるには
-
リモートデスクトップを使用して Windows インスタンスにログインします。詳細については、 Windows インスタンスに接続するを参照してください。
-
[Disk Management] ユーティリティを起動します。
Windows Server 2012 以降のタスクバーで、Windows ロゴを右クリックし、[Disk Management (ディスクの管理)] を選択します。Windows Server 2008 では、[Start]、[Administrative Tools]、[Computer Management]、[Disk Management] の順に選択します。
-
ディスクを確認します。ルートボリュームは、
C:\
としてマウントされた EBS ボリュームです。他に表示されているディスクがない場合は、AMI を作成したとき、またはインスタンスを起動したときに追加のボリュームを指定しませんでした。以下は、インスタンスストアボリューム (ディスク 2) と追加の EBS ボリューム (ディスク 1) で、
m3.medium
インスタンスを起動した場合に使用可能なディスクの例です。 -
[Disk 1] というラベルが付けられた灰色のペインを右クリックし、[Properties] を選択します。[Location] の値を書き留め、ディスクデバイスをデバイス名にマッピングする のテーブルで調べます。例えば、次のディスクに Bus Number 0, Target Id 9, LUN 0 という場所があるとします。EBS のテーブルから、この場所のデバイス名は
xvdj
であることがわかります。
ディスクデバイスをデバイス名にマッピングする
インスタンスのブロックデバイスドライバーは、ボリュームをマウントするときに実際のボリューム名を割り当てます。
Mappings
インスタンスストアボリューム
次の表は、Citrix PV および AWS PV ドライバーが non-NVMe インスタンスストアボリュームを Windows ボリュームにどのようにマップするかを示しています。使用できるインスタンスストアボリュームの数は、インスタンスタイプによって決まります。詳細については、インスタンスストアボリュームを参照してください。
場所 | デバイス名 |
---|---|
Bus Number 0, Target ID 78, LUN 0 |
xvdca |
Bus Number 0, Target ID 79, LUN 0 |
xvdcb |
Bus Number 0, Target ID 80, LUN 0 |
xvdcc |
Bus Number 0, Target ID 81, LUN 0 |
xvdcd |
Bus Number 0, Target ID 82, LUN 0 |
xvdce |
Bus Number 0, Target ID 83, LUN 0 |
xvdcf |
Bus Number 0, Target ID 84, LUN 0 |
xvdcg |
Bus Number 0, Target ID 85, LUN 0 |
xvdch |
Bus Number 0, Target ID 86, LUN 0 |
xvdci |
Bus Number 0, Target ID 87, LUN 0 |
xvdcj |
Bus Number 0, Target ID 88, LUN 0 |
xvdck |
Bus Number 0, Target ID 89, LUN 0 |
xvdcl |
EBS ボリューム
次の表は、Citrix PV および AWS PV ドライバーが非 NVME EBS ボリュームを Windows ボリュームにどのようにマップするかを示しています。
場所 | デバイス名 |
---|---|
Bus Number 0, Target ID 0, LUN 0 |
/dev/sda1 |
Bus Number 0, Target ID 1, LUN 0 |
xvdb |
Bus Number 0, Target ID 2, LUN 0 |
xvdc |
Bus Number 0, Target ID 3, LUN 0 |
xvdd |
Bus Number 0, Target ID 4, LUN 0 |
xvde |
Bus Number 0, Target ID 5, LUN 0 |
xvdf |
Bus Number 0, Target ID 6, LUN 0 |
xvdg |
Bus Number 0, Target ID 7, LUN 0 |
xvdh |
Bus Number 0, Target ID 8, LUN 0 |
xvdi |
Bus Number 0, Target ID 9, LUN 0 |
xvdj |
Bus Number 0, Target ID 10, LUN 0 |
xvdk |
Bus Number 0, Target ID 11, LUN 0 |
xvdl |
Bus Number 0, Target ID 12, LUN 0 |
xvdm |
Bus Number 0, Target ID 13, LUN 0 |
xvdn |
Bus Number 0, Target ID 14, LUN 0 |
xvdo |
Bus Number 0, Target ID 15, LUN 0 |
xvdp |
Bus Number 0, Target ID 16, LUN 0 |
xvdq |
Bus Number 0, Target ID 17, LUN 0 |
xvdr |
Bus Number 0, Target ID 18, LUN 0 |
xvds |
Bus Number 0, Target ID 19, LUN 0 |
xvdt |
Bus Number 0, Target ID 20, LUN 0 |
xvdu |
Bus Number 0, Target ID 21, LUN 0 |
xvdv |
Bus Number 0, Target ID 22, LUN 0 |
xvdw |
Bus Number 0, Target ID 23, LUN 0 |
xvdx |
Bus Number 0, Target ID 24, LUN 0 |
xvdy |
Bus Number 0, Target ID 25, LUN 0 |
xvdz |
PowerShell を使用したディスクの一覧表示
次の PowerShell スクリプトでは、各ディスクと対応するデバイス名およびボリュームを一覧表示できます。
要件と制限
-
Windows Server 2012 以降が必要です。
-
EBS ボリューム ID を取得するには認証情報が必要です。Tools for PowerShell を使用してプロファイルを設定するか、インスタンスに IAM ロールをアタッチできます。
-
NVMe ボリュームをサポートしません。
-
ダイナミックディスクはサポートしません。
Windows インスタンスに接続し、次のコマンドを実行して PowerShell スクリプトの実行を有効にします。
Set-ExecutionPolicy RemoteSigned
次のスクリプトをコピーし、Windows インスタンスに mapping.ps1
として保存します。
# List the disks function Convert-SCSITargetIdToDeviceName { param([int]$SCSITargetId) If ($SCSITargetId -eq 0) { return "sda1" } $deviceName = "xvd" If ($SCSITargetId -gt 25) { $deviceName += [char](0x60 + [int]($SCSITargetId / 26)) } $deviceName += [char](0x61 + $SCSITargetId % 26) return $deviceName } [string[]]$array1 = @() [string[]]$array2 = @() [string[]]$array3 = @() [string[]]$array4 = @() Get-WmiObject Win32_Volume | Select-Object Name, DeviceID | ForEach-Object { $array1 += $_.Name $array2 += $_.DeviceID } $i = 0 While ($i -ne ($array2.Count)) { $array3 += ((Get-Volume -Path $array2[$i] | Get-Partition | Get-Disk).SerialNumber) -replace "_[^ ]*$" -replace "vol", "vol-" $array4 += ((Get-Volume -Path $array2[$i] | Get-Partition | Get-Disk).FriendlyName) $i ++ } [array[]]$array = $array1, $array2, $array3, $array4 Try { $InstanceId = Get-EC2InstanceMetadata -Category "InstanceId" $Region = Get-EC2InstanceMetadata -Category "Region" | Select-Object -ExpandProperty SystemName } Catch { Write-Host "Could not access the instance Metadata using AWS Get-EC2InstanceMetadata CMDLet. Verify you have AWSPowershell SDK version '3.1.73.0' or greater installed and Metadata is enabled for this instance." -ForegroundColor Yellow } Try { $BlockDeviceMappings = (Get-EC2Instance -Region $Region -Instance $InstanceId).Instances.BlockDeviceMappings $VirtualDeviceMap = (Get-EC2InstanceMetadata -Category "BlockDeviceMapping").GetEnumerator() | Where-Object { $_.Key -ne "ami" } } Catch { Write-Host "Could not access the AWS API, therefore, VolumeId is not available. Verify that you provided your access keys or assigned an IAM role with adequate permissions." -ForegroundColor Yellow } Get-disk | ForEach-Object { $DriveLetter = $null $VolumeName = $null $VirtualDevice = $null $DeviceName = $_.FriendlyName $DiskDrive = $_ $Disk = $_.Number $Partitions = $_.NumberOfPartitions $EbsVolumeID = $_.SerialNumber -replace "_[^ ]*$" -replace "vol", "vol-" if ($Partitions -ge 1) { $PartitionsData = Get-Partition -DiskId $_.Path $DriveLetter = $PartitionsData.DriveLetter | Where-object { $_ -notin @("", $null) } $VolumeName = (Get-PSDrive | Where-Object { $_.Name -in @($DriveLetter) }).Description | Where-object { $_ -notin @("", $null) } } If ($DiskDrive.path -like "*PROD_PVDISK*") { $BlockDeviceName = Convert-SCSITargetIdToDeviceName((Get-WmiObject -Class Win32_Diskdrive | Where-Object { $_.DeviceID -eq ("\\.\PHYSICALDRIVE" + $DiskDrive.Number) }).SCSITargetId) $BlockDeviceName = "/dev/" + $BlockDeviceName $BlockDevice = $BlockDeviceMappings | Where-Object { $BlockDeviceName -like "*" + $_.DeviceName + "*" } $EbsVolumeID = $BlockDevice.Ebs.VolumeId $VirtualDevice = ($VirtualDeviceMap.GetEnumerator() | Where-Object { $_.Value -eq $BlockDeviceName }).Key | Select-Object -First 1 } ElseIf ($DiskDrive.path -like "*PROD_AMAZON_EC2_NVME*") { $BlockDeviceName = (Get-EC2InstanceMetadata -Category "BlockDeviceMapping").ephemeral((Get-WmiObject -Class Win32_Diskdrive | Where-Object { $_.DeviceID -eq ("\\.\PHYSICALDRIVE" + $DiskDrive.Number) }).SCSIPort - 2) $BlockDevice = $null $VirtualDevice = ($VirtualDeviceMap.GetEnumerator() | Where-Object { $_.Value -eq $BlockDeviceName }).Key | Select-Object -First 1 } ElseIf ($DiskDrive.path -like "*PROD_AMAZON*") { if ($DriveLetter -match '[^a-zA-Z0-9]') { $i = 0 While ($i -ne ($array3.Count)) { if ($array[2][$i] -eq $EbsVolumeID) { $DriveLetter = $array[0][$i] $DeviceName = $array[3][$i] } $i ++ } } $BlockDevice = "" $BlockDeviceName = ($BlockDeviceMappings | Where-Object { $_.ebs.VolumeId -eq $EbsVolumeID }).DeviceName } ElseIf ($DiskDrive.path -like "*NETAPP*") { if ($DriveLetter -match '[^a-zA-Z0-9]') { $i = 0 While ($i -ne ($array3.Count)) { if ($array[2][$i] -eq $EbsVolumeID) { $DriveLetter = $array[0][$i] $DeviceName = $array[3][$i] } $i ++ } } $EbsVolumeID = "FSxN Volume" $BlockDevice = "" $BlockDeviceName = ($BlockDeviceMappings | Where-Object { $_.ebs.VolumeId -eq $EbsVolumeID }).DeviceName } Else { $BlockDeviceName = $null $BlockDevice = $null } New-Object PSObject -Property @{ Disk = $Disk; Partitions = $Partitions; DriveLetter = If ($DriveLetter -eq $null) { "N/A" } Else { $DriveLetter }; EbsVolumeId = If ($EbsVolumeID -eq $null) { "N/A" } Else { $EbsVolumeID }; Device = If ($BlockDeviceName -eq $null) { "N/A" } Else { $BlockDeviceName }; VirtualDevice = If ($VirtualDevice -eq $null) { "N/A" } Else { $VirtualDevice }; VolumeName = If ($VolumeName -eq $null) { "N/A" } Else { $VolumeName }; DeviceName = If ($DeviceName -eq $null) { "N/A" } Else { $DeviceName }; } } | Sort-Object Disk | Format-Table -AutoSize -Property Disk, Partitions, DriveLetter, EbsVolumeId, Device, VirtualDevice, DeviceName, VolumeName
スクリプトを次のように実行します。
PS C:\>
.\mapping.ps1
出力例を次に示します。
Disk Partitions DriveLetter EbsVolumeId Device VirtualDevice DeviceName VolumeName
---- ---------- ----------- ----------- ------ ------------- ---------- ----------
0 1 C vol-0561f1783298efedd /dev/sda1 N/A NVMe Amazon Elastic B N/A
1 1 D vol-002a9488504c5e35a xvdb N/A NVMe Amazon Elastic B N/A
2 1 E vol-0de9d46fcc907925d xvdc N/A NVMe Amazon Elastic B N/A
Windows インスタンスで認証情報を指定しなかった場合、スクリプトは EBS ボリューム ID を取得できず、EbsVolumeId
列で N/A を使用します。