

# Asignación de discos que no son NVMe de una instancia de Amazon EC2 de Windows a volúmenes
<a name="windows-list-disks"></a>

Si inicializa una instancia desde una AMI de Windows que utiliza controladores de PV o Citrix PV de AWS, puede utilizar las relaciones descritas en esta página para asignar los discos de Windows al almacén de instancias y los volúmenes de EBS. En este tema se explica cómo ver los **discos que no son NVME** y que están disponibles para el sistema operativo Windows en la instancia. También muestra cómo asignar esos discos que no son NVMe a los volúmenes subyacentes de Amazon EBS y los nombres de dispositivo especificados para las asignaciones de dispositivos de bloques utilizadas por Amazon EC2.

**nota**  
Si inicializa una instancia y la AMI de Windows utiliza controladores Red Hat PV, puede actualizar la instancia para utilizar los controladores Citrix. Para obtener más información, consulte [Actualizar controladores PV en instancias de Windows de EC2](Upgrading_PV_drivers.md).

**Topics**
+ [Enumeración de discos que no son NVMe](#windows-disks)
+ [Asignación de discos que no son NVMe a volúmenes](#windows-volume-mapping)

## Enumeración de discos que no son NVMe
<a name="windows-disks"></a>

Puede encontrar los discos de la instancia de Windows que utilizan la Administración de discos o PowerShell.

------
#### [ Disk Management ]

**Para encontrar los discos en su instancia de Windows**

1. Inicie sesión en la instancia de Windows mediante el Escritorio remoto. Para obtener más información, consulte [Conexión a una instancia de Windows de mediante RDP](connecting_to_windows_instance.md).

1. Inicie la utilidad de Administración de discos.

   En la barra de tareas, haga clic con el botón derecho en el logotipo de Windows y, a continuación, elija **Administración de discos**.

1. Revise los discos. El volumen raíz es un volumen de EBS montado como `C:\`. Si no se muestran otros discos, no ha especificado volúmenes adicionales al crear la AMI o al iniciar la instancia.

   A continuación se indica un ejemplo que muestra los discos disponibles si inicia una instancia `m3.medium` con un volumen de almacén de instancias (disco 2) y un volumen de EBS adicional (disco 1).  
![Administración de discos con un volumen raíz, un volumen de almacén de instancia y un volumen de EBS.](http://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/images/disk_management.png)

1. Haga clic con el botón derecho en el panel gris con la etiqueta Disco 1 y, a continuación, seleccione **Propiedades**. Anote el valor de **Ubicación** y búsquelo en las tablas en [Asignación de discos que no son NVMe a volúmenes](#windows-volume-mapping). Por ejemplo, el siguiente disco tiene la ubicación Bus Number 0, Target Id 9, LUN 0. Según la tabla de volúmenes de EBS, el nombre de dispositivo de esta ubicación es `xvdj`.  
![La ubicación de un volumen de EBS.](http://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/images/disk_1_location.png)

------
#### [ PowerShell ]

El siguiente script de PowerShell enumera cada disco y el nombre y volumen de su dispositivo correspondiente.

**Requisitos y limitaciones**
+ Requiere Windows Server 2012 o posterior.
+ Requiere credenciales para obtener el ID de volumen de EBS. Puede configurar un perfil utilizando Tools for PowerShell o adjuntar una función de IAM a la instancia.
+ No admite volúmenes NVMe.
+ No admite discos dinámicos.

Conéctate a la instancia de Windows y ejecuta el siguiente comando para habilitar la ejecución de scripts de PowerShell.

```
Set-ExecutionPolicy RemoteSigned
```

Copia el siguiente script y guárdalo como `mapping.ps1` en la instancia de 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
```

Ejecuta el script de la siguiente manera:

```
PS C:\> .\mapping.ps1
```

A continuación, se muestra un ejemplo del resultado.

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

Si no proporcionaste tus credenciales en la instancia de Windows, el script no puede obtener el ID del volumen de EBS y utilizará N/A en la columna `EbsVolumeId`.

------

## Asignación de discos que no son NVMe a volúmenes
<a name="windows-volume-mapping"></a>

El controlador del dispositivo de bloques de la instancia asigna los nombres reales de los volúmenes cuando se montan.

**Topics**
+ [Volúmenes de almacén de instancias](#instance-store-volume-map)
+ [Volúmenes de EBS](#ebs-volume-map)

### Volúmenes de almacén de instancias
<a name="instance-store-volume-map"></a>

La siguiente tabla describe cómo los controladores Citrix PV y PV de AWS asignan volúmenes de almacén de instancias de memoria rápida no volátil de baja latencia (NVMe) a volúmenes de Windows. El número de volúmenes de almacén de instancias disponibles se determina por el tipo de instancia. Para obtener más información, consulte [Límites de volumen del almacén de instancias para las instancias de EC2](instance-store-volumes.md).


| Ubicación | Nombre del dispositivo | 
| --- | --- | 
| Bus Number 0, Target ID 78, LUN 0 | xvdca | 
| Bus Number 0, Target ID 79, LUN 0 | xvdcb | 
| Bus Number 0, Target ID 80, LUN 0 | xvdcc | 
| Bus Number 0, Target ID 81, LUN 0 | xvdcd | 
| Bus Number 0, Target ID 82, LUN 0 | xvdce | 
| Bus Number 0, Target ID 83, LUN 0 | xvdcf | 
| Bus Number 0, Target ID 84, LUN 0 | xvdcg | 
| Bus Number 0, Target ID 85, LUN 0 | xvdch | 
| Bus Number 0, Target ID 86, LUN 0 | xvdci | 
| Bus Number 0, Target ID 87, LUN 0 | xvdcj | 
| Bus Number 0, Target ID 88, LUN 0 | xvdck | 
| Bus Number 0, Target ID 89, LUN 0 | xvdcl | 

### Volúmenes de EBS
<a name="ebs-volume-map"></a>

La siguiente tabla describe cómo los controladores Citrix PV y PV de AWS asignan volúmenes de EBS que no son NVMe a volúmenes de Windows.


| Ubicación | Nombre del dispositivo | 
| --- | --- | 
| Bus Number 0, Target ID 0, LUN 0 | /dev/sda1 | 
| Bus Number 0, Target ID 1, LUN 0 | xvdb | 
| Bus Number 0, Target ID 2, LUN 0 | xvdc | 
| Bus Number 0, Target ID 3, LUN 0 | xvdd | 
| Bus Number 0, Target ID 4, LUN 0 | xvde | 
| Bus Number 0, Target ID 5, LUN 0 | xvdf | 
| Bus Number 0, Target ID 6, LUN 0 | xvdg | 
| Bus Number 0, Target ID 7, LUN 0 | xvdh | 
| Bus Number 0, Target ID 8, LUN 0 | xvdi | 
| Bus Number 0, Target ID 9, LUN 0 | xvdj | 
| Bus Number 0, Target ID 10, LUN 0 | xvdk | 
| Bus Number 0, Target ID 11, LUN 0 | xvdl | 
| Bus Number 0, Target ID 12, LUN 0 | xvdm | 
| Bus Number 0, Target ID 13, LUN 0 | xvdn | 
| Bus Number 0, Target ID 14, LUN 0 | xvdo | 
| Bus Number 0, Target ID 15, LUN 0 | xvdp | 
| Bus Number 0, Target ID 16, LUN 0 | xvdq | 
| Bus Number 0, Target ID 17, LUN 0 | xvdr | 
| Bus Number 0, Target ID 18, LUN 0 | xvds | 
| Bus Number 0, Target ID 19, LUN 0 | xvdt | 
| Bus Number 0, Target ID 20, LUN 0 | xvdu | 
| Bus Number 0, Target ID 21, LUN 0 | xvdv | 
| Bus Number 0, Target ID 22, LUN 0 | xvdw | 
| Bus Number 0, Target ID 23, LUN 0 | xvdx | 
| Bus Number 0, Target ID 24, LUN 0 | xvdy | 
| Bus Number 0, Target ID 25, LUN 0 | xvdz | 