如何识别附加到我的 Amazon EC2 Linux 实例的哪些卷是实例存储(暂存)卷?

上次更新时间:2019 年 12 月 19 日

我有一个 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例,同时具有附加在其上的 Amazon Elastic Block Store (Amazon EBS) 卷和实例存储(暂存)卷。如何识别哪些附加卷是实例存储卷?

简短描述

要识别 Amazon EC2 Linux 实例上的实例存储卷,首先检查实例类型是否支持实例存储卷。如果实例支持实例存储卷,则检查支持的实例存储卷的类型,并从操作系统 (OS) 查看卷的信息。

解决方法

1.    验证实例支持的实例存储卷类型(HDD、SSD 或 NVMe SSD,如果有)。请参阅 Amazon EC2 实例存储 – 实例存储卷以查看实例存储卷的数量、大小、类型和性能优化,这些卷可用于每个支持的实例类型。

2.    确定附加到实例的哪些卷是实例存储卷。所用的识别方法取决于您是否具有 NVMe SSD 或 HDD/SSD 实例存储卷。

NVMe SSD 实例存储卷

1.    连接到您的实例。

2.    使用 Linux 发行版的软件包管理工具安装 NVMe 命令行软件包 nvme-cli。对于 Amazon Linux 实例,使用 yum install 命令安装 nvme-cli 软件包。有关其他版本的下载和安装说明,请参阅 nvme-cli 的 GitHub 文档或特定于您的发行版的文档。

3.    以特权用户身份运行 nvme list

$ sudo nvme list

以下输出示例的模型列中列出了连接的每个设备是 Amazon Elastic Block Store 还是 Amazon EC2 NVMe 实例存储。示例输出来自支持一个 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 实例存储卷,从操作系统获取连接的块储存设备列表,然后检索包含在实例元数据中的块储存设备映射部分。

1.    连接到您的实例。

2.    运行 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

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 的块储存设备映射到 sdb,这是指向 xvdb 的符号链接。因此,在本示例中,xvdb 是一个临时设备。

或者,您可以使用以下命令集自动执行检查以显示附加到实例的临时设备。

识别操作系统块储存设备。

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/"

浏览操作系统设备并在块储存设备映射中查找映射。

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

以下是前面介绍的三个命令的示例以及示例输出。

$ 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

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?