將 Amazon EC2 Windows 執行個體上的非NVMe磁碟對應至磁碟區 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Amazon EC2 Windows 執行個體上的非NVMe磁碟對應至磁碟區

對於從使用 AWS PV 或 Citrix PV 驅動程式AMI的 Windows 啟動的執行個體,您可以使用此頁面所述的關係,將 Windows 磁碟映射至執行個體存放區和EBS磁碟區。本主題說明如何檢視執行個體上 Windows 作業系統可用的非NVMe磁碟。它還顯示如何將這些非NVMe磁碟映射到基礎 Amazon EBS磁碟區,以及為 Amazon 所使用的區塊型裝置映射指定的裝置名稱EC2。

注意

如果您啟動執行個體 如果您的 Windows AMI使用 Red Hat PV 驅動程式,則可以更新執行個體以使用 Citrix 驅動程式。如需詳細資訊,請參閱升級 EC2 Windows 執行個體上的 PV 驅動程式

列出非NVMe磁碟

您可以使用磁碟管理或 在 Windows 執行個體上尋找磁碟 PowerShell。

Disk Management
搜尋 Windows 執行個體上的磁碟
  1. 使用遠端桌面登入 Windows 執行個體。如需詳細資訊,請參閱 使用 連線至 Windows 執行個體 RDP

  2. 啟動磁碟管理公用程式。

    在任務列上,在 Windows 標誌上按一下滑鼠右鍵,然後選擇磁碟管理

  3. 檢閱磁碟。根磁碟區是掛載為 的EBS磁碟區C:\。如果沒有顯示其他磁碟,則當您建立AMI或啟動執行個體時,不會指定其他磁碟區。

    以下是範例,顯示當您啟動具有m3.medium執行個體存放磁碟區 (磁碟區 2) 和其他EBS磁碟區 (磁碟區 1) 的執行個體時可用的磁碟。

    磁碟管理,具有根磁碟區、一個執行個體存放區磁碟區和一個EBS磁碟區。
  4. 在以灰色窗格標示的磁碟 1 上,按一下滑鼠右鍵,然後選取 Properties (屬性)。記下 Location (位置) 的值,然後在將非NVMe磁碟對應至磁碟區的表格中查閱。例如,下列磁碟的位置匯流排編號為 0、目標 ID 為 9、LUN0。根據EBS磁碟區的資料表,此位置的裝置名稱為 xvdj

    EBS 磁碟區的位置。
PowerShell

下列 PowerShell 指令碼會列出每個磁碟及其對應的裝置名稱和磁碟區。

要求與限制
  • 需要 Windows Server 2012 或更新版本。

  • 需要憑證才能取得EBS磁碟區 ID。您可以使用適用於 的工具來設定設定檔 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 驅動程式如何將非NVMe執行個體存放磁碟區映射至 Windows 磁碟區。可用執行個體存放磁碟區的數量,會取決於執行個體的類型。如需詳細資訊,請參閱 執行個體的EC2執行個體存放區磁碟區限制

位置 裝置名稱

匯流排編號 0、目標 ID 78、LUN0

xvdca

匯流排編號 0、目標 ID 79、LUN0

xvdcb

匯流排編號 0、目標 ID 80、LUN0

xvdcc

匯流排編號 0、目標 ID 81、LUN0

xvdcd

匯流排編號 0、目標 ID 82、LUN0

xvdce

匯流排編號 0、目標 ID 83、LUN0

xvdcf

匯流排編號 0、目標 ID 84、LUN0

xvdcg

匯流排編號 0、目標 ID 85、LUN0

xvdch

匯流排編號 0、目標 ID 86、LUN0

xvdci

匯流排編號 0、目標 ID 87、LUN0

xvdcj

匯流排編號 0、目標 ID 88、LUN0

xvdck

匯流排編號 0、目標 ID 89、LUN0

xvdcl

EBS 磁碟區

下表說明 Citrix PV 和 AWS PV 驅動程式如何將非NVMEEBS磁碟區映射至 Windows 磁碟區。

位置 裝置名稱

匯流排編號 0、目標 ID 0、LUN0

/dev/sda1

匯流排編號 0、目標 ID 1、LUN0

xvdb

匯流排編號 0、目標 ID 2、LUN0

xvdc

匯流排編號 0、目標 ID 3、LUN0

xvdd

匯流排編號 0、目標 ID 4、LUN0

xvde

匯流排編號 0、目標 ID 5、LUN0

xvdf

匯流排編號 0、目標 ID 6、LUN0

xvdg

匯流排編號 0、目標 ID 7、LUN0

xvdh

匯流排編號 0、目標 ID 8、LUN0

xvdi

匯流排編號 0、目標 ID 9、LUN0

xvdj

匯流排編號 0、目標 ID 10、LUN0

xvdk

匯流排編號 0、目標 ID 11、LUN0

xvdl

匯流排編號 0、目標 ID 12、LUN0

xvdm

匯流排編號 0、目標 ID 13、LUN0

xvdn

匯流排編號 0、目標 ID 14、LUN0

xvdo

匯流排編號 0、目標 ID 15、LUN0

xvdp

匯流排編號 0、目標 ID 16、LUN0

xvdq

匯流排編號 0、目標 ID 17、LUN0

xvdr

匯流排編號 0、目標 ID 18、LUN0

xvds

匯流排編號 0、目標 ID 19、LUN0

xvdt

匯流排編號 0、目標 ID 20、LUN0

xvdu

匯流排編號 0、目標 ID 21、LUN0

xvdv

匯流排編號 0、目標 ID 22、LUN0

xvdw

匯流排編號 0、目標 ID 23、LUN0

xvdx

匯流排編號 0、目標 ID 24、LUN0

xvdy

匯流排編號 0、目標 ID 25、LUN0

xvdz