Mapear discos NVMe em uma instância Amazon EC2 Windows para volumes
Com instâncias baseadas em Nitro, os volumes do EBS são expostos como dispositivos NVMe. Este tópico explica como visualizar os discos NVMe que estão disponíveis para o sistema operacional Windows na sua instância. Também mostra como mapear esses discos NVMe para os volumes subjacentes do Amazon EBS e os nomes de dispositivos especificados para os mapeamentos de dispositivos de blocos usados pelo Amazon EC2.
Listar discos NVMe
É possível encontrar os discos na instância do Windows usando Gerenciamento de disco ou Powershell.
- Disk Management
-
Para localizar os discos em sua instância do Windows
-
Execute a sessão da sua instância do Windows usando o Desktop Remoto. Para obter mais informações, consulte Conectar-se à sua instância baseada no Windows usando RDP.
-
Inicie o utilitário de Gerenciamento de Disco.
-
Revise os discos. O volume raiz é um volume do EBS montado como C:\
. Se não houver nenhum outro disco mostrado, você não especificou volumes adicionais quando criou a AMI ou executou a instância.
Veja a seguir um exemplo que mostra os discos disponíveis se você executar uma instância r5d.4xlarge
com dois volumes adicionais do EBS.
- PowerShell
-
O script do PowerShell a seguir lista cada disco e seu nome de dispositivo e volume correspondentes. Destina-se ao uso com instâncias baseadas em Nitro, que usam volumes de armazenamento de instância e do EBS de NVMe.
Conecte-se à sua instância do Windows e execute o seguinte comando para habilitar a execução de script do PowerShell.
Set-ExecutionPolicy RemoteSigned
Copie o script a seguir e salve-o como mapping.ps1
na instância do Windows.
# 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
Execute o script da seguinte forma:
PS C:\>
.\mapping.ps1
Veja a seguir um exemplo de saída para uma instância com um volume raiz, dois volumes do EBS e dois volumes de armazenamento de instâncias.
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
Se você não tiver fornecido suas credenciais do Tools for Windows PowerShell na instância do Windows, o script não poderá obter o ID de volume do EBS e usará N/A na coluna EbsVolumeId
.
Mapear discos NVMe para volumes
É possível usar o comando Get-Disk para mapear os números de disco do Windows para IDs de volume do EBS.
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
Também é possível executar o comando ebsnvme-id para mapear números de disco do NVMe para IDs de volume do EBS e nomes de dispositivos.
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