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

ブロックデバイスマッピング

起動する各インスタンスには、Amazon EBS ボリュームまたはインスタンスストアボリュームという、どちらかのルートデバイスボリュームが関連付けられています。ブロックデバイスマッピングを使用すると、インスタンスの起動時にそのインスタンスにアタッチする追加の EBS ボリュームまたはインスタンスストアボリュームを指定できます。追加する EBS ボリュームは、実行中のインスタンスにアタッチすることもできます。「インスタンスへの Amazon EBS ボリュームのアタッチ」をご参照ください。ただし、インスタンスストアボリュームについては、ブロックデバイスマッピングを使用して、インスタンスの起動時にアタッチする以外方法はありません。

ルートデバイスボリュームの詳細については、「永続的ルートデバイスボリュームへの変更」を参照してください。

ブロックデバイスマッピングの概念

ブロックデバイスは、一連のバイトまたはビット (ブロック) でデータを移動するストレージデバイスです。これらのデバイスはランダムアクセスをサポートし、通常は、バッファされた I/O を使用します。たとえば、ハードディスク、CD-ROM ドライブ、フラッシュドライブなどがブロックデバイスに含まれます。ブロックデバイスは物理的にコンピュータにアタッチできます。また、コンピュータに物理的にアタッチされているかのように、リモートでアクセスすることもできます。Amazon EC2 は、2 種類のブロックデバイスをサポートしています。

  • インスタンスストアボリューム (基盤となるハードウェアがインスタンスのホストコンピュータに物理的にアタッチされている仮想デバイス)

  • EBS ボリューム (リモートストレージデバイス)

ブロックデバイスマッピングでは、インスタンスにアタッチするブロックデバイス (インスタンスストアボリュームと EBS ボリューム) を定義します。ブロックデバイスマッピングは、AMI 作成プロセスの一環として、AMI から起動されるすべてのインスタンスによって使用されるように指定できます。また、インスタンスの起動時にブロックデバイスマッピングを指定することもできます。起動したインスタンスの AMI ですでに指定されているマッピングは、このマッピングによって上書きされます。インスタンスタイプによってサポートされるすべての NVMe インスタンスストアボリュームが、インスタンスの起動時に自動的に追加されます。AMI またはインスタンスのブロックデバイスマッピングに手動でボリュームを追加する必要はありません。

ブロックデバイスマッピングのエントリ

ブロックデバイスマッピングを作成するとき、インスタンスにアタッチする必要があるブロックデバイスごとに以下の情報を指定します。

  • Amazon EC2 内で使用されるデバイス名。インスタンスのブロックデバイスドライバは、ボリュームのマウント時に実際のボリューム名を割り当てますが、この割り当てられた名前は、Amazon EC2 が推奨する名前とは異なる可能性があります。詳細については、「Linux インスタンスでのデバイスの名前付け」を参照してください。

  • [インスタンスストアボリューム] 仮想デバイス: ephemeral[0-23]。インスタンスで使用できるインスタンスストアボリュームの数とサイズは、インスタンスタイプによって異なります。

  • [NVMe インスタンスストアボリューム] これらのボリュームは /dev/nvme[0-7]n1 として自動的にマッピングされます。ブロックデバイスマッピングで、インスタンスタイプによってサポートされている NVMe ボリュームを指定する必要はありません。

  • [EBS ボリューム] ブロックデバイスを作成するときに使用するスナップショットの ID (snap-xxxxxxxx)。ボリュームサイズを指定する場合、この値はオプションです。

  • [EBS ボリューム] ボリュームのサイズ (GiB 単位)。指定されたサイズは、指定されたスナップショットのサイズ以上である必要があります。

  • [EBS ボリューム] インスタンス終了時にボリュームを削除するかどうか (true または false)。デフォルト値は、ルートデバイスボリュームでは true、アタッチされたボリュームでは false です。AMI を作成するときは、そのブロックデバイスマッピングがインスタンスからこの設定を継承します。インスタンスを起動するときに、AMI からこの設定を継承します。

  • [EBS ボリューム] ボリュームタイプとして、gp2 (汎用 SSD)、io1 (プロビジョンド IOPS SSD)、st1 (スループット最適化 HDD)、sc1 (Cold HDD)、または standard (マグネティック) を指定します。デフォルト値は、gp2 (Amazon EC2 コンソールの場合) または standard (AWS SDK および AWS CLI の場合) です。

  • [EBS ボリューム] ボリュームがサポートする 1 秒あたりの入力/出力オペレーションの数 (IOPS)。(gp2st1sc1standard ボリュームの場合は使用されません。)

ブロックデバイスマッピングのインスタンスストアの警告

ブロックデバイスマッピングでインスタンスストアボリュームがある場合は、インスタンスを AMI から起動すると、いくつかの警告が表示されます。

  • インスタンスタイプによって中に含まれるインスタンスストアボリューム数が異なり、インスタンスストアボリュームがまったく含まれないインスタンスタイプもあります。単一インスタンスストアボリュームのみをサポートするインスタンスタイプで、AMI が 2 つのインスタンスストアボリュームにマッピングされている場合、インスタンスは単一のインスタンスストアボリュームのみで起動します。

  • インスタンスストアボリュームをマッピングできるのは、起動時のみに限られます。インスタンスストアボリュームのないインスタンスを停止することはできません (t2.micro など)。インスタンスストアボリュームをサポートするインスタンスに変更し、インスタンスストアボリュームを含めて再起動します。ただし、AMI をインスタンスから作成し、インスタンスストアボリュームをサポートするインスタンスタイプで起動して、インスタンスストアボリュームをインスタンスにマッピングすることは可能です。

  • インスタンスストアボリュームをマッピングしたインスタンスを起動し、インスタンスを停止して、インスタンスストアボリュームの少ないインスタンスタイプに変更して再開すれば、最初の起動からマッピングしたインスタンスストアボリュームもインスタンスのメタデータに表示されます。ただし、インスタンスに使用できるのは、そのインスタンスタイプでサポートされているインスタンスストアボリュームの最大数までです。

    注記

    インスタンスが停止されると、インスタンスストアボリュームのデータはすべて失われます。

  • 起動時のインスタンスストア容量によっては、M3 インスタンスが AMI インスタンスストアブロックデバイスのマッピングを (起動時に指定されていない限り) 無視します。インスタンスの起動時にインスタンスストアボリュームを使用するには、起動する AMI ボリュームに AMI でインスタンスストアボリュームがマッピングされていたとしても、起動時にインスタンスストアブロックデバイスのマッピングを指定する必要があります。

ブロックデバイスマッピングの例

この図は、 EBS-backed インスタンスのブロックデバイスマッピングの例を示しています。この例では、/dev/sdbephemeral0 にマッピングし、2 つの EBS ボリュームを 1 つは /dev/sdh に、もう 1 つは /dev/sdj にマッピングします。また、ルートデバイスボリュームである EBS ボリューム、/dev/sda1 も示しています。

 インスタンス、インスタンスストアボリューム、および EBS ボリュームの間の関係。

このブロックデバイスマッピングの例は、このトピックのコマンドおよび API の例で使用されています。ブロックデバイスマッピングを作成するコマンドおよび API の例については、「AMI 用のブロックデバイスマッピングの指定」および「インスタンスの起動時にブロックデバイスマッピングを更新する」を参照してください。

オペレーティングシステムでデバイスを使用できるようにする方法

Amazon EC2 では、ブロックデバイスの記述に、/dev/sdhxvdh などのデバイス名が使われます。また、Amazon EC2 では、EC2 インスタンスにアタッチするブロックデバイスを、ブロックデバイスマッピングで指定します。ストレージデバイスにアクセスするには、インスタンスにアタッチしたブロックデバイスが、オペレーティングシステムによって事前にマウントされていなければなりません。ブロックデバイスがインスタンスからデタッチされると、そのデバイスはオペレーティングシステムによってアンマウントされ、ストレージデバイスにアクセスできなくなります。

Linux インスタンスの場合、ブロックデバイスマッピングで指定されたデバイス名は、インスタンスの初回起動時に対応するブロックデバイスにマッピングされます。デフォルトでフォーマットおよびマウントされるインスタンスストアボリュームは、インスタンスタイプによって決まります。インスタンスタイプで使用できるインスタンスストアボリューム数を超えていない場合は、起動時に追加のインスタンスストアボリュームをマウントできます。詳細については、「Amazon EC2 インスタンスストア」を参照してください。ボリュームがフォーマットおよびマウントされるときに使用されるデバイスは、インスタンスのブロックデバイスドライバによって決まります。詳細については、「インスタンスへの Amazon EBS ボリュームのアタッチ」を参照してください。

AMI ブロックデバイスマッピング

各 AMI にブロックデバイスマッピングがあります。このブロックデバイスマッピングは、AMI からのインスタンスの起動時にそのインスタンスにアタッチするブロックデバイスを指定します。Amazon が提供する AMI には、ルートデバイスのみが含まれます。追加のブロックデバイスを AMI に追加するには、独自の AMI を作成する必要があります。

AMI 用のブロックデバイスマッピングの指定

AMI を作成する場合に、ルートボリュームに加えて、ボリュームを指定するには、2 つの方法があります。インスタンスから AMI を作成する前に、実行中のインスタンスにすでにボリュームをアタッチしている場合、AMI のブロックデバイスマッピングにそれらの同じボリュームが含まれます。EBS ボリュームの場合、既存のデータが新しいスナップショットに保存され、それがブロックデバイスマッピングで指定される新しいスナップショットになります。インスタンスストアボリュームの場合、データは維持されません。

EBS-backed AMI の場合、ブロックデバイスマッピングを使用して、EBS ボリュームとインスタンスストアボリュームを追加できます。instance store-backed AMI の場合、イメージの登録時にイメージマニフェストファイルでブロックデバイスマッピングエントリを変更して、インスタンスストアボリュームのみを追加できます。

注記

M3 インスタンスの場合、インスタンスのブロックデバイスマッピングで起動時にインスタンスストアボリュームを指定する必要があります。AMI のブロックデバイスマッピングで指定したインスタンスストアボリュームは、インスタンスブロックデバイスマッピングの一部として指定されていない場合、M3 インスタンスを起動した際に無視される可能性があります。

コンソールを使用してボリュームを AMI に追加するには

  1. Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. インスタンスを選択し、[Actions]、[Image]、[Create Image] の順に選択します。

  4. [Create Image] ダイアログボックスで、[Add New Volume] を選択します。

  5. [Type] リストからボリュームタイプを選択し、[Device] リストからデバイス名を選択します。 ボリュームの場合、オプションで、スナップショット、ボリュームサイズ、および EBS ボリュームタイプを指定できます。

  6. [Create Image] を選択します。

コマンドラインを使用して AMI にボリュームを追加するには

EBS-Backed AMI のブロックデバイスマッピングを指定するには、-create-image AWS CLI コマンドを使用します。Instance Store-Backed AMI のブロックデバイスマッピングを指定するには、register-image AWS CLI コマンドを使用します。

次のパラメータを使用してブロックデバイスマッピングを指定します。

Copy
--block-device-mappings [mapping, ...]

インスタンスストアボリュームを追加するには、次のマッピングを使用します。

Copy
{ "DeviceName": "/dev/sdf", "VirtualName": "ephemeral0" }

空の 100 GiB マグネティック ボリュームを追加するには、次のマッピングを使用します。

Copy
{ "DeviceName": "/dev/sdg", "Ebs": { "VolumeSize": 100 } }

スナップショットに基づいた EBS ボリュームを追加するには、次のマッピングを使用します。

Copy
{ "DeviceName": "/dev/sdh", "Ebs": { "SnapshotId": "snap-xxxxxxxx" } }

デバイスのマッピングを省略するには、次のマッピングを使用します。

Copy
{ "DeviceName": "/dev/sdj", "NoDevice": "" }

または、次のコマンド (AWS Tools for Windows PowerShell) で -BlockDeviceMapping パラメータを使用することもできます。

AMI ブロックデバイスマッピングの EBS ボリュームの表示

AMI のブロックデバイスマッピングの EBS ボリュームを簡単に列挙できます。

コンソールを使用して AMI の EBS ボリュームを表示するには

  1. Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで [AMIs] を選択します。

  3. [Filter] リストから [EBS images] を選択して、EBS-Backed AMI のリストを取得します。

  4. ご希望の AMI を選択し、[Details] タブを確認します。少なくとも、ルートデバイスでは次の情報を使用できます。

    • ルートデバイスタイプ (ebs)

    • [Root Device] (/dev/sda1 など)

    • [Block Devices] (/dev/sda1=snap-1234567890abcdef0:8:true など)

    AMI がブロックデバイスマッピングを使用して追加の EBS ボリュームで作成された場合、[Block Devices] フィールドには、その追加の EBS ボリュームのマッピングも表示されます (この画面には、インスタンスストアボリュームは表示されません)。

コマンドラインを使用して AMI の EBS ボリュームを表示するには

describe-images (AWS CLI) コマンドまたは Get-EC2Image (AWS Tools for Windows PowerShell) コマンドを使用して、AMI のブロックデバイスマッピング内の EBS ボリュームを列挙します。

インスタンスブロックデバイスマッピング

デフォルトでは、起動するインスタンスには、そのインスタンスを起動した AMI のブロックデバイスマッピングで指定されたストレージデバイスが含まれます。インスタンスを起動するときに、インスタンスのブロックデバイスマッピングへの変更を指定できます。この変更は AMI のブロックデバイスマッピングを上書きするか、このブロックデバイスマッピングに統合されます。ただし、

制限

  • ルートボリュームの場合、変更できるのはボリュームサイズ、ボリュームタイプ、および [Delete on Termination] フラグのみです。

  • EBS ボリュームを変更する場合、そのサイズを小さくすることはできません。そのため、指定するスナップショットのサイズは、AMI のブロックデバイスマッピングで指定されたスナップショットのサイズ以上であることが必要です。

インスタンスの起動時にブロックデバイスマッピングを更新する

インスタンスの起動時に、EBS ボリュームとインスタンスストアボリュームをインスタンスに追加できます。インスタンスのブロックデバイスマッピングを更新しても、そのインスタンスが起動された AMI のブロックデバイスマッピングは完全には変更されないことに注意してください。

コンソールを使用してボリュームをインスタンスに追加するには

  1. Amazon EC2 コンソールを開きます。

  2. ダッシュボードから、[Launch Instance] を選択します。

  3. [Choose an Amazon Machine Image (AMI)] ページで、使用する AMI を選択し、[Select] を選択します。

  4. ウィザードにしたがって [Choose an Instance Type] ページと [Configure Instance Details] ページを設定します。

  5. [Add Storage] ページで、以下のようにルートボリューム、EBS ボリューム、およびインスタンスストアボリュームを変更できます。

    • ルートボリュームのサイズを変更するには、[Type] 列で [Root] ボリュームを見つけて、[Size] フィールドを変更します。

    • インスタンスの起動に使用された AMI のブロックデバイスマッピングで指定された EBS ボリュームを削除するには、ボリュームを見つけて、[Delete] アイコンをクリックします。

    • EBS ボリュームを追加するには、[Add New Volume] を選択し、[Type] リストから [EBS] を選択して、各フィールド ([Device]、[Snapshot] など) に入力します。

    • インスタンスの起動に使用された AMI のブロックデバイスマッピングで指定されたインスタンスストアボリュームを削除するには、ボリュームを見つけて、[Delete] アイコンを選択します。

    • インスタンスストアボリュームを追加するには、[Add New Volume] を選択し、[Type] リストから [Instance Store] を選択して、[Device] からデバイス名を選択します。

  6. ウィザードの残りのページを完了した後、[Launch ] を選択します。

コマンドラインを使用してボリュームをインスタンスに追加するには

run-instances AWS CLI コマンドを使用して、インスタンスのブロックデバイスマッピングを指定します。

次のパラメータを使用してブロックデバイスマッピングを指定します。

Copy
--block-device-mappings [mapping, ...]

たとえば、EBS-backed AMI が、次のブロックデバイスマッピングを指定するとします。

  • /dev/sdb=ephemeral0

  • /dev/sdh=snap-1234567890abcdef0

  • /dev/sdj=:100

この AMI から起動したインスタンスに /dev/sdj がアタッチされないようにするには、次のマッピングを使用します。

Copy
{ "DeviceName": "/dev/sdj", "NoDevice": "" }

/dev/sdh のサイズを 300 GiB に増やすには、次のマッピングを指定します。デバイス名を指定することでボリュームを特定できるので、/dev/sdh のスナップショット ID を指定する必要はありません。

Copy
{ "DeviceName": "/dev/sdh", "Ebs": { "VolumeSize": 300 } }

追加インスタンスストアボリューム /dev/sdc をアタッチするには、次のマッピングを指定します。インスタンスタイプが複数のインスタンスストアボリュームをサポートしていない場合、このマッピングは効果がありません。

Copy
{ "DeviceName": "/dev/sdc", "VirtualName": "ephemeral1" }

または、New-EC2Instance コマンド (AWS Tools for Windows PowerShell) で -BlockDeviceMapping パラメータを使用することもできます。

実行中のインスタンスのブロックデバイスマッピングの更新

次の modify-instance-attribute AWS CLI コマンドを使用して、実行中のインスタンスのブロックデバイスマッピングを更新できます。この属性を変更する前に、インスタンスを停止する必要はありません。

Copy
$ aws ec2 modify-instance-attribute --instance-id i-1a2b3c4d --block-device-mappings file://mapping.json

たとえば、インスタンスの終了時にルートボリュームを保持するには、mapping.json で以下を指定します。

Copy
[ { "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": false } } ]

または、Edit-EC2InstanceAttribute コマンド (AWS Tools for Windows PowerShell) で -BlockDeviceMapping パラメータを使用することもできます。

インスタンスブロックデバイスマッピングの EBS ボリュームの表示

インスタンスにマッピングされた EBS ボリュームを簡単に列挙できます。

注記

2009 年 10 月 31 日 API のリリース以前に起動されたインスタンスについては、AWS では、ブロックデバイスマッピングを表示できません。AWS がブロックデバイスマッピングを表示できるようにするには、ボリュームをデタッチしてから再アタッチする必要があります。

コンソールを使用してインスタンスの EBS ボリュームを表示するには

  1. Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. 検索バーで、「Root Device Type」と入力し、[EBS] を選択します。これにより、 EBS-backed インスタンスのリストが表示されます。

  4. 目的のインスタンスを選択し、[Description] タブに表示された詳細を確認します。少なくとも、ルートデバイスでは次の情報を使用できます。

    • ルートデバイスタイプ (ebs)

    • ルートデバイス (例: /dev/sda1 など)

    • ブロックデバイス (例: /dev/sda1/dev/sdh/dev/sdj)

    インスタンスがブロックデバイスマッピングを使用して追加の EBS ボリュームで起動された場合、[Block Devices] フィールドには、その追加のボリュームと、ルートデバイスが表示されます。 (このダイアログボックスには、インスタンスストアボリュームが表示されないことに注意してください)。

     インスタンスのブロックデバイス。
  5. ブロックデバイスの追加情報を表示するには、[Block devices] の横でそのエントリを選択します。これにより、ブロックデバイスに関する次の情報が表示されます。

    • [EBS ID] (vol-xxxxxxxx)

    • ルートデバイスタイプ (ebs)

    • [Attachment time] (yyyy-mmThh:mm:ss.ssTZD)

    • ブロックデバイスステータス (attaching, attached, detaching, detached)

    • 終了時に削除 (YesNo)

コマンドラインを使用してインスタンスの EBS ボリュームを表示するには

describe-instances (AWS CLI) コマンドまたは Get-EC2Instance (AWS Tools for Windows PowerShell) コマンドを使用して、インスタンスのブロックデバイスマッピングで EBS ボリュームを列挙します。

インスタンスストアボリュームのインスタンスブロックデバイスマッピングの表示

インスタンスのブロックデバイスマッピングを表示した場合、EBS ボリュームのみが表示され、インスタンスストアボリュームは表示されません。インスタンスメタデータを使用すると、完全なブロックデバイスマッピングに対してクエリを実行できます。インスタンスメタデータのすべてのリクエストの基本 URI は http://169.254.169.254/latest/ です。

まず、実行中にインスタンスに接続します。

実行中のインスタンスでこのクエリを使用し、そのブロックデバイスマッピングを取得します。

Copy
$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/

レスポンスには、インスタンスのブロックデバイスの名前が含まれます。たとえば、instance store-Backed m1.small インスタンスの出力は次のようになります。

Copy
ami ephemeral0 root swap

ami デバイスは、インスタンスによって判断されるルートデバイスです。インスタンスストアボリュームの名前は ephemeral[0-23] です。swap デバイスはページファイル用です。EBS ボリュームもマップした場合、そのボリュームは、ebs1、ebs2 のように表示されます。

ブロックデバイスマッピングの個別のブロックデバイスの詳細を確認するには、ここで示すように、前のクエリにブロックデバイスの名前を追加します。

Copy
$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0

詳細については、「インスタンスメタデータとユーザーデータ」を参照してください。