Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Amazon EBS と NVMe

次のインスタンスでは、EBS ボリュームは NVMe ブロックデバイス (C5、C5d、i3.metal、M5、M5d、R5、R5d、、および z1d) として公開されます。デバイス名は、/dev/nvme0n1/dev/nvme1n1 などです。ブロックデバイスマッピングで指定したデバイス名は、NVMe デバイス名 (/dev/nvme[0-26]n1) を使用して名称変更されます。

注記

Amazon EBS Product Details」に示されている EBS のパフォーマンス安定性は、ブロックデバイスインターフェイスに関係なく有効です。

EBS デバイスの特定

Amazon Linux AMI

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

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-01324f611e2463981 /dev/sdf

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

その他の Linux AMI

カーネルバージョン 4.2 以降では、次のように nvme id-ctrl コマンドを実行して、NVMe デバイスをボリューム ID にマップすることができます。最初に、Linux ディストリビューションのパッケージ管理ツールを使用して、NVMe コマンドラインのパッケージ nvme-cli をインストールします。

次の例では、ボリューム ID やデバイス名を取得します。デバイス名は、NVMe コントローラベンダ固有の拡張子 (コントローラ ID のバイト 384:4095) を介して使用できます。

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme1n1 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 "/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

NVMe EBS ボリュームを操作する

Linux カーネル 4.2 以降を使用している場合は、NVMe EBS ボリュームのボリュームサイズを変更すると、自動的にインスタンスに反映されます。古い Linux カーネルの場合は、EBS ボリュームをデタッチしてアタッチするか、インスタンスを再起動してサイズ変更を反映させる必要があります。Linux カーネル 3.19 以降では、hdparm コマンドを次のように使用して NVMe デバイスの再スキャンを強制できます。

[ec2-user ~]$ sudo hdparm -z /dev/nvme1n1

NVMe EBS ボリュームをデタッチする前に、そのボリュームを同期およびアンマウントする必要があります。NVMe EBS ボリュームをデタッチすると、強制オプションが暗黙的に有効になります。したがって、インスタンスには、ボリュームをデタッチする前に、ファイルシステムのキャッシュまたはメタデータをフラッシュする機会が失われます。

I/O オペレーションタイムアウト

NVMe EBS ボリュームは、オペレーティングシステムが提供するデフォルトの NVMe ドライバーを使用します。ほとんどのオペレーティングシステムは、NVMe デバイスに送信される I/O オペレーションのタイムアウトを指定します。 デフォルトのタイムアウトは 30 秒で、nvme_core.io_timeout ブートパラメータ (またはバージョン 4.6 以前の Linux カーネルの場合は nvme.io_timeout ブートパラメータ) を使用して変更できます。Xen インスタンスに接続された EBS ボリュームに似たエクスペリエンスを可能な限り最大値に設定することをお勧めします。Amazon Linux AMI 2017.09.01 以降、バージョン 4.15 以上の Linux カーネルの場合、最大値は 4294967295 です。Linux 4.15 以前では、最大値は 255 秒です。現行バージョンの Amazon Linux AMI を使用している場合は、すでにタイムアウトを延長しています。

Linux カーネル 4.14 以降では、I/O オペレーションを再試行できる回数を設定することもできます。デフォルトは 5 回の再試行です。nvme_core.max_retries カーネルブートパラメータを使用するか、実行時に次のコマンドを使用して別の値を設定できます。

[ec2-user ~]$ echo 10 > /sys/module/nvme_core/parameters/max_retries