Amazon EBS および NVMe - Amazon EBS

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

Amazon EBS および NVMe

EBS ボリュームは、Nitro System上に構築されたインスタンスで NVMe ブロックデバイスとして公開されます。

Amazon EBS 製品の詳細に記載されている EBS パフォーマンスガイダンスは、ブロックデバイスインターフェイスに関係なく有効です。

Linux インスタンス

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

Windows インスタンス

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

NVMe ドライバのインストールまたはアップグレード

NVMe ボリュームにアクセスするには、NVMe ドライバーをインストールする必要があります。インスタンスは、NVMe ボリュームタイプである NVMe EBS ボリュームや NVMe インスタンスストアボリュームも、NVMe ボリュームタイプでないボリュームもサポートできます。詳細については、「ネットワーク機能とストレージ機能の概要」を参照してください。

以下の AMI には、必要な NVMe ドライバーが含まれています。

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

  • linux-aws カーネルを搭載した Ubuntu 14.04 以降

    注記

    AWS Graviton ベースのインスタンスタイプには、カーネルを搭載した Ubuntu 18.04 以降が必要です linux-aws

  • Red Hat Enterprise Linux 6.5 以降

  • Red Hat Enterprise Linux 7.4 以降

  • SUSE Linux Enterprise Server 12 SP2 以降

  • CentOS 7.4.1708 以降

  • FreeBSD 11.1 以降

  • Debian GNU/Linux 9 以降

インスタンスに NVMe ドライバーがあることを確認するには

次のコマンドを使用して、インスタンスに NVMe ドライバーがあることを確認できます。

  • Amazon Linux、RHEL、CentOS、SUSE Linux Enterprise Server

    $ modinfo nvme

    インスタンスに NVMe ドライバーがある場合、コマンドはそのドライバーに関する情報を返します。

  • Amazon Linux 2、Ubuntu

    $ ls /sys/module/ | grep nvme

    インスタンスに NVMe ドライバーがある場合、コマンドはインストールされたドライバーを返します。

NVMe ドライバーを更新するには

インスタンスに NVMe ドライバーがある場合は、次の手順を使用してドライバーを最新バージョンに更新できます。

  1. インスタンスに接続します。

  2. パッケージのキャッシュを更新し、必要なパッケージの更新を次のように取得します。

    • Amazon Linux 2、Amazon Linux、CentOS、Red Hat Enterprise Linux の場合:

      [ec2-user ~]$ sudo yum update -y
    • Ubuntu と Debian の場合:

      [ec2-user ~]$ sudo apt-get update -y
  3. Ubuntu 16.04 以降には、linux-aws パッケージが含まれます。このパッケージには、Nitro ベースのインスタンスで必要な NVMe および ENA ドライバーが含まれます。最新バージョンにするには、次のように linux-aws パッケージにアップグレードします。

    [ec2-user ~]$ sudo apt-get install --only-upgrade -y linux-aws

    Ubuntu 14.04 の場合は、次のように最新の linux-aws パッケージをインストールできます。

    [ec2-user ~]$ sudo apt-get install linux-aws
  4. インスタンスを再起動して、最新のカーネルバージョンを読み込みます。

    sudo reboot
  5. 再起動後にインスタンスに再接続します。

AWS Windows Server 2008 R2 以降の Windows AMI には NVMe ドライバーが含まれています。 AWS Amazon が提供する最新の AWS Windows AMI を使用していない場合は、『Windows インスタンス用 Amazon EC2 ユーザーガイド』の「を使用して AWS PowerShell NVMe ドライバーをインストールまたはアップグレードする」を参照してください。

EBS デバイスの特定

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

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

インスタンス内の EBS ボリュームには、次のいずれかのような安定した識別子を使用することをお勧めします。

  • Nitro ベースのインスタンスでは、ブロックデバイスマッピングは、EBS ボリュームをアタッチしているとき、または AttachVolumeRunInstances 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 デバイス名を指定します。

  • デバイスがフォーマットされると、ファイルシステムの存続期間中、存続する UUID が生成されます。デバイスラベルは同時に指定することができます。詳細については、「Amazon EBS ボリュームを使用できるようにする および 間違ったボリュームからの起動」を参照してください。

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_id など) も作成します。

その他の 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

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

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

PS C:\Users\Administrator\Desktop> 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:\Users\Administrator\Desktop> ebsnvme-id.exe 4 Disk Number: 4 Volume ID: vol-03e2dbe464b66f0a1 Device Name: xvdc

NVMe EBS ボリュームの操作

NVMe EBS ボリュームをフォーマットしてマウントするには、Amazon EBS ボリュームを使用できるようにするを参照してください。

Linux インスタンス

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

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

NVMe EBS ボリュームをデタッチすると、インスタンスには、ボリュームをデタッチする前に、ファイルシステムのキャッシュまたはメタデータをフラッシュする機会が失われます。したがって、NVMe EBS ボリュームをデタッチする前に、まずそのボリュームを同期およびアンマウントする必要があります。ボリュームのデタッチに失敗した場合は、force-detachの説明に従って インスタンスから Amazon EBS ボリュームをデタッチする コマンドを試すことができます。

Windows インスタンス

最新の AWS Windows AMI には、EBS ボリュームを AWS NVMe ブロックデバイスとして公開するインスタンスタイプに必要な NVMe ドライバーが含まれています。ただし、Windows システムでルートボリュームのサイズを変更すると、この変更をインスタンスに反映するためにボリュームを再スキャンする必要があります。別の AMI からインスタンスを起動した場合、必要な AWS NVMe ドライバーが含まれていない可能性があります。インスタンスに最新の AWS NVMe ドライバーがインストールされていない場合は、インストールする必要があります。詳細については、「AWS Windows インスタンス用 NVMe ドライバー」を参照してください。

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

ほとんどのオペレーティングシステムは、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 秒で、最大は 25 秒です。TimeoutValue ディスククラスのレジストリ設定は、SCSI ミニドライバーのレジストリエントリで説明されている手順を使用して変更できます。

Abort コマンド

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

次のインスタンスタイプは、デフォルトで、アタッチされているすべての Amazon EBS ボリュームについて Abort コマンドをサポートします: R5bR6iM6iM6aC6gnC6iX2gdX2ieznIm4gnIs4gen

他のインスタンスタイプは、アタッチされた Amazon EBS ボリュームに Abort コマンドが発行されてもアクションを実行しません。

NVMe デバイスバージョン 1.4 以降の Amazon EBS デバイスは、Abort コマンドをサポートしています。

詳細については、「NVM Express Base Specification」(NVM Express の基本仕様) のセクション 5.1「Abort command」(中止コマンド) を参照してください。