

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EBS ボリュームと NVMe
<a name="nvme-ebs-volumes"></a>

Amazon EBS ボリュームは NVMe ブロックデバイスとして、[AWS Nitro System](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) 上に構築された Amazon EC2 インスタンスで公開されます。NVMe ブロックデバイスとして公開される Amazon EBS ボリュームの機能とパフォーマンスを最大限に活用するには、EC2 インスタンスに AWS NVMe ドライバーがインストールされている必要があります。現行世代のすべての AWS Windows と Linux AMI には、デフォルトで NVMe ドライバーがインストールされています。AWS

AWS NVMe ドライバーを持たない AMI を使用する場合は、手動でインストールできます。詳細については、*Amazon EC2 ユーザーガイド*の [AWSNVMe ドライバー](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/aws-nvme-drivers.html)を参照してください。

**Linux インスタンス**  
デバイス名は、「`/dev/nvme0n1`」や「`/dev/nvme1n1`」などです。ブロックデバイスマッピングで指定したデバイス名は、NVMe デバイス名 (`/dev/nvme[0-26]n1`) を使用して名称変更されます。ブロックデバイスドライバーは、ブロックデバイスマッピングのボリュームに指定した順序とは異なる順序で NVMe デバイス名を割り当てることができます。

**Windows インスタンス**  
インスタンスにボリュームをアタッチする場合はボリュームのデバイス名を含めます。このデバイス名は Amazon EC2 によって使用されます。インスタンスのブロックデバイスドライバーは、ボリュームのマウント時に実際のボリューム名を割り当て、この割り当てられた名前は Amazon EC2 が使用する名前とは異なる可能性があります。

**Topics**
+ [Amazon EBS ボリュームを NVMe デバイス名にマッピング](identify-nvme-ebs-device.md)
+ [Amazon EBS ボリュームの NVMe I/O オペレーションタイムアウト](timeout-nvme-ebs-volumes.md)
+ [Amazon EBS ボリュームの NVMe Abort コマンド](abort-command.md)

# Amazon EBS ボリュームを NVMe デバイス名にマッピング
<a name="identify-nvme-ebs-device"></a>

EBS では、シングルルート I/O 仮想化 (SR-IOV) を使用して、NVMe 規格を使用して Nitro ベースのインスタンスにボリュームをアタッチします。これらのデバイスは、オペレーティングシステムの標準 NVMe ドライバーに依存しています。これらのドライバーは、通常、インスタンスのブート時にアタッチ済みのデバイスを検出し、そのデバイスがブロックデバイスマッピングでどのように指定されているかではなく、デバイスが応答する順序に基づいてデバイスノードを作成します。

## Linux インスタンス
<a name="ebs-nvme-linux"></a>

Linux では、NVMe デバイス名は `/dev/nvme<x>n<y>` のパターンに従います。ただし、<x> は列挙順序で、EBS の場合の <y> は 1 です。場合によっては、デバイスは後続のインスタンスの開始時に異なる順序で検出に応答することがあり、デバイス名が変更されます。また、ブロックデバイスドライバーによって割り当てられるデバイス名は、ブロックデバイスマッピングで指定される名前と異なる場合があります。

インスタンス内の EBS ボリュームには、次のいずれかのような安定した識別子を使用することをお勧めします。
+ Nitro ベースのインスタンスでは、ブロックデバイスマッピングは、EBS ボリュームをアタッチしているとき、または `AttachVolume` か `RunInstances` API コールが、NVMe コントローラー ID のベンダー固有のデータフィールドに取り込まれる際に Amazon EC2 コンソールで指定されます。バージョン 2017.09.01 以降の Amazon Linux AMI で、このデータを読み込んでブロックデバイスマッピングへのシンボリックリンクを作成する `udev` ルールを提供します。
+ EBS ボリューム ID とマウントポイントは、インスタンスの状態が変化しても安定しています。NVMe デバイス名は、インスタンスの起動時にデバイスが応答する順序に応じて変化します。一貫性のあるデバイスを識別するには、EBS ボリューム ID とマウントポイントを使用することをお勧めします。
+ NVMe EBS ボリュームには、EBS ボリューム ID がデバイス ID のシリアル番号として設定されています。シリアル番号を一覧表示するには、`lsblk -o +SERIAL` コマンドを使用します。
+ NVMe デバイス名の形式は、EBS ボリュームがインスタンスの起動中または起動後にアタッチされたかどうかによって異なります。インスタンスの起動後にアタッチされたボリュームの NVMe デバイス名には、`/dev/`プレフィクスが含まれますが、インスタンスの起動中にアタッチされたボリュームの NVMe デバイス名には`/dev/`プレフィクスが含まれません。
  + Amazon Linux または FreeBSD AMI の場合、`sudo ebsnvme-id /dev/nvme0n1 -u` コマンドを使用して、一貫した NVMe デバイス名を指定します。
  + その他のディストリビューションでは`sudo nvme id-ctrl -V /dev/nvme0n1`コマンドを使用して NVMe デバイス名を指定します。`--vendor-specific` コマンドオプションを含める必要がある場合があります。
+ デバイスがフォーマットされると、ファイルシステムの存続期間中、存続する UUID が生成されます。デバイスラベルは同時に指定することができます。詳細については、「[Amazon EBS ボリュームを使用できるようにする](ebs-using-volumes.md) および [間違ったボリュームからの起動](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-booting-from-wrong-volume.html)」を参照してください。

**Amazon Linux AMI**  
AMI Amazon Linux 2017.09.01 以降 (Amazon Linux 2 を含む) では､次のように **ebsnvme-id** コマンドを実行して、NVMe デバイス名をボリューム ID とデバイス名にマップすることができます。

次の例は、インスタンスの起動時にアタッチされたボリュームのコマンドと出力を示しています。NVMe デバイス名には、`/dev/`プレフィクスが含まれないことに注意してください。

```
[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme0n1
Volume ID: vol-01324f611e2463981
sda
```

次の例は、インスタンスの起動後にアタッチされたボリュームのコマンドと出力を示しています。NVMe デバイス名に、`/dev/`プレフィクスが含まれることに注意してください。

```
[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1
Volume ID: vol-064784f1011136656
/dev/sdf
```

また、Amazon Linux はブロックデバイスマッピング (例えば、`/dev/sdf`) 内のデバイス名から NVMe デバイス名へのシンボリックリンクを作成します。

**FreeBSD AMI**  
FreeBSD 12.2-RELEASE 以降では、上記のように **ebsnvme-id** コマンドを実行することができます。NVMe デバイスの名前 (`nvme0` など) またはディスクデバイス (`nvd0` または `nda0`) を渡します。FreeBSD は、ディスクデバイスへのシンボリックリンク (`/dev/aws/disk/ebs/`*volume\$1id* など) も作成します。

**その他の Linux AMI**  
カーネルバージョン 4.2 以降では､次のように **nvme id-ctrl** コマンドを実行して、NVMe デバイスをボリューム ID にマップすることができます。最初に、Linux ディストリビューションのパッケージ管理ツールを使用して、NVMe コマンドラインのパッケージ `nvme-cli` をインストールします。他のディストリビューションのダウンロードおよびインストール手順については、ディストリビューションに固有のドキュメントを参照してください。

次の例では、インスタンスの起動時にアタッチされたボリュームのボリューム ID と NVMe デバイス名を取得します｡ NVMe デバイス名には、`/dev/`プレフィクスが含まれないことに注意してください。デバイス名は、NVMe コントローラベンダー固有の拡張子 (コントローラー ID のバイト 384:4095) を介して使用できます。

```
[ec2-user ~]$ sudo nvme id-ctrl -V /dev/nvme0n1
NVME Identify Controller:
vid     : 0x1d0f
ssvid   : 0x1d0f
sn      : vol01234567890abcdef
mn      : Amazon Elastic Block Store
...
0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "sda..."
```

次の例では、インスタンスの起動後にアタッチされたボリュームのボリューム ID と NVMe デバイス名を取得します｡ NVMe デバイス名には、`/dev/`プレフィクスが含まれることに注意してください。

```
[ec2-user ~]$ sudo nvme id-ctrl -V /dev/nvme1n1
NVME Identify Controller:
vid     : 0x1d0f
ssvid   : 0x1d0f
sn      : volabcdef01234567890
mn      : Amazon Elastic Block Store
...
0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "/dev/sdf..."
```

**lsblk** コマンドは、使用可能なデバイスとそのマウントポイント (該当する場合) をリストします。これは、使用する正しいデバイス名を決定するのに役立ちます。この例では、`/dev/nvme0n1p1` がルートデバイスとしてマウントされ、`/dev/nvme1n1` はアタッチされていますがマウントされていません。

```
[ec2-user ~]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1       259:3   0  100G  0 disk
nvme0n1       259:0   0    8G  0 disk
  nvme0n1p1   259:1   0    8G  0 part /
  nvme0n1p128 259:2   0    1M  0 part
```

## Windows インスタンス
<a name="ebs-nvme-windows"></a>

**ebsnvme-id** コマンドを実行して、NVMe デバイスのディスク番号を EBS ボリューム ID およびデバイス名にマッピングできます。デフォルトでは、すべての EBS NVMe デバイスは列挙されません。特定のデバイスの情報を列挙するには、ディスク番号を渡します。`ebsnvme-id` ツールは、AWS で提供されている最新の Windows Server AMI の、`C:\ProgramData\Amazon\Tools` に含まれています。

AWS NVMe ドライバーパッケージの `1.5.0,` 以降では、`ebsnvme-id` ツールの最新バージョンがドライバーパッケージによってインストールされます。最新バージョンはドライバーパッケージでのみ入手可能です。`ebsnvme-id` ツールのスタンドアロンダウンロードリンクにはアップデートが送信されなくなります。スタンドアロンリンクから入手できる最後のバージョンは `1.1.0` です。このバージョンは [ebsnvme-id.zip](https://s3.amazonaws.com/ec2-windows-drivers-downloads/EBSNVMeID/Latest/ebsnvme-id.zip) リンクを使用してコンテンツを Amazon EC2 インスタンスに抽出することでダウンロード可能となり、`ebsnvme-id.exe` にアクセスできるようになります。

```
PS C:\ProgramData\Amazon\Tools> ebsnvme-id.exe
Disk Number: 0
Volume ID: vol-0d6d7ee9f6e471a7f
Device Name: sda1

Disk Number: 1
Volume ID: vol-03a26248ff39b57cf
Device Name: xvdd

Disk Number: 2
Volume ID: vol-038bd1c629aa125e6
Device Name: xvde

Disk Number: 3
Volume ID: vol-034f9d29ec0b64c89
Device Name: xvdb

Disk Number: 4
Volume ID: vol-03e2dbe464b66f0a1
Device Name: xvdc
```

```
PS C:\ProgramData\Amazon\Tools> ebsnvme-id.exe 4
Disk Number: 4
Volume ID: vol-03e2dbe464b66f0a1
Device Name: xvdc
```

# Amazon EBS ボリュームの NVMe I/O オペレーションタイムアウト
<a name="timeout-nvme-ebs-volumes"></a>

ほとんどのオペレーティングシステムは、NVMe デバイスに送信される I/O オペレーションのタイムアウトを指定します。

**Linux インスタンス**  
Linux では、Nitro ベースのインスタンスにアタッチされた EBS ボリュームは、オペレーティングシステムが提供するデフォルトの NVMe ドライバーを使用します。ほとんどのオペレーティングシステムは、NVMe デバイスに送信される I/O オペレーションのタイムアウトを指定します。デフォルトのタイムアウトは 30 秒で、`nvme_core.io_timeout` ブートパラメータを使用して変更できます。バージョン 4.6 より前の Linux カーネルでは、このパラメータは `nvme.io_timeout` です。

I/O レイテンシーがこの timeout パラメータの値を超えると、Linux NVMe ドライバーは I/O に失敗し、ファイルシステムまたはアプリケーションにエラーを返します。I/O オペレーションに応じて、ファイルシステムまたはアプリケーションはエラーを再試行できます。場合によっては、ファイルシステムを読み取り専用として再マウントすることがあります。

Xen インスタンスに接続された EBS ボリュームに類似するエクスペリエンスのため、`nvme_core.io_timeout` を可能な限り最大値に設定することをお勧めします。現在のカーネルでは、最大値は 4294967295 ですが、以前のカーネルでは最大値は 255 です。Linux のバージョンに応じて、タイムアウトはすでにサポートされる最大値に設定されていることがあります。例えば、Amazon Linux AMI 2017.09.01 以降では、デフォルトでタイムアウトが 4294967295 に設定されています。

Linux ディストリビューションの最大値を確認するには、示されている最大値よりも高い値を `/sys/module/nvme_core/parameters/io_timeout` に書き込み、ファイルを保存する際に範囲外の数値結果エラーがないかどうかをチェックします。

**Windows インスタンス**  
Windows では､デフォルトのタイムアウトは 60 秒で、最大は 255 秒です。`TimeoutValue` ディスククラスのレジストリ設定は、[SCSI ミニドライバーのレジストリエントリ](https://learn.microsoft.com/en-us/previous-versions/windows/drivers/storage/registry-entries-for-scsi-miniport-drivers)で説明されている手順を使用して変更できます。

# Amazon EBS ボリュームの NVMe Abort コマンド
<a name="abort-command"></a>

`Abort` コマンドは、以前にコントローラーに送信された特定のコマンドを中止するために発行される NVMe Admin コマンドです。このコマンドは、通常、I/O オペレーションのタイムアウトしきい値を超えたストレージデバイスに対して、デバイスドライバーによって発行されます。

デフォルトで `Abort` コマンドをサポートする Amazon EC2 インスタンスタイプは、`Abort` コマンドが発行されアタッチされた Amazon EBS デバイスのコントローラーに以前に送信された特定のコマンドを中止します。`Abort` コマンドをサポートしていない Amazon EC2 インスタンスは、アタッチされた Amazon EBS ボリュームに `Abort` コマンドが発行されてもアクションを実行しません。

`Abort` コマンドは、以下でサポートされています。
+ NVMe デバイスバージョン 1.4 以降の Amazon EBS デバイス。
+ Xen ベースのインスタンスタイプと次の Nitro ベースのインスタンスタイプ**を除く**すべての Amazon EC2 インスタンス:
  + 汎用: A1 \$1 M5 \$1 M5a \$1 M5ad \$1 M5d \$1 M5dn \$1 M5n \$1 M5zn \$1 M6g \$1 M6gd \$1 Mac1 \$1 Mac2 \$1 T3 \$1 T3a \$1 T4g
  + コンピューティングの最適化: C5 \$1 c5a \$1 C5ad \$1 C5d \$1 C5n \$1 C6g \$1 C6gd
  + メモリ最適化: R5 \$1 R5a \$1 R5ad \$1 R5d \$1 R5dn \$1 R5n \$1 R6g \$1 R6gd \$1 U-12tb1 \$1 U-18tb1 \$1 U-24tb1 \$1 U-3tb1 \$1 U-6tb1 \$1 U-9tb1 \$1 X2gd \$1 X2iezn \$1 Z1d
  + ストレージ最適化: D3 \$1 D3en \$1 I3en
  + 高速コンピューティング: DL1 \$1 G4ad \$1 G4dn \$1 G5 \$1 G5g \$1 Inf1 \$1 P3dn \$1 P4d \$1 P4de \$1 VT1

詳細については、「[NVM Express の基本仕様](https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf)」のセクション「**5.1 Abort コマンド**」を参照してください。