Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

将磁盘映射到 Windows 实例上的卷

您的 Windows 实例附带一个作为根卷的 EBS 卷。如果您的 Windows 实例使用 AWS 半虚拟化或 Citrix 半虚拟化驱动程序,您可以选择最多添加 25 个卷,最终一共连接 26 个卷。有关更多信息,请参阅 实例卷限制

根据您的实例的实例类型,您将有 0 到 24 个可能的实例存储卷可用于实例。要使用可用于您的实例的任何实例存储卷,您必须在创建 AMI 或启动实例时指定这些卷。您还可以在创建 AMI 或启动实例时添加 EBS 卷,或在您的实例正在运行时连接这些卷。有关使卷可用的信息,请参阅使卷可在 Windows 上使用

将卷添加到实例时,您可以指定 Amazon EC2 使用的设备名称。有关更多信息,请参阅 Windows 实例上的设备命名。AWS Windows Amazon 系统映像 (AMI) 包含 Amazon EC2 所使用的一系列驱动程序,用于将实例存储和 EBS 卷映射到 Windows 磁盘和驱动器盘符。如果从使用 AWS PV 或 Citrix PV 驱动程序的 Windows AMI 启动实例,则可以使用本页介绍的关系,将 Windows 磁盘映射到实例存储和 EBS 卷。如果您的 Windows AMI 使用 Red Hat PV 驱动程序,那么您可以更新您的实例以使用 Citrix 驱动程序。有关更多信息,请参阅 在 Windows 实例上升级半虚拟化驱动程序

列出使用 Windows 磁盘管理的磁盘

您可以使用 Windows 磁盘管理工具,在您的 Windows 实例上查找磁盘。

查找 Windows 实例上的磁盘

  1. 使用远程桌面登录 Windows 实例。有关更多信息,请参阅连接到您的 Windows 实例

  2. 启动磁盘管理实用工具。

    在 Windows Server 2012 或 Windows Server 2016 中,在任务栏上右键单击 Windows 徽标,然后选择 Disk Management。在 Windows Server 2008 中,依次选择 StartAdministrative ToolsComputer ManagementDisk Management

  3. 检查磁盘。根卷是一个安装为 C:\ 的 EBS 卷。如果未显示其他磁盘,表示您在创建 AMI 或启动实例时没有指定其他卷。

    下面的示例介绍了在您启动一个包含实例存储卷 (磁盘 2) 和其他 EBS 卷 (磁盘 1) 的 m3.medium 实例时可用的磁盘。

     对一个根卷、一个实例存储卷和一个 EBS 卷的磁盘管理。
  4. 右键单击标记为“Disk 1 (磁盘 1)”的灰色窗格,然后选择 Properties (属性)。记下 Location (位置) 值,并在磁盘设备到设备名称的映射中的表中查找该值。例如,以下磁盘的位置值为 Bus Number 0, Target Id 9, LUN 0 (总线编号 0,目标 ID 9,LUN 0)。根据 EBS 卷的表,此位置的设备名称为 xvdj

     EBS 卷的位置。
  5. 要将 EBS 卷的设备名称映射到其卷 ID,请在计算机上打开 Amazon EC2 控制台。在“Navigation (导航)”窗格中,单击 Instances,然后选择您的实例。在 Block devices (块储存设备) 下,单击设备名称,然后查找 EBS ID。在本例中,卷 ID 为 vol-0a07f3e37b14708b9

     在 Amazon EC2 控制台中显示块储存设备映射。

    请注意,Amazon EC2 控制台只显示 EBS 卷。

使用 Windows PowerShell 列出磁盘

以下 PowerShell 脚本列出每个磁盘以及相应的设备名称和卷。

# List the Windows disks function Get-EC2InstanceMetadata { param([string]$Path) (Invoke-WebRequest -Uri "http://169.254.169.254/latest/$Path").Content } function Convert-SCSITargetIdToDeviceName { param([int]$SCSITargetId) If ($SCSITargetId -eq 0) { return "/dev/sda1" } $deviceName = "xvd" If ($SCSITargetId -gt 25) { $deviceName += [char](0x60 + [int]($SCSITargetId / 26)) } $deviceName += [char](0x61 + $SCSITargetId % 26) return $deviceName } Try { $InstanceId = Get-EC2InstanceMetadata "meta-data/instance-id" $AZ = Get-EC2InstanceMetadata "meta-data/placement/availability-zone" $Region = $AZ.Remove($AZ.Length - 1) $BlockDeviceMappings = (Get-EC2Instance -Region $Region -Instance $InstanceId).Instances.BlockDeviceMappings $VirtualDeviceMap = @{} (Get-EC2InstanceMetadata "meta-data/block-device-mapping").Split("`n") | ForEach-Object { $VirtualDevice = $_ $BlockDeviceName = Get-EC2InstanceMetadata "meta-data/block-device-mapping/$VirtualDevice" $VirtualDeviceMap[$BlockDeviceName] = $VirtualDevice $VirtualDeviceMap[$VirtualDevice] = $BlockDeviceName } } Catch { Write-Host "Could not access the AWS API, therefore, VolumeId is not available. Verify that you provided your access keys." -ForegroundColor Yellow } Get-WmiObject -Class Win32_DiskDrive | ForEach-Object { $DiskDrive = $_ $Volumes = Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='$($DiskDrive.DeviceID)'} WHERE AssocClass=Win32_DiskDriveToDiskPartition" | ForEach-Object { $DiskPartition = $_ Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='$($DiskPartition.DeviceID)'} WHERE AssocClass=Win32_LogicalDiskToPartition" } If ($DiskDrive.PNPDeviceID -like "*PROD_PVDISK*") { $BlockDeviceName = Convert-SCSITargetIdToDeviceName($DiskDrive.SCSITargetId) $BlockDevice = $BlockDeviceMappings | Where-Object { $_.DeviceName -eq $BlockDeviceName } $VirtualDevice = If ($VirtualDeviceMap.ContainsKey($BlockDeviceName)) { $VirtualDeviceMap[$BlockDeviceName] } Else { $null } } ElseIf ($DiskDrive.PNPDeviceID -like "*PROD_AMAZON_EC2_NVME*") { $BlockDeviceName = Get-EC2InstanceMetadata "meta-data/block-device-mapping/ephemeral$($DiskDrive.SCSIPort - 2)" $BlockDevice = $null $VirtualDevice = If ($VirtualDeviceMap.ContainsKey($BlockDeviceName)) { $VirtualDeviceMap[$BlockDeviceName] } Else { $null } } Else { $BlockDeviceName = $null $BlockDevice = $null $VirtualDevice = $null } New-Object PSObject -Property @{ Disk = $DiskDrive.Index; Partitions = $DiskDrive.Partitions; DriveLetter = If ($Volumes -eq $null) { "N/A" } Else { $Volumes.DeviceID }; EbsVolumeId = If ($BlockDevice -eq $null) { "N/A" } Else { $BlockDevice.Ebs.VolumeId }; Device = If ($BlockDeviceName -eq $null) { "N/A" } Else { $BlockDeviceName }; VirtualDevice = If ($VirtualDevice -eq $null) { "N/A" } Else { $VirtualDevice }; VolumeName = If ($Volumes -eq $null) { "N/A" } Else { $Volumes.VolumeName }; } } | Sort-Object Disk | Format-Table -AutoSize -Property Disk, Partitions, DriveLetter, EbsVolumeId, Device, VirtualDevice, VolumeName

注意

此脚本需要在适用于 PS 的 AWS 工具中配置的配置文件或附加到实例的 IAM 角色。

在您运行此脚本前,请确保运行以下命令以支持 PowerShell 脚本的执行。

Set-ExecutionPolicy RemoteSigned

复制脚本并将其作为 .ps1 文件存储在 Windows 实例上。如果您运行脚本而不设置访问密钥,您将看到类似如下的输出。

Disk Partitions DriveLetter EbsVolumeId Device VirtualDevice VolumeName ---- ---------- ----------- ----------- ------ ------------- ---------- 0 0 N/A N/A xvdca ephemeral0 N/A 1 0 N/A N/A xvdcb ephemeral1 N/A 2 1 C: vol-0064aexamplec838a /dev/sda1 root Windows 3 0 N/A vol-02256example8a4a3 xvdf ebs2 N/A

如果您指定 IAM 角色时使用的是允许启动实例时访问 Amazon EC2 的策略,或者您按照 适用于 Windows PowerShell 的 AWS 工具 用户指南 中的使用 AWS 凭证所述,在 Windows 实例上设置您的凭证,则您将在 VolumeId 列而不是 NA 中获得 EBS 卷的卷 ID。

磁盘设备到设备名称的映射

在装载卷时,实例的块储存设备驱动程序将分配实际卷名称。

实例存储卷

下表描述了 Citrix PV 和 AWS PV 驱动程序是如何将非 NVMe 实例存储卷映射到 Windows 卷的。可用的实例存储卷数量由实例类型决定。有关更多信息,请参阅 实例存储卷

地点 设备名称

总线编号 0,目标 ID 78,LUN 0

xvdca

总线编号 0,目标 ID 79,LUN 0

xvdcb

总线编号 0,目标 ID 80,LUN 0

xvdcc

总线编号 0,目标 ID 81,LUN 0

xvdcd

总线编号 0,目标 ID 82,LUN 0

xvdce

总线编号 0,目标 ID 83,LUN 0

xvdcf

总线编号 0,目标 ID 84,LUN 0

xvdcg

总线编号 0,目标 ID 85,LUN 0

xvdch

总线编号 0,目标 ID 86,LUN 0

xvdci

总线编号 0,目标 ID 87,LUN 0

xvdcj

总线编号 0,目标 ID 88,LUN 0

xvdck

总线编号 0,目标 ID 89,LUN 0

xvdcl

EBS 卷

下表描述了 Citrix 半虚拟化和 AWS 半虚拟化驱动程序是如何将非 NVME EBS 卷映射到 Windows 卷的。

地点 设备名称

总线编号 0,目标 ID 0,LUN 0

/dev/sda1

总线编号 0,目标 ID 1,LUN 0

xvdb

总线编号 0,目标 ID 2,LUN 0

xvdc

总线编号 0,目标 ID 3,LUN 0

xvdd

总线编号 0,目标 ID 4,LUN 0

xvde

总线编号 0,目标 ID 5,LUN 0

xvdf

总线编号 0,目标 ID 6,LUN 0

xvdg

总线编号 0,目标 ID 7,LUN 0

xvdh

总线编号 0,目标 ID 8,LUN 0

xvdi

总线编号 0,目标 ID 9,LUN 0

xvdj

总线编号 0,目标 ID 10,LUN 0

xvdk

总线编号 0,目标 ID 11,LUN 0

xvdl

总线编号 0,目标 ID 12,LUN 0

xvdm

总线编号 0,目标 ID 13,LUN 0

xvdn

总线编号 0,目标 ID 14,LUN 0

xvdo

总线编号 0,目标 ID 15,LUN 0

xvdp

总线编号 0,目标 ID 16,LUN 0

xvdq

总线编号 0,目标 ID 17,LUN 0

xvdr

总线编号 0,目标 ID 18,LUN 0

xvds

总线编号 0,目标 ID 19,LUN 0

xvdt

总线编号 0,目标 ID 20,LUN 0

xvdu

总线编号 0,目标 ID 21,LUN 0

xvdv

总线编号 0,目标 ID 22,LUN 0

xvdw

总线编号 0,目标 ID 23,LUN 0

xvdx

总线编号 0,目标 ID 24,LUN 0

xvdy

总线编号 0,目标 ID 25,LUN 0

xvdz

NVMe EBS 卷

对于 C5 实例,EBS 卷显示为 NVMe 设备。您可以使用 Get-Disk 命令将 Windows 磁盘编号映射到 EBS 卷 ID。

PS C:\> Get-Disk |select Number,AdapterSerialNumber |Sort-Object Number Number AdapterSerialNumber ------ ------------------- 0 vol0064aexamplec838a 1 vol02256example8a4a3 2 vol0e4ceexample8bd5c 3 vol07063examplefb2cb 4 vol030edexample8a888