AWS CLIでNVMe利用インスタンスから外部EBSボリュームをマウントする方法

AWSのEC2インスタンスでは最近高速SSDのNVMeを採用しているインスタンスタイプがある。

NVM Express (NVMe) もしくは NVMHCI (Non-Volatile Memory Host Controller Interface) は、PCI Express (PCIe) を通じて、不揮発性ストレージメディアを接続するための論理デバイスインターフェースの規格であり、シリアルATAに代わる次世代の接続インターフェース規格である。

引用元 :https://ja.wikipedia.org/wiki/NVM_Express

これを利用しているインスタンスでは下記のように/dev/nvme0n1p1のようなデバイスになっており、従来通りにAWS CLIで自動マウントしようとすると失敗する。

# NVMe
udev            1.9G     0  1.9G   0% /dev
tmpfs           390M  5.7M  384M   2% /run
/dev/nvme0n1p1   97G  8.4G   89G   9% /
# 昔ながらのデバイス
Filesystem      Size  Used Avail Use% Mounted on      
udev            288M     0  288M   0% /dev           
tmpfs            59M  2.3M   57M   4% /run                                                               
/dev/xvda1       97G  8.3G   89G   9% /   

AWS CLIではまず xvdbをAttachし、利用できるようになるのを待ち、マウントする。

while :; do
    aws ec2 wait volume-available --volume-ids $VOLUME_ID && break
done;
aws ec2 attach-volume --volume-id $VOLUME_ID --instance-id $me --device /dev/xvdb
aws ec2 wait volume-in-use --volume-ids $VOLUME_ID

until [ -e /dev/nvme1n1 ]; do
  sleep 1
done
mount /dev/nvme1n1 /mnt

昔ながらとNVMeをサポートするコマンドは、下記のような感じ。


while :; do
    aws ec2 wait volume-available --volume-ids $VOLUME_ID && break
done;
aws ec2 attach-volume --volume-id $VOLUME_ID --instance-id $me --device /dev/xvdb
aws ec2 wait volume-in-use --volume-ids $VOLUME_ID

lsblk | grep nvme
if [ $? = 0 ]; then
  until [ -e /dev/nvme1n1 ]; do
      sleep 1
  done
  mount /dev/nvme1n1 /mnt
else
  until [ -e /dev/xvdb ]; do
      sleep 1
  done
  mount /dev/xvdb /mnt
fi

Related Posts