How do I identify which volumes attached to my Amazon EC2 Linux instance are instance store (ephemeral) volumes?

Last updated: 2019-12-19

I have an Amazon Elastic Compute Cloud (Amazon EC2) Linux instance with both Amazon Elastic Block Store (Amazon EBS) volumes and instance store (ephemeral) volumes attached to it. How do I identify which of my attached volumes are instance store volumes?

Short Description

To identify instance store volumes on Amazon EC2 Linux instances, first check if the instance type supports instance store volumes. If the instance supports instance store volumes, then check the type of instance store volumes that are supported and review the volume's information from the operating system (OS).

Resolution

1.    Verify what type of instance store volume (HDD, SSD, or NVMe SSD), if any, that your instance supports. See Amazon EC2 Instance Store - Instance Store Volumes to view the quantity, size, type, and performance optimizations of instance store volumes that are available for each supported instance type.

2.    Determine which volumes attached to your instance are instance store volumes. The identification method that is used depends on whether you have NVMe SSD or HDD/SSD instance store volumes.

NVMe SSD instance store volumes

1.    Connect to your instance.

2.    Install the NVMe command line package, nvme-cli, using the package management tools for your Linux distribution. For Amazon Linux instances, install the nvme-cli package using the yum install command. For download and installation instructions for other distributions, see the GitHub documentation for nvme-cli or see the documentation specific to your distribution.

3.    Run the nvme list command as a privileged user.

$ sudo nvme list

The Model column in the following output example lists whether each attached device is Amazon Elastic Block Store or Amazon EC2 NVMe Instance Storage. The example output is from an instance type that supports one NVMe SSD device.

$ 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 or SSD instance store volumes

For HDD or SSD instance store volumes, get the list of attached block devices from the OS, and then retrieve the block device mapping section that is contained in the instance metadata.

1.    Connect to your instance.

2.    Run the lsblk command. If the lsblk command isn't present, then install the util-linux package using the package management tools for your Linux distribution. For Amazon Linux instances, install the util-linux package using the yum install command. For download and installation instructions for other distributions, refer to the documentation specific to your distribution.

$ sudo lsblk

The following output example shows the list of block devices that are retrieved from an instance that has many drives and that is running on an instance type that supports SSD instance store volumes.

$ 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.    To identify if xvdb, from the previous example output, is an ephemeral drive, retrieve the block-device-mapping metadata using the base URL for all instance metadata requests: 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

In the previous example, the block device mapping for ephemeral0 is to sdb, which is a symbolic link to xvdb. So in this example, the xvdb is an ephemeral device.

Or, you can automate the check to display the ephemeral devices attached to your instance by using the following set of commands.

Identify the OS block devices.

OSDEVICE=$(sudo lsblk -o NAME -n | grep -v '[[:digit:]]' | sed "s/^sd/xvd/g")

Set the block device mapping URL.

BDMURL="http://169.254.169.254/latest/meta-data/block-device-mapping/"

Loop through OS devices and find the mapping in the 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

The following is an example of the three commands described previously, along with example output.

$ 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

Did this article help you?

Anything we could improve?


Need more help?