Windows 인스턴스의 볼륨에 디스크 매핑
참고
이 주제는 Windows 인스턴스에만 적용됩니다.
Windows 인스턴스는 루트 볼륨의 기능을 하는 EBS 볼륨과 함께 제공됩니다. Windows 인스턴스가 AWS PV 또는 Citrix PV 드라이버를 사용하는 경우 최대 25개의 볼륨을 선택적으로 추가할 수 있으므로 총 볼륨은 26개가 됩니다. 자세한 내용은 인스턴스 볼륨 제한 섹션을 참조하세요.
인스턴스의 인스턴스 유형에 따라 인스턴스는 0~24개의 인스턴스 스토어 볼륨을 가질 수 있습니다. 인스턴스에서 사용 가능한 인스턴스 스토어 볼륨을 사용하려면 AMI 생성 시 또는 인스턴스 시작 시에 인스턴스 스토어 볼륨을 지정해야 합니다. 또한 AMI를 생성하거나 인스턴스를 시작할 때 EBS 볼륨을 추가하거나, 인스턴스가 실행 중인 상태에서 해당 볼륨을 연결할 수 있습니다.
인스턴스에 볼륨을 추가할 때 Amazon EC2에서 사용하는 디바이스 이름을 지정합니다. 자세한 내용은 Amazon EC2 인스턴스의 디바이스 이름 섹션을 참조하세요. AWS Windows Amazon Machine Image(AMI)에는 Amazon EC2가 인스턴스 스토어 및 EBS 볼륨을 Windows 디스크 및 드라이브 문자에 매핑하기 위해 사용하는 드라이버 세트가 포함됩니다. AWS PV 또는 Citrix PV 드라이버를 사용하는 Windows AMI에서 인스턴스를 시작한 경우, 이 페이지에서 설명된 관계를 활용하여 Windows 디스크를 인스턴스 스토어 및 EBS 볼륨에 매핑할 수 있습니다. Windows AMI가 Red Hat PV를 사용하는 경우 인스턴스를 업데이트하면 Citrix 드라이버를 사용할 수 있습니다. 자세한 내용은 Windows 인스턴스의 PV 드라이버 업그레이드 단원을 참조하십시오.
목차
NVMe 볼륨 나열
디스크 관리 또는 Powershell을 사용하여 Windows 인스턴스에 있는 디스크를 검색할 수 있습니다.
디스크 관리를 사용하여 NVMe 디스크 나열
디스크 관리를 사용하여 Windows 인스턴스에 있는 디스크를 검색할 수 있습니다.
Windows 인스턴스에 있는 디스크를 검색하려면
-
원격 데스크톱을 사용하여 Windows 인스턴스에 로그인합니다. 자세한 내용은 Windows 인스턴스에 연결 섹션을 참조하세요.
-
디스크 관리 유틸리티를 시작합니다.
-
디스크를 확인합니다. 루트 볼륨은
C:\
로 마운트되는 EBS 볼륨입니다. 다른 디스크가 표시되지 않는 경우 AMI를 생성하거나 인스턴스를 시작할 때 추가 볼륨을 지정하지 않은 것입니다.다음 예는 추가 EBS 볼륨 2개가 포함된
r5d.4xlarge
인스턴스를 시작하는 경우 사용 가능한 디스크를 보여줍니다.
PowerShell을 사용하여 NVMe 디스크 나열
다음 PowerShell 스크립트는 각 디스크 및 해당 디바이스 이름과 볼륨을 목록으로 표시합니다. NVMe EBS 및 인스턴스 스토어 볼륨을 사용하는 AWS Nitro 시스템에 구축된 인스턴스에 사용하기에 적합합니다.
Windows 인스턴스에 연결하고 다음 명령을 실행하여 PowerShell 스크립트 실행을 활성화합니다.
Set-ExecutionPolicy RemoteSigned
다음 스크립트를 복사하여 Windows 인스턴스에 mapping.ps1
로 저장합니다.
# 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
스크립트를 다음과 같이 실행합니다.
PS C:\>
.\mapping.ps1
다음은 루트 볼륨 1개, EBS 볼륨 2개 및 인스턴스 스토어 볼륨 2개가 있는 인스턴스의 예제 출력입니다.
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
Windows 인스턴스에서 Windows PowerShell용 도구에 대한 자격 증명을 구성하지 않은 경우 스크립트는 EBS 볼륨 ID를 가져올 수 없으며 EbsVolumeId
열에 N/A를 사용합니다.
NVMe EBS 볼륨 매핑
AWS Nitro 시스템에 구축된 인스턴스에서는 EBS 볼륨이 NVMe 디바이스로 표시됩니다. 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
ebsnvme-id 명령을 실행하여 EBS 볼륨 ID 및 디바이스 이름에 NVMe 디스크 번호를 매핑할 수도 있습니다.
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
볼륨 나열
디스크 관리 또는 Powershell을 사용하여 Windows 인스턴스에 있는 디스크를 검색할 수 있습니다.
디스크 관리를 사용하여 디스크 나열
디스크 관리를 사용하여 Windows 인스턴스에 있는 디스크를 검색할 수 있습니다.
Windows 인스턴스에 있는 디스크를 검색하려면
-
원격 데스크톱을 사용하여 Windows 인스턴스에 로그인합니다. 자세한 내용은 Windows 인스턴스에 연결 섹션을 참조하세요.
-
디스크 관리 유틸리티를 시작합니다.
작업 표시줄에서 Windows 로고를 마우스 오른쪽 단추를 클릭한 다음 디스크 관리를 선택합니다.
-
디스크를 확인합니다. 루트 볼륨은
C:\
로 마운트되는 EBS 볼륨입니다. 다른 디스크가 표시되지 않는 경우 AMI를 생성하거나 인스턴스를 시작할 때 추가 볼륨을 지정하지 않은 것입니다.다음 예는 인스턴스 스토어 볼륨(디스크 2) 및 추가 EBS 볼륨(디스크 1)을 포함하여
m3.medium
인스턴스를 시작할 경우 사용 가능한 디스크를 보여줍니다. -
회색 창으로 표시된 디스크 1을 마우스 오른쪽 단추로 클릭한 후 속성을 선택합니다. 위치의 값을 디스크 디바이스를 디바이스 이름에 매핑의 표를 확인합니다. 예를 들어, 다음 디스크에는 버스 번호 0, 타겟 ID 9, LUN 0 위치가 있습니다. EBS 볼륨 테이블에 따르면 이 위치에 있는 디바이스 이름은
xvdj
입니다.
디스크 디바이스를 디바이스 이름에 매핑
볼륨을 마운트할 때 인스턴스용 블록 디바이스 드라이버가 실제 볼륨 이름을 할당합니다.
인스턴스 스토어 볼륨
다음 표는 Citrix PV 및 AWS PV 드라이버가 NVMe가 아닌 인스턴스 스토어 볼륨을 Windows 볼륨에 매핑하는 방법을 설명합니다. 사용할 수 있는 인스턴스 스토어 볼륨의 개수는 인스턴스 유형에 의해 결정됩니다. 자세한 내용은 인스턴스 스토어 볼륨 섹션을 참조하세요.
위치 | 디바이스 이름 |
---|---|
버스 번호 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 |
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가 표시됩니다.