Amazon EC2 Windows インスタンスの非 NVMe ディスクをボリュームにマッピングする - Amazon Elastic Compute Cloud

Amazon EC2 Windows インスタンスの非 NVMe ディスクをボリュームにマッピングする

AWS PV または Citrix PV ドライバーを使用する Windows AMI から起動されたインスタンスの場合、このページ記載された関係を使用して、Windows ディスクをインスタンスストアおよび EBS ボリュームにマッピングできます。このトピックでは、インスタンスの Windows オペレーティングシステムで使用できる非 NVMe ディスクを表示する方法について説明します。また、これらの非 NVMe ディスクを基礎となる Amazon EBS ボリューム、および Amazon EC2 で使用されるブロックデバイスマッピングに指定されたデバイス名にマッピングする方法も示します。

注記

インスタンスを起動する場合 Windows AMI で Red Hat PV ドライバーを使用している場合、Citrix ドライバーを使用するようにインスタンスを更新できます。詳細については、「EC2 Windows インスタンスでの PV ドライバーのアップグレード」を参照してください。

非 NVMe ディスクを一覧表示する

Disk Management または PowerShell を使用して、Windows インスタンス上のディスクを確認できます。

Disk Management
Windows インスタンス上のディスクを見つけるには
  1. リモートデスクトップを使用して Windows インスタンスにログインします。詳細については、RDP を使用した Windows インスタンスへの接続を参照してください。

  2. [Disk Management] ユーティリティを起動します。

    タスクバーで Windows ロゴを右クリックし、[ディスクの管理] を選択します。

  3. ディスクを確認します。ルートボリュームは、C:\ としてマウントされた EBS ボリュームです。他に表示されているディスクがない場合は、AMI を作成したとき、またはインスタンスを起動したときに追加のボリュームを指定しませんでした。

    以下は、インスタンスストアボリューム (ディスク 2) と追加の EBS ボリューム (ディスク 1) で、m3.medium インスタンスを起動した場合に使用可能なディスクの例です。

    ルートボリューム、1 つのインスタンスストアボリューム、および 1 つの EBS ボリュームによるディスク管理。
  4. [Disk 1] というラベルが付けられた灰色のペインを右クリックし、[Properties] を選択します。[Location] の値を書き留め、非 NVMe ディスクをボリュームにマッピングする のテーブルで調べます。例えば、次のディスクに Bus Number 0, Target Id 9, LUN 0 という場所があるとします。EBS のテーブルから、この場所のデバイス名は xvdj であることがわかります。

    EBS ボリュームの場所。
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 を使用します。

非 NVMe ディスクをボリュームにマッピングする

インスタンスのブロックデバイスドライバーは、ボリュームをマウントするときに実際のボリューム名を割り当てます。

インスタンスストアボリューム

次の表は、Citrix PV および AWS PV ドライバーが non-NVMe インスタンスストアボリュームを Windows ボリュームにどのようにマップするかを示しています。使用できるインスタンスストアボリュームの数は、インスタンスタイプによって決まります。詳細については、EC2 インスタンスのインスタンスストアボリュームの制限を参照してください。

場所 デバイス名

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