

# Mapear discos não NVMe em uma instância Amazon EC2 Windows para volumes
<a name="windows-list-disks"></a>

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 obter mais informações, consulte [Atualizar drivers PV em instâncias do Windows do EC2](Upgrading_PV_drivers.md).

**Topics**
+ [Listar discos não NVMe](#windows-disks)
+ [Mapear discos não NVMe para volumes](#windows-volume-mapping)

## Listar discos não NVMe
<a name="windows-disks"></a>

É 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 à instância do Windows no usando RDP](connecting_to_windows_instance.md).

1. 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**.

1. 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.](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/images/disk_management.png)

1. 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](#windows-volume-mapping). 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.](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/images/disk_1_location.png)

------
#### [ 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
<a name="windows-volume-mapping"></a>

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

**Topics**
+ [Volumes de armazenamento de instâncias](#instance-store-volume-map)
+ [Volumes do EBS](#ebs-volume-map)

### Volumes de armazenamento de instâncias
<a name="instance-store-volume-map"></a>

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](instance-store-volumes.md).


| 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 name="ebs-volume-map"></a>

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 | 