Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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

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

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

将卷添加到实例时,您可以指定 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,然后选择您的实例。在 Description (描述) 上的 Block devices (块储存设备) 下,单击设备名称,然后查找 EBS ID。在本例中,卷 ID 为 vol-0a07f3e37b14708b9

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

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

    从控制台访问卷 ID 的另一个方法是选择导航窗格中的 Elastic Block Store 下的 Volumes (卷)。卷将按实例名称和卷大小列出。查看或选择 Attachment Information (连接信息) 以验证该卷挂载到的实例。

使用 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 和 M5 实例,EBS 卷显示为 NVMe 设备。您可以使用 Get-Disk 命令将 Windows 磁盘编号映射到 EBS 卷 ID。有关更多信息,请参阅 识别 EBS 设备