将 Amazon EC2 Windows 实例上的 NVMe 磁盘映射到卷
对于基于 Nitro 的实例,EBS 卷显示为 NVMe 设备。本主题介绍如何查看您的实例上可用于 Windows 操作系统的 NVMe 磁盘。它还展示了如何将这些 NVMe 磁盘映射到底层 Amazon EBS 卷以及为 Amazon EC2 使用的块设备映射指定的设备名称。
列出 NVMe 磁盘
您可以使用磁盘管理工具或 Powershell,在您的 Windows 实例上查找磁盘。
- Disk Management
-
查找 Windows 实例上的磁盘
-
使用远程桌面登录 Windows 实例。有关更多信息,请参阅使用 RDP 连接到 Windows 实例。
-
启动磁盘管理实用工具。
-
检查磁盘。根卷是一个装载为 C:\
的 EBS 卷。如果未显示其他磁盘,表示您在创建 AMI 或启动实例时没有指定其他卷。
下面的示例介绍了在您启动一个包含两个其他 EBS 卷的 r5d.4xlarge
实例时可用的磁盘。
- PowerShell
-
以下 PowerShell 脚本列出每个磁盘以及相应的设备名称和卷。旨在与基于 Nitro 的实例结合使用,此类实例使用 NVMe EBS 和实例存储卷。
连接到 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
以下是具有一个根卷、两个 EBS 卷和两个实例存储卷的实例的输出示例。
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 磁盘映射到卷
您可以使用 Get-Disk 命令将 Windows 磁盘编号映射到 EBS 卷 ID。
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