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ドライバーがインストールされている必要があります。インスタンスは、NVMeEBSボリューム、NVMeインスタンスストアボリューム、両方のタイプのNVMeボリュームをサポートできますが、NVMeボリュームはサポートできません。詳細については、「ネットワーク機能とストレージ機能の概要」を参照してください。

必要なNVMeドライバーAMIsは次のとおりです。

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

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

    注記

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

  • Red Hat Enterprise Linux 7.4 以降

  • SUSE Linux Enterprise Server 12 SP2以降

  • CentOS 7.4.1708 以降

  • 無料BSD 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 以降には、 Nitro ベースのインスタンスに必要な NVMeおよび ENAドライバーを含む linux-awsパッケージが含まれています。最新バージョンにするには、次のように 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 AMIs for Windows Server 2008 R2 以降には、 AWS NVMeドライバーが含まれています。Amazon AMIsが提供する最新の AWS Windows を使用していない場合は、「Amazon ユーザーガイド」の「 を使用してドライバーをインストールまたはアップグレード AWS NVMe PowerShellするEC2」を参照してください。

EBS デバイスを特定する

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

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

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

  • Nitro ベースのインスタンスの場合、EBSボリュームをアタッチするとき、または AttachVolumeまたは RunInstancesAPI呼び出し中に Amazon EC2コンソールで指定されたブロックデバイスマッピングは、NVMeコントローラー識別のベンダー固有のデータフィールドにキャプチャされます。バージョン 2017.09.01 AMIs以降の Amazon Linux では、このデータを読み取り、ブロックデバイスマッピングへのシンボリックリンクを作成するudevルールが提供されます。

  • EBS ボリューム ID とマウントポイントは、インスタンスの状態が変化するたびに安定しています。NVMe デバイス名は、インスタンスの起動中にデバイスが応答する順序に応じて変更される場合があります。一貫したデバイス識別のために、EBSボリューム ID とマウントポイントを使用することをお勧めします。

  • NVMe EBS ボリュームのEBSボリューム ID は、デバイス ID のシリアル番号として設定されます。シリアル番号を一覧表示するには、lsblk -o +SERIAL コマンドを使用します。

  • NVMe デバイス名の形式は、インスタンスの起動中または起動後にEBSボリュームがアタッチされたかどうかによって異なります。NVMe インスタンスの起動後にアタッチされたボリュームのデバイス名には /dev/ プレフィックスが含まれますが、インスタンスの起動中にアタッチされたボリュームのNVMeデバイス名には /dev/ プレフィックスは含まれません。

    • Amazon Linux または無料BSD の場合はAMI、一貫したNVMeデバイス名に sudo ebsnvme-id /dev/nvme0n1 -u コマンドを使用します。

    • 他のディストリビューションの場合は、 sudo nvme id-ctrl -v /dev/nvme0n1 コマンドを使用してNVMeデバイス名を決定します。--vendor-specific コマンドオプションを含める必要がある場合があります。

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

Amazon Linux AMIs

Amazon Linux AMI2017.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デバイス名へのシンボリックリンクも作成します。

無料BSD AMIs

無料BSD 12.2- 以降ではRELEASE、上記のように ebsnvme-id コマンドを実行できます。NVMe デバイスの名前 ( などnvme0) またはディスクデバイス ( nvd0または など) を渡しますnda0。Free BSDは、ディスクデバイスへのシンボリックリンクも作成します (例: /dev/aws/disk/ebs/volume_id).

その他の Linux AMIs

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

次の例では、インスタンスの起動時にアタッチされたボリュームのボリューム ID とNVMeデバイス名を取得します。NVMe デバイス名には /dev/プレフィックスが含まれていないことに注意してください。デバイス名は、NVMeコントローラーベンダー固有の拡張子 (コントローラー識別のバイト 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 とデバイス名にマッピングできます。デフォルトでは、すべてのEBSNVMeデバイスが列挙されます。特定のデバイスの情報を列挙するには、ディスク番号を渡します。ebsnvme-id このツールは、 にある最新の AWS 提供の Windows Server AMIsに含まれていますC:\PROGRAMDATA\AMAZON\Tools

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

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

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

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

Windows インスタンス

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

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

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

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

Windows インスタンス

Windows では、デフォルトのタイムアウトは 60 秒、最大値は 255 秒です。TimeoutValue ディスククラスのレジストリ設定は、SCSI「ミニポートドライバーのレジストリエントリ」で説明されている手順を使用して変更できます。

Abort コマンド

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

以下のインスタンスタイプは、アタッチされたすべての Amazon EBSボリュームの Abort コマンドをデフォルトでサポートします: R5bR6iM6iM6a、、C6gn、、C6iX2gdX2ieznIm4gnIs4gen

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

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

詳細については、NVMExpress Base Specification「セクション 5.1 中止コマンド」を参照してください。