Asignar discos a volúmenes en instancia de Windows
La instancia de Windows incluye un volumen de EBS que sirve como volumen raíz. Si la instancia de Windows utiliza controladores PV o Citrix PV de AWS, puede agregar opcionalmente hasta 25 volúmenes, con lo que se obtiene un total de 26 volúmenes. Para obtener más información, consulte Límites de volumen de instancias.
Según el tipo de instancia, tendrá de 0 a 24 volúmenes de almacén de instancias posibles disponibles para la instancia. Para utilizar cualquiera de los volúmenes de almacén de instancias disponibles para su instancia, debe especificarlos al crear su AMI o al lanzar la instancia. También puede añadir volúmenes de EBS al crear la AMI o al lanzar la instancia, o adjuntarlos mientras la instancia se está ejecutando.
Al añadir un volumen a la instancia, escriba el nombre del dispositivo que utiliza Amazon EC2. Para obtener más información, consulte Nombres de dispositivos en instancias de Windows. AWS Las Amazon Machine Images (AMI) de Windows contienen una serie de controladores utilizados por Amazon EC2 para asignar el almacén de instancias y los volúmenes de EBS a los discos y las letras de unidad de Windows. Si lanza una instancia desde una AMI de Windows que utiliza controladores 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. Si 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.
Listar volúmenes NVMe
Puede encontrar los discos de la instancia de Windows que utilizan Disk Management o PowerShell.
Listar discos NVMe utilizando Disk Management
Puede encontrar los discos de la instancia de Windows que utilizan Disk Management de Windows.
Para encontrar los discos en su instancia de Windows
-
Inicie sesión en la instancia de Windows mediante el Escritorio remoto. Para obtener más información, consulte Conexión con la instancia de Windows de .
-
Inicie la utilidad de Administración de discos.
-
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 lanzar la instancia.A continuación se muestra un ejemplo que muestra los discos que están disponibles si inicias una
r5d.4xlarge
instancia con dos volúmenes de EBS adicionales.
Listar discos NVMe utilizando PowerShell
El siguiente script de PowerShell enumera cada disco y el nombre y volumen de su dispositivo correspondiente. Está diseñado para su uso con instancias compiladas en el Sistema Nitro, que utilizan NVMe EBS y volúmenes de almacén de instancias.
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 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
Ejecuta el script de la siguiente manera:
PS C:\>
.\mapping.ps1
A continuación se muestra un ejemplo de salida para una instancia con un volumen raíz, dos volúmenes EBS y dos volúmenes de almacén de instancias.
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
Si no configuró sus credenciales para Herramientas de Windows PowerShell en la instancia de Windows, el script no puede obtener el ID del volumen de EBS y utilizará N/A en la columna EbsVolumeId
.
Asignar volúmenes EBS de NVMe
Con las instancias integradas en Nitro System, los volúmenes de EBS se exponen como dispositivos NVMe. Utilice el comando Get-Disk
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
También puede ejecutar el comando ebsnvme-id para asignar números de disco NVMe a identificadores de volumen de EBS y nombres 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
Listar volúmenes
Puede encontrar los discos de la instancia de Windows que utilizan Disk Management o PowerShell.
Listar discos utilizando Disk Management
Puede encontrar los discos de la instancia de Windows que utilizan Disk Management de Windows.
Para encontrar los discos en su instancia de Windows
-
Inicie sesión en la instancia de Windows mediante el Escritorio remoto. Para obtener más información, consulte Conexión con la instancia de Windows de .
-
Inicie la utilidad de Administración de discos.
En Windows Server 2012 y versiones posteriores, 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. En Windows Server 2008, elija Inicio, Herramientas administrativas, Administración de equipos, Administración de discos.
-
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 lanzar la instancia.A continuación se indica un ejemplo que muestra los discos disponibles si lanza una instancia
m3.medium
con un volumen de almacén de instancias (disco 2) y un volumen de EBS adicional (disco 1). -
Haga clic con el botón derecho en el panel gris con la etiqueta Disco 1 y, a continuación, seleccione Properties (Propiedades). Anote el valor de Location (Ubicación) y búsquelo en las tablas en Asignar dispositivos de disco a nombres de dispositivos. 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
.
Asignar dispositivos de disco a nombres de dispositivos
El controlador del dispositivo de bloques de la instancia asigna los nombres reales de los volúmenes cuando se montan.
Volúmenes de almacén de instancias
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 Volúmenes de almacén de instancias.
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
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 |
Listar discos utilizando 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
.