Amazon EC2 Linux インスタンスにアタッチされているボリュームのうち、どれがインスタンスストア (エフェメラル) ボリュームなのか識別するにはどうすればよいですか?
最終更新日: 2019 年 12 月 19 日
簡単な説明
Amazon EC2 Linux インスタンスのインスタンスストアボリュームを特定するには、まず、インスタンスタイプがインスタンスストアボリュームをサポートしているかどうかを確認します。インスタンスがインスタンスストアボリュームをサポートしている場合は、サポートされているインスタンスストアボリュームのタイプを確認し、オペレーティングシステム (OS) からボリュームの情報を確認します。
解決方法
1. インスタンスがサポートするインスタンスストアボリュームのタイプ (HDD、SSD、NVMe SSD) を確認します。サポートされている各インスタンスタイプで使用できるインスタンスストアボリュームの数量、サイズ、タイプ、およびパフォーマンスの最適化については、「インスタンスストアボリューム」を参照してください。
2. インスタンスに添付されたボリュームのうち、どれがインスタンスストアボリュームであるかを決定します。使用される識別方法は、NVMe SSD または HDD/SSD インスタンスストアボリュームがあるかどうかによって異なります。
NVMe SSD インスタンスストアボリューム
1. インスタンスに接続します。
2. Linux ディストリビューションのパッケージ管理ツールを使用して、NVMe コマンドラインパッケージ nvme-cli をインストールします。Amazon Linux インスタンスの場合は、yum インストールコマンドを使用して nvme-cli パッケージをインストールします。他のディストリビューションのダウンロードおよびインストールの手順については、nvme-cli の GitHub ドキュメント、またはディストリビューション固有のドキュメントをご覧ください。
3. 特権ユーザーとして nvme list コマンドを実行します。
$ sudo nvme list
次の出力例の [Model] (モデル) 列には、アタッチされた各デバイスが Amazon Elastic Block Store か Amazon EC2 NVMe インスタンスストレージかが表示されます。出力例は、1 つの NVMe SSD デバイスをサポートするインスタンスタイプからのものです。
$ sudo nvme list
Node SN Model Namespace Usage Format FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 vol0923757ba05df9515 Amazon Elastic Block Store 1 0.00 B / 8.59 GB 512 B + 0 B 1.0
/dev/nvme1n1 AWS1A4FC25FB16B79F76 Amazon EC2 NVMe Instance Storage 1 50.00 GB / 50.00 GB 512 B + 0 B 0
HDD または SSD インスタンスストアボリューム
HDD または SSD インスタンスストアボリュームの場合、OS から添付されたブロックデバイスのリストを取得し、インスタンスメタデータに含まれるブロックデバイスのマッピングセクションを取得します。
1. インスタンスに接続します。
2. lsblk コマンドを実行します。lsblk コマンドが存在しない場合は、Linux ディストリビューションのパッケージ管理ツールを使用して util-linux パッケージをインストールします。Amazon Linux インスタンスの場合は、yum インストールコマンドを使用して util-linux パッケージをインストールします。他のディストリビューションのダウンロードおよびインストールの手順については、ディストリビューション固有のドキュメントをご覧ください。
$ sudo lsblk
次の出力例は、多くのドライブがあり、SSD インスタンスストアボリュームをサポートするインスタンスタイプで実行されているインスタンスから取得されたブロックデバイスのリストを示しています。
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 745.2G 0 disk
xvdc 202:32 0 745.2G 0 disk
xvdd 202:48 0 745.2G 0 disk
xvde 202:64 0 745.2G 0 disk
3. 以前の出力例から xvdb がエフェメラルドライブであるかどうかを確認するには、すべてのインスタンスメタデータリクエストのベース URL (http://169.254.169.254/latest/meta-data/block-device-mapping) を使用してブロックデバイスにマッピングされたメタデータを取得します。
$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
sdb
$ ls -l /dev/sdb
lrwxrwxrwx 1 root root 4 Aug 27 13:07 /dev/sdb -> xvdb
前の例では、ephemeral0 のブロックデバイスマッピングが、xvdb へのシンボリックリンクである sdb へのマッピングです。したがって、この例では xvdb はエフェメラルデバイスです。
または、次のコマンドセットを使用して、インスタンスにアタッチされたエフェメラルデバイスを表示するチェックを自動化できます。
OS ブロックデバイスを特定します。
OSDEVICE=$(sudo lsblk -o NAME -n | grep -v '[[:digit:]]' | sed "s/^sd/xvd/g")
ブロックデバイスマッピング URL を設定します。
BDMURL="http://169.254.169.254/latest/meta-data/block-device-mapping/"
OS デバイスをループし、ブロックデバイスマッピングでマッピングを見つけます。
for bd in $(curl -s ${BDMURL}); do MAPDEVICE=$(curl -s ${BDMURL}/${bd}/ | sed "s/^sd/xvd/g"); if grep -wq ${MAPDEVICE} <<< "${OSDEVICE}"; then echo "${bd} is ${MAPDEVICE}"; fi; done | grep ephemeral
前述の 3 つのコマンドの例と、出力例を以下に示します。
$ OSDEVICE=$(sudo lsblk -o NAME -n | grep -v '[[:digit:]]' | sed "s/^sd/xvd/g")
$ BDMURL="http://169.254.169.254/latest/meta-data/block-device-mapping/"
$ for bd in $(curl -s ${BDMURL}); do MAPDEVICE=$(curl -s ${BDMURL}/${bd}/ | sed "s/^sd/xvd/g"); if grep -wq ${MAPDEVICE} <<< "${OSDEVICE}"; then echo "${bd} is ${MAPDEVICE}"; fi; done | grep ephemeral
ephemeral0 is xvdb
ephemeral1 is xvdc
ephemeral2 is xvdd
ephemeral3 is xvde