볼륨에 Amazon EC2 Windows 인스턴스의 비 NVMe 디스크 매핑 - Amazon Elastic Compute Cloud

볼륨에 Amazon EC2 Windows 인스턴스의 비 NVMe 디스크 매핑

AWS PV 또는 Citrix PV 드라이버를 사용하는 Windows AMI에서 시작된 인스턴스의 경우, 이 페이지에서 설명된 관계를 활용하여 Windows 디스크를 인스턴스 스토어 및 EBS 볼륨에 매핑할 수 있습니다. 이 주제에서는 인스턴스의 Windows 운영 체제에서 사용할 수 있는 비 NVMe 디스크를 보는 방법을 설명합니다. 또한 이러한 비 NVMe 디스크를 기본 Amazon EBS 볼륨에 매핑하는 방법과 Amazon EC2에서 사용하는 블록 디바이스 매핑에 지정된 디바이스 이름을 보여줍니다.

참고

인스턴스 시작 시 Windows AMI가 Red Hat PV를 사용하는 경우 인스턴스를 업데이트하면 Citrix 드라이버를 사용할 수 있습니다. 자세한 내용은 EC2 Windows 인스턴스의 PV 드라이버 업그레이드 단원을 참조하십시오.

비 NVMe 디스크 나열

디스크 관리 또는 PowerShell을 사용하여 Windows 인스턴스에 있는 디스크를 검색할 수 있습니다.

Disk Management
Windows 인스턴스에 있는 디스크를 검색하려면
  1. 원격 데스크톱을 사용하여 Windows 인스턴스에 로그인합니다. 자세한 내용은 RDP를 사용하여 Windows 인스턴스에 연결 섹션을 참조하세요.

  2. 디스크 관리 유틸리티를 시작합니다.

    작업 표시줄에서 Windows 로고를 마우스 오른쪽 단추를 클릭한 다음 디스크 관리를 선택합니다.

  3. 디스크를 확인합니다. 루트 볼륨은 C:\로 마운트되는 EBS 볼륨입니다. 다른 디스크가 표시되지 않는 경우 AMI를 생성하거나 인스턴스를 시작할 때 추가 볼륨을 지정하지 않은 것입니다.

    다음 예는 인스턴스 스토어 볼륨(디스크 2) 및 추가 EBS 볼륨(디스크 1)을 포함하여 m3.medium 인스턴스를 시작할 경우 사용 가능한 디스크를 보여줍니다.

    루트 볼륨 1개, 인스턴스 스토어 볼륨 1개 및 EBS 볼륨 1개가 있는 디스크 관리
  4. 회색 창으로 표시된 디스크 1을 마우스 오른쪽 단추로 클릭한 후 속성을 선택합니다. 위치의 값을 볼륨에 비 NVMe 디스크 매핑의 표를 확인합니다. 예를 들어, 다음 디스크에는 버스 번호 0, 타겟 ID 9, LUN 0 위치가 있습니다. EBS 볼륨 테이블에 따르면 이 위치에 있는 디바이스 이름은 xvdj입니다.

    EBS 볼륨의 위치
PowerShell

다음 PowerShell 스크립트는 각 디스크 및 해당 디바이스 이름과 볼륨을 목록으로 표시합니다.

요구 사항 및 제한
  • Windows Server 2012 이상이 필요합니다.

  • EBS 볼륨 ID를 가져오려면 자격 증명이 필요합니다. Tools for PowerShell을 사용하여 프로필을 구성하거나 IAM 역할을 인스턴스에 연결할 수 있습니다.

  • NVMe 볼륨을 지원하지 않습니다.

  • 동적 디스크를 지원하지 않습니다.

Windows 인스턴스에 연결하고 다음 명령을 실행하여 PowerShell 스크립트 실행을 활성화합니다.

Set-ExecutionPolicy RemoteSigned

다음 스크립트를 복사하여 Windows 인스턴스에 mapping.ps1로 저장합니다.

# 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

스크립트를 다음과 같이 실행합니다.

PS C:\> .\mapping.ps1

다음은 예제 출력입니다.

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

Windows 인스턴스에서 자격 증명을 제공하지 않은 경우 스크립트는 EBS 볼륨 ID를 가져올 수 없으며 EbsVolumeId 열에 N/A가 표시됩니다.

볼륨에 비 NVMe 디스크 매핑

볼륨을 마운트할 때 인스턴스용 블록 디바이스 드라이버가 실제 볼륨 이름을 할당합니다.

인스턴스 스토어 볼륨

다음 표는 Citrix PV 및 AWS PV 드라이버가 NVMe가 아닌 인스턴스 스토어 볼륨을 Windows 볼륨에 매핑하는 방법을 설명합니다. 사용할 수 있는 인스턴스 스토어 볼륨의 개수는 인스턴스 유형에 의해 결정됩니다. 자세한 내용은 EC2 인스턴스의 인스턴스 스토어 볼륨 제한 섹션을 참조하세요.

위치 디바이스 이름

버스 번호 0, 타겟 ID 78, LUN 0

xvdca

버스 번호 0, 타겟 ID 79, LUN 0

xvdcb

버스 번호 0, 타겟 ID 80, LUN 0

xvdcc

버스 번호 0, 타겟 ID 81, LUN 0

xvdcd

버스 번호 0, 타겟 ID 82, LUN 0

xvdce

버스 번호 0, 타겟 ID 83, LUN 0

xvdcf

버스 번호 0, 타겟 ID 84, LUN 0

xvdcg

버스 번호 0, 타겟 ID 85, LUN 0

xvdch

버스 번호 0, 타겟 ID 86, LUN 0

xvdci

버스 번호 0, 타겟 ID 87, LUN 0

xvdcj

버스 번호 0, 타겟 ID 88, LUN 0

xvdck

버스 번호 0, 타겟 ID 89, LUN 0

xvdcl

EBS 볼륨

다음 표는 Citrix PV 및 AWS PV 드라이버가 비 NVME EBS 볼륨을 Windows 볼륨에 매핑하는 방법을 설명합니다.

위치 디바이스 이름

버스 번호 0, 타겟 ID 0, LUN 0

/dev/sda1

버스 번호 0, 타겟 ID 1, LUN 0

xvdb

버스 번호 0, 타겟 ID 2, LUN 0

xvdc

버스 번호 0, 타겟 ID 3, LUN 0

xvdd

버스 번호 0, 타겟 ID 4, LUN 0

xvde

버스 번호 0, 타겟 ID 5, LUN 0

xvdf

버스 번호 0, 타겟 ID 6, LUN 0

xvdg

버스 번호 0, 타겟 ID 7, LUN 0

xvdh

버스 번호 0, 타겟 ID 8, LUN 0

xvdi

버스 번호 0, 타겟 ID 9, LUN 0

xvdj

버스 번호 0, 타겟 ID 10, LUN 0

xvdk

버스 번호 0, 타겟 ID 11, LUN 0

xvdl

버스 번호 0, 타겟 ID 12, LUN 0

xvdm

버스 번호 0, 타겟 ID 13, LUN 0

xvdn

버스 번호 0, 타겟 ID 14, LUN 0

xvdo

버스 번호 0, 타겟 ID 15, LUN 0

xvdp

버스 번호 0, 타겟 ID 16, LUN 0

xvdq

버스 번호 0, 타겟 ID 17, LUN 0

xvdr

버스 번호 0, 타겟 ID 18, LUN 0

xvds

버스 번호 0, 타겟 ID 19, LUN 0

xvdt

버스 번호 0, 타겟 ID 20, LUN 0

xvdu

버스 번호 0, 타겟 ID 21, LUN 0

xvdv

버스 번호 0, 타겟 ID 22, LUN 0

xvdw

버스 번호 0, 타겟 ID 23, LUN 0

xvdx

버스 번호 0, 타겟 ID 24, LUN 0

xvdy

버스 번호 0, 타겟 ID 25, LUN 0

xvdz