Amazon Elastic Block Store (Amazon EBS) ボリュームとインスタンスストアボリュームがアタッチされた Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスがあります。インスタンスストアボリュームであるアタッチされたボリュームを特定したいと考えています。
簡単な説明
Amazon EC2 Linux インスタンスのインスタンスストアボリュームを識別するには、まずインスタンスタイプがインスタンスストアボリュームをサポートしているかどうかを確認します。インスタンスがインスタンスストアボリュームをサポートしている場合は、サポートされているインスタンスストアボリュームのタイプを確認し、次にオペレーティングシステム (OS) からのボリュームの情報を確認します。
解決策
- インスタンスがサポートしているインスタンスストアボリュームのタイプ (HDD、SSD、または NVMe SSD) を確認します。サポートされている各インスタンスタイプで利用できるインスタンスストアボリュームの数量、サイズ、タイプ、パフォーマンスの最適化を確認します。
- インスタンスにアタッチされているボリュームのどれがインスタンスストアボリュームであるかを判断します。識別方法は、NVMe SSD と HDD/SSD のインスタンスストアボリュームのどちらを使用しているかによって異なります。
NVMe SSD インスタンスストアボリューム
-
インスタンスに接続します。
-
NVMe コマンドラインパッケージ nvme-cli をインストールします。これには、お使いの Linux ディストリビューションのパッケージ管理ツールを使用してください。Amazon Linux インスタンスの場合は、yum コマンドを使用して nvme-cli パッケージをインストールします。他のディストリビューションのダウンロードとインストールの手順については、nvme-cli の GitHub ドキュメントを参照するか、ご使用のディストリビューション固有のドキュメントを参照してください。
-
[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 インスタンスストアボリュームの場合は、接続されているブロックデバイスのリストをオペレーティングシステムから取得します。次に、インスタンスメタデータに含まれるブロックデバイスマッピングセクションを取得します。
-
インスタンスに接続します。
-
lsblk コマンドを実行します。lsblk コマンドがない場合は、Linux ディストリビューションのパッケージ管理ツールを使用して util-linux パッケージをインストールします。Amazon Linux インスタンスの場合は、yum install コマンドを使用して 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
-
前の出力例の**[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] のブロックデバイスマッピングは**[sdb]**向けであり、これは [xvdb] へのシンボリックリンクです。したがって、この例では [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