Mapear discos não NVMe em uma instância Amazon EC2 Windows para volumes - Amazon Elastic Compute Cloud

Mapear discos não NVMe em uma instância Amazon EC2 Windows para volumes

Para instâncias executadas com uma AMI do Windows que use drivers AWS PV ou Citrix PV, será possível usar as relações descritas nesta página para mapear os discos do Windows ao seu armazenamento de instâncias e volumes do EBS. Este tópico explica como visualizar os discos não NVMe que estão disponíveis para o sistema operacional Windows na sua instância. Também mostra como mapear esses discos não 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.

nota

Se você executar uma instância Se sua AMI da Windows usar drivers Red Hat PV, é possível atualizar sua instância para usar os drivers Citrix. Para ter mais informações, consulte Atualizar drivers PV em instâncias do Windows do EC2.

Listar discos não NVMe

É possível encontrar os discos na instância do Windows usando o Gerenciamento de disco ou o Powershell.

Disk Management
Para localizar os discos em sua instância do Windows
  1. 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.

  2. Inicie o utilitário de Gerenciamento de Disco.

    Na barra de tarefas, clique com o botão direito do mouse no logotipo do Windows e escolha Gerenciamento de disco.

  3. 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 que estão disponíveis se você executar uma instância m3.medium com um volume de armazenamento de instâncias (disco 2) e um volume do EBS adicional (disco 1).

    Gerenciamento do disco com um volume raiz, um volume de armazenamento de instâncias e um volume do EBS.
  4. Clique com o botão direito no painel cinza identificado como Disco 1 e selecione Properties (Propriedades). Observe o valor de Location (Local) e procure-o nas tabelas em Mapear discos não NVMe para volumes. Por exemplo, o seguinte disco tem o Número de barramento de local 0, ID de destino 9, LUN 0. De acordo com a tabela de volumes do EBS, o nome do dispositivo para esse local é xvdj.

    A localização de um volume do EBS.
PowerShell

O script do PowerShell a seguir lista cada disco e seu nome de dispositivo e volume correspondentes.

Requisitos e limitações
  • Requer o Windows Server 2012 ou posterior.

  • Requer credenciais para obter o ID de volume do EBS. É possível configurar um perfil usando o Tools for PowerShell, ou anexar uma função do IAM à instância.

  • Não suporta volumes NVMe.

  • Não suporta discos dinâmicos.

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 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

Execute o script da seguinte forma:

PS C:\> .\mapping.ps1

A seguir está um exemplo de saída.

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

Se você não tiver fornecido suas credenciais 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 não NVMe para volumes

O driver de dispositivo de blocos da instância distribui os nomes de volume reais ao montar volumes.

Volumes de armazenamento de instâncias

A tabela a seguir descreve como os drivers Citrix PV e AWS PV mapeiam volumes de armazenamento de instâncias não NVMe a volumes do Windows. O número de volumes de armazenamento de instâncias disponíveis é determinado pelo tipo de instância. Para obter mais informações, consulte Limites de volume de armazenamento de instância para instâncias do EC2.

Local Nome do dispositivo

Barramento número 0, ID de destino 78, LUN 0

xvdca

Barramento número 0, ID de destino 79, LUN 0

xvdcb

Barramento número 0, ID de destino 80, LUN 0

xvdcc

Barramento número 0, ID de destino 81, LUN 0

xvdcd

Barramento número 0, ID de destino 82, LUN 0

xvdce

Barramento número 0, ID de destino 83, LUN 0

xvdcf

Barramento número 0, ID de destino 84, LUN 0

xvdcg

Barramento número 0, ID de destino 85, LUN 0

xvdch

Barramento número 0, ID de destino 86, LUN 0

xvdci

Barramento número 0, ID de destino 87, LUN 0

xvdcj

Barramento número 0, ID de destino 88, LUN 0

xvdck

Barramento número 0, ID de destino 89, LUN 0

xvdcl

Volumes do EBS

A tabela a seguir descreve como os drivers Citrix PV e AWS PV mapeiam volumes do EBS não NVME a volumes do Windows.

Local Nome do dispositivo

Barramento número 0, ID de destino 0, LUN 0

/dev/sda1

Barramento número 0, ID de destino 1, LUN 0

xvdb

Barramento número 0, ID de destino 2, LUN 0

xvdc

Barramento número 0, ID de destino 3, LUN 0

xvdd

Barramento número 0, ID de destino 4, LUN 0

xvde

Barramento número 0, ID de destino 5, LUN 0

xvdf

Barramento número 0, ID de destino 6, LUN 0

xvdg

Barramento número 0, ID de destino 7, LUN 0

xvdh

Barramento número 0, ID de destino 8, LUN 0

xvdi

Barramento número 0, ID de destino 9, LUN 0

xvdj

Barramento número 0, ID de destino 10, LUN 0

xvdk

Barramento número 0, ID de destino 11, LUN 0

xvdl

Barramento número 0, ID de destino 12, LUN 0

xvdm

Barramento número 0, ID de destino 13, LUN 0

xvdn

Barramento número 0, ID de destino 14, LUN 0

xvdo

Barramento número 0, ID de destino 15, LUN 0

xvdp

Barramento número 0, ID de destino 16, LUN 0

xvdq

Barramento número 0, ID de destino 17, LUN 0

xvdr

Barramento número 0, ID de destino 18, LUN 0

xvds

Barramento número 0, ID de destino 19, LUN 0

xvdt

Barramento número 0, ID de destino 20, LUN 0

xvdu

Barramento número 0, ID de destino 21, LUN 0

xvdv

Barramento número 0, ID de destino 22, LUN 0

xvdw

Barramento número 0, ID de destino 23, LUN 0

xvdx

Barramento número 0, ID de destino 24, LUN 0

xvdy

Barramento número 0, ID de destino 25, LUN 0

xvdz