

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

Disk Management または Powershell を使用して Windows インスタンス上のディスクを検索できます。

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

**Windows インスタンス上のディスクを見つけるには**

1. リモートデスクトップを使用して Windows インスタンスにログインします。詳細については、[RDP を使用した Windows インスタンスへの接続](connecting_to_windows_instance.md)を参照してください。

1. [Disk Management] ユーティリティを起動します。

1. ディスクを確認します。ルートボリュームは、`C:\` としてマウントされた EBS ボリュームです。他に表示されているディスクがない場合は、AMI を作成したとき、またはインスタンスを起動したときに追加のボリュームを指定しませんでした。

   以下は、2 つの追加の EBS ボリュームで、`r5d.4xlarge` インスタンスを起動した場合に使用可能なディスクの例です。  
![\[ルートボリューム、2 つのインスタンスストアボリューム、および 2 つの EBS ボリュームを備えた Disk Management。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/disk_management_nvme.png)

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

次の PowerShell スクリプトでは、各ディスクと対応するデバイス名およびボリュームを一覧表示できます。NVMe EBS とインスタンスストアボリュームを使用する [Nitro ベースのインスタンス](instance-types.md#instance-hypervisor-type)で使用することを目的としています。

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

次に、ルートボリューム、2 つの EBS ボリューム、および 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 インスタンスで Tools for 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
```