

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Amazon EC2 Windows 執行個體上的 NVMe 磁碟映射至磁碟區
<a name="windows-list-disks-nvme"></a>

若使用 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)，EBS 磁碟區會公開為 NVMe 裝置。本主題會說明如何檢視執行個體上 Windows 作業系統可用的 **NVMe 磁碟**。其也會顯示如何將這些 NVMe 磁碟映射至基礎 Amazon EBS 磁碟區，以及為 Amazon EC2 使用的區塊型儲存設備映射指定的裝置名稱。

**Topics**
+ [列出 NVMe 磁碟](#windows-disks-nvme)
+ [將 NVMe 磁碟映射至磁碟區](#ebs-nvme-volume-map)

## 列出 NVMe 磁碟
<a name="windows-disks-nvme"></a>

您可以使用磁碟管理公用程式或 Powershell，來搜尋 Windows 執行個體上的磁碟。

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

**搜尋 Windows 執行個體上的磁碟**

1. 使用遠端桌面登入 Windows 執行個體。如需詳細資訊，請參閱 [使用 RDP 連線至您的 Windows 執行個體](connecting_to_windows_instance.md)。

1. 啟動磁碟管理公用程式。

1. 檢閱磁碟。根磁碟區是掛載為 `C:\` 的 EBS 磁碟區。如果沒有顯示其他的磁碟，表示當您建立 AMI 或啟動執行個體時，並未指定其他的磁碟區。

   下列範例顯示當您啟動具有兩個額外 EBS 磁碟區的 `r5d.4xlarge` 執行個體時，可以使用的磁碟。  
![\[磁碟管理，包含根磁碟區、兩個執行個體存放區磁碟區和兩個 EBS 磁碟區。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/disk_management_nvme.png)

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

下列的 PowerShell 指令碼，會列出每個磁碟及其對應的裝置名稱和磁碟區。此指令碼適用於與 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)一起使用，其會使用 NVMe EBS 和執行個體儲存體磁碟區。

連線到您的 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
```

以下是具有根磁碟區、兩個 EBS 磁碟區和兩個執行個體存放區磁碟區之執行個體的範例輸出。

```
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 磁碟映射至磁碟區
<a name="ebs-nvme-volume-map"></a>

可以使用 [Get-Disk](https://learn.microsoft.com/en-us/powershell/module/storage/get-disk) 命令，將 Windows 磁碟編號映射至 Amazon EBS 磁碟區和 Amazon EC2 執行個體儲存體磁碟區。

```
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** 命令，將 NVMe 磁碟編號映射至 EBS 磁碟區 ID 和裝置名稱。

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