ブロックデバイスマッピング
起動する各インスタンスには、Amazon EBS ボリュームまたはインスタンスストアボリュームという、どちらかのルートデバイスボリュームが関連付けられています。ブロックデバイスマッピングを使用すると、インスタンスの起動時にそのインスタンスにアタッチする追加の EBS ボリュームまたはインスタンスストアボリュームを指定できます。追加する EBS ボリュームは、実行中のインスタンスにアタッチすることもできます。「インスタンスへの Amazon EBS ボリュームのアタッチ」をご参照ください。ただし、インスタンスストアボリュームについては、ブロックデバイスマッピングを使用して、インスタンスの起動時にアタッチする以外方法はありません。
ルートデバイスボリュームの詳細については、「永続的ルートデバイスボリュームへの変更」を参照してください。
ブロックデバイスマッピングの概念
ブロックデバイスは、一連のバイトまたはビット (ブロック) でデータを移動するストレージデバイスです。これらのデバイスはランダムアクセスをサポートし、通常は、バッファされた I/O を使用します。たとえば、ハードディスク、CD-ROM ドライブ、フラッシュドライブなどがブロックデバイスに含まれます。ブロックデバイスは物理的にコンピュータにアタッチできます。また、コンピュータに物理的にアタッチされているかのように、リモートでアクセスすることもできます。Amazon EC2 は、2 種類のブロックデバイスをサポートしています。
-
インスタンスストアボリューム (基盤となるハードウェアがインスタンスのホストコンピュータに物理的にアタッチされている仮想デバイス)
-
EBS ボリューム (リモートストレージデバイス)
ブロックデバイスマッピングでは、インスタンスにアタッチするブロックデバイス (インスタンスストアボリュームと EBS ボリューム) を定義します。ブロックデバイスマッピングは、AMI 作成プロセスの一環として、AMI から起動されるすべてのインスタンスによって使用されるように指定できます。また、インスタンスの起動時にブロックデバイスマッピングを指定することもできます。起動したインスタンスの AMI ですでに指定されているマッピングは、このマッピングによって上書きされます。インスタンスタイプによってサポートされるすべての NVMe インスタンスストアボリュームが自動的に列挙され、インスタンスの起動時にデバイス名が割り当てられることに注意してください。それらをブロックデバイスマッピングに含めます。含めないとインスタンスは効果がありません。
ブロックデバイスマッピングのエントリ
ブロックデバイスマッピングを作成するとき、インスタンスにアタッチする必要があるブロックデバイスごとに以下の情報を指定します。
-
Amazon EC2 内で使用されるデバイス名。インスタンスのブロックデバイスドライバーは、ボリュームをマウントするときに実際のボリューム名を割り当てます。この割り当てられた名前は、Amazon EC2 が推奨する名前とは異なる可能性があります。詳細については、「Linux インスタンスでのデバイスの名前付け」を参照してください。
-
[インスタンスストアボリューム] 仮想デバイス:
ephemeral[0-23]
。インスタンスで使用できるインスタンスストアボリュームの数とサイズは、インスタンスタイプによって異なります。 -
[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
です。 -
[EBS ボリューム] ボリュームがサポートする 1 秒あたりの入力/出力オペレーションの数 (IOPS)。(
gp2
、st1
、sc1
、standard
ボリュームの場合は使用されません。)
ブロックデバイスマッピングのインスタンスストアの警告
ブロックデバイスマッピングでインスタンスストアボリュームがある場合は、インスタンスを AMI から起動すると、いくつかの警告が表示されます。
-
インスタンスタイプによって中に含まれるインスタンスストアボリューム数が異なり、インスタンスストアボリュームがまったく含まれないインスタンスタイプもあります。単一インスタンスストアボリュームのみをサポートするインスタンスタイプで、AMI が 2 つのインスタンスストアボリュームにマッピングされている場合、インスタンスは単一のインスタンスストアボリュームのみで起動します。
-
インスタンスストアボリュームをマッピングできるのは、起動時のみに限られます。インスタンスストアボリュームのないインスタンスを停止することはできません (
t2.micro
など)。インスタンスストアボリュームをサポートするインスタンスに変更し、インスタンスストアボリュームを含めて再起動します。ただし、AMI をインスタンスから作成し、インスタンスストアボリュームをサポートするインスタンスタイプで起動して、インスタンスストアボリュームをインスタンスにマッピングすることは可能です。 -
インスタンスストアボリュームをマッピングしたインスタンスを起動し、インスタンスを停止して、インスタンスストアボリュームの少ないインスタンスタイプに変更して再開すれば、最初の起動からマッピングしたインスタンスストアボリュームもインスタンスのメタデータに表示されます。ただし、インスタンスに使用できるのは、そのインスタンスタイプでサポートされているインスタンスストアボリュームの最大数までです。
注記
インスタンスが停止されると、インスタンスストアボリュームのデータはすべて失われます。
-
起動時のインスタンスストア容量によっては、M3 インスタンスが AMI インスタンスストアブロックデバイスのマッピングを (起動時に指定されていない限り) 無視します。インスタンスの起動時にインスタンスストアボリュームを使用するには、起動する AMI ボリュームに AMI でインスタンスストアボリュームがマッピングされていたとしても、起動時にインスタンスストアブロックデバイスのマッピングを指定する必要があります。
ブロックデバイスマッピングの例
この図は、EBS-backed インスタンスのブロックデバイスマッピングの例を示しています。この例では、/dev/sdb
を ephemeral0
にマッピングし、2 つの EBS ボリュームを 1 つは /dev/sdh
に、もう 1 つは /dev/sdj
にマッピングします。また、ルートデバイスボリュームである EBS ボリューム、/dev/sda1
も示しています。

このブロックデバイスマッピングの例は、このトピックのコマンドおよび API の例で使用されています。ブロックデバイスマッピングを作成するコマンドおよび API の例については、「AMI 用のブロックデバイスマッピングの指定」および「インスタンスの起動時にブロックデバイスマッピングを更新する」を参照してください。
オペレーティングシステムでデバイスを使用できるようにする方法
Amazon EC2 では、ブロックデバイスの記述に、/dev/sdh
や xvdh
などのデバイス名が使われます。また、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 に追加するには
-
Amazon EC2 コンソールを開きます。
-
ナビゲーションペインで、[インスタンス] を選択します。
-
インスタンスを選択し、[Actions]、[Image]、[Create Image] の順に選択します。
-
[Create Image] ダイアログボックスで、[Add New Volume] を選択します。
-
[Type] リストからボリュームタイプを選択し、[Device] リストからデバイス名を選択します。ボリュームの場合、オプションで、スナップショット、ボリュームサイズ、および EBS ボリュームタイプを指定できます。
-
[Create Image] を選択します。
コマンドラインを使用して AMI にボリュームを追加するには
EBS-Backed AMI のブロックデバイスマッピングを指定するには、create-image AWS CLI コマンドを使用します。Instance Store-Backed AMI のブロックデバイスマッピングを指定するには、register-image AWS CLI コマンドを使用します。
--block-device-mappings パラメータを使用してブロックデバイスマッピングを指定します。JSON でエンコードされた引数は、コマンドラインで直接指定することも、ファイルを参照して指定することもできます。
--block-device-mappings [
mapping
, ...] --block-device-mappings [file://mapping.json
]
インスタンスストアボリュームを追加するには、次のマッピングを使用します。
{ "DeviceName": "/dev/sdf", "VirtualName": "ephemeral0" }
空の 100 GiB gp2
ボリュームを追加するには、次のマッピングを使用します。
{ "DeviceName": "/dev/sdg", "Ebs": { "VolumeSize": 100 } }
スナップショットに基づいた EBS ボリュームを追加するには、次のマッピングを使用します。
{ "DeviceName": "/dev/sdh", "Ebs": { "SnapshotId": "snap-xxxxxxxx" } }
デバイスのマッピングを省略するには、次のマッピングを使用します。
{ "DeviceName": "/dev/sdj", "NoDevice": "" }
または、次のコマンド (AWS Tools for Windows PowerShell) で -BlockDeviceMapping
パラメータを使用することもできます。
AMI ブロックデバイスマッピングの EBS ボリュームの表示
AMI のブロックデバイスマッピングの EBS ボリュームを簡単に列挙できます。
コンソールを使用して AMI の EBS ボリュームを表示するには
-
Amazon EC2 コンソールを開きます。
-
ナビゲーションペインで [AMIs] を選択します。
-
[Filter] リストから [EBS images] を選択して、EBS-Backed AMI のリストを取得します。
-
ご希望の AMI を選択し、[Details] タブを確認します。少なくとも、ルートデバイスでは次の情報を使用できます。
-
ルートデバイスタイプ (
ebs
) -
[Root Device Name] (例:
/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 のブロックデバイスマッピングを上書きするか、このブロックデバイスマッピングに統合されます。
制限
-
ルートボリュームの場合、変更できるのはボリュームサイズ、ボリュームタイプ、および [合わせて削除] フラグのみです。
-
EBS ボリュームを変更する場合、そのサイズを小さくすることはできません。そのため、指定するスナップショットのサイズは、AMI のブロックデバイスマッピングで指定されたスナップショットのサイズ以上であることが必要です。
コンテンツ
インスタンスの起動時にブロックデバイスマッピングを更新する
インスタンスの起動時に、EBS ボリュームとインスタンスストアボリュームをインスタンスに追加できます。インスタンスのブロックデバイスマッピングを更新しても、そのインスタンスが起動された AMI のブロックデバイスマッピングは完全には変更されないことに注意してください。
コンソールを使用してボリュームをインスタンスに追加するには
-
Amazon EC2 コンソールを開きます。
-
ダッシュボードから、[Launch Instance] を選択します。
-
[Choose an Amazon Machine Image (AMI)] ページで、使用する AMI を選択し、[Select] を選択します。
-
ウィザードにしたがって [Choose an Instance Type] ページと [Configure Instance Details] ページを設定します。
-
[Add Storage] ページで、以下のようにルートボリューム、EBS ボリューム、およびインスタンスストアボリュームを変更できます。
-
ルートボリュームのサイズを変更するには、[Type] 列で [Root] ボリュームを見つけて、[Size] フィールドを変更します。
-
インスタンスの起動に使用された AMI のブロックデバイスマッピングで指定された EBS ボリュームを削除するには、ボリュームを見つけて、[Delete] アイコンをクリックします。
-
EBS ボリュームを追加するには、[新しいボリュームの追加] を選択し、[Type] リストから [EBS] を選択して、各フィールド ([Device]、[Snapshot] など) に入力します。
-
インスタンスの起動に使用された AMI のブロックデバイスマッピングで指定されたインスタンスストアボリュームを削除するには、ボリュームを見つけて、[Delete] アイコンを選択します。
-
インスタンスストアボリュームを追加するには、[新しいボリュームの追加] を選択し、[Type] リストから [インスタンスストア] を選択して、[Device] からデバイス名を選択します。
-
-
ウィザードの残りのページを完了した後、[起動] を選択します。
コマンドラインを使用してボリュームをインスタンスに追加するには
run-instances AWS CLI コマンドを使用して、インスタンスのブロックデバイスマッピングを指定します。
次のパラメータを使用してブロックデバイスマッピングを指定します。
--block-device-mappings [
mapping
, ...]
たとえば、EBS-backed AMI が、次のブロックデバイスマッピングを指定するとします。
-
/dev/sdb=ephemeral0
-
/dev/sdh=snap-1234567890abcdef0
-
/dev/sdj=:100
この AMI から起動したインスタンスに /dev/sdj
がアタッチされないようにするには、次のマッピングを使用します。
{ "DeviceName": "/dev/sdj", "NoDevice": "" }
/dev/sdh
のサイズを 300 GiB に増やすには、次のマッピングを指定します。デバイス名を指定することでボリュームを特定できるため、/dev/sdh
のスナップショット ID を指定する必要はありません。
{ "DeviceName": "/dev/sdh", "Ebs": { "VolumeSize": 300 } }
追加インスタンスストアボリューム /dev/sdc
をアタッチするには、次のマッピングを指定します。インスタンスタイプが複数のインスタンスストアボリュームをサポートしていない場合、このマッピングは効果がありません。
{ "DeviceName": "/dev/sdc", "VirtualName": "ephemeral1" }
または、New-EC2Instance コマンド (AWS Tools for Windows PowerShell) で -BlockDeviceMapping
パラメータを使用することもできます。
実行中のインスタンスのブロックデバイスマッピングの更新
次の modify-instance-attribute AWS CLI コマンドを使用して、実行中のインスタンスのブロックデバイスマッピングを更新できます。この属性を変更する前に、インスタンスを停止する必要はありません。
aws ec2 modify-instance-attribute --instance-id i-
1a2b3c4d
--block-device-mappings file://mapping.json
たとえば、インスタンスの削除時にルートボリュームを保持するには、mapping.json
で以下を指定します。
[ { "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": false } } ]
または、Edit-EC2InstanceAttribute コマンド (AWS Tools for Windows PowerShell) で -BlockDeviceMapping
パラメータを使用することもできます。
インスタンスブロックデバイスマッピングの EBS ボリュームの表示
インスタンスにマッピングされた EBS ボリュームを簡単に列挙できます。
注記
2009 年 10 月 31 日 API のリリース以前に起動されたインスタンスについては、AWS では、ブロックデバイスマッピングを表示できません。AWS がブロックデバイスマッピングを表示できるようにするには、ボリュームをデタッチしてから再アタッチする必要があります。
コンソールを使用してインスタンスの EBS ボリュームを表示するには
-
Amazon EC2 コンソールを開きます。
-
ナビゲーションペインで、[インスタンス] を選択します。
-
検索バーに「Root Device Type」と入力し、[EBS] を選択します。これにより、EBS-backed インスタンスのリストが表示されます。
-
目的のインスタンスを選択し、[Description] タブに表示された詳細を確認します。少なくとも、ルートデバイスでは次の情報を使用できます。
-
ルートデバイスタイプ (
ebs
) -
[Root device] (例:
/dev/sda1
) -
[Block devices] (例:
/dev/sda1
、/dev/sdh
、/dev/sdj
)
インスタンスがブロックデバイスマッピングを使用して追加の EBS ボリュームで起動された場合、[Block Devices] フィールドには、その追加のボリュームと、ルートデバイスが表示されます。(このダイアログボックスには、インスタンスストアボリュームが表示されないことに注意してください)。
-
-
ブロックデバイスの追加情報を表示するには、[ブロックデバイス] の横でそのエントリを選択します。これにより、ブロックデバイスに関する次の情報が表示されます。
-
[EBS ID] (vol-xxxxxxxx)
-
ルートデバイスタイプ (
ebs
) -
[アタッチ時刻] (yyyy-mmThh:mm:ss.ssTZD)
-
ブロックデバイスステータス (
attaching
、attached
、detaching
、detached
) -
終了時に削除 (
Yes
、No
)
-
コマンドラインを使用してインスタンスの EBS ボリュームを表示するには
describe-instances (AWS CLI) コマンドまたは Get-EC2Instance (AWS Tools for Windows PowerShell) コマンドを使用して、インスタンスのブロックデバイスマッピングで EBS ボリュームを列挙します。
インスタンスストアボリュームのインスタンスブロックデバイスマッピングの表示
インスタンスのブロックデバイスマッピングを表示した場合、EBS ボリュームのみが表示され、インスタンスストアボリュームは表示されません。ブロックデバイスマッピングで非 NVMe インスタンスストアボリュームを照会するには、インスタンスメタデータを使用します。NVMe インスタンスストアボリュームは含まれていません。
インスタンスメタデータのすべてのリクエストの基本 URI は http://169.254.169.254/latest/
です。詳細については、「インスタンスメタデータとユーザーデータ」を参照してください。
まず、実行中にインスタンスに接続します。インスタンスからこのクエリを使用して、そのブロックデバイスマッピングを取得します。
[ec2-user ~]$
curl http://169.254.169.254/latest/meta-data/block-device-mapping/
レスポンスには、インスタンスのブロックデバイスの名前が含まれます。たとえば、instance store – Backed m1.small
インスタンスの出力は次のようになります。
ami ephemeral0 root swap
ami
デバイスは、インスタンスによって判断されるルートデバイスです。インスタンスストアボリュームの名前は ephemeral[0-23]
です。swap
デバイスはページファイル用です。EBS ボリュームもマップした場合、そのボリュームは、ebs1
、ebs2
のように表示されます。
ブロックデバイスマッピングの個別のブロックデバイスの詳細を確認するには、ここで示すように、前のクエリにブロックデバイスの名前を追加します。
[ec2-user ~]$
curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
インスタンスタイプは、インスタンスに利用できるインスタンスストアボリュームの数を決定します。ブロックデバイスマッピングのインスタンスストアボリュームの数が、インスタンスに利用できるインスタンスストアボリュームの数を超える場合は、追加のボリュームは無視されます。インスタンスにインスタンスストアボリュームを表示するには、lsblk コマンド を実行します。 各インスタンスタイプがサポートするインスタンスストアボリュームの数は、「インスタンスストアボリューム」を参照してください。