我有一个 Amazon Elastic Compute Cloud(Amazon EC2)Linux 实例,这个实例附加了 Amazon Elastic Block Store(Amazon EBS)卷和实例存储卷。我想确定附加的卷是实例存储卷。
简短描述
要识别 Amazon EC2 Linux 实例上的实例存储卷,请先检查该实例类型是否支持实例存储卷。如果实例支持实例存储卷,请检查其支持的实例存储卷的类型。之后,查看操作系统(OS)中的卷信息。
解决方法
- 确认您的实例支持的实例存储卷(HDD、SSD 或 NVMe SSD,如果有)的类型。检查每种受支持的实例类型可用的实例存储卷的数量、大小、类型和性能优化。
- 确定您的实例的附加卷中哪些是实例存储卷。识别方法取决于您使用的是 NVMe SSD 还是 HDD/SSD 实例存储卷。
NVMe SSD 实例存储卷
-
连接到您的实例。
-
安装 NVMe 命令行软件包 nvme-cli。使用适用于 Linux 发行版的软件包管理工具。对于 Amazon Linux 实例,使用 yum install 命令安装 nvme-cli 软件包。有关其他发行版的下载和安装说明,请参阅 nvme-cli 的 GitHub 文档或该发行版的文档。
-
以特权用户身份运行 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 实例存储卷,请从操作系统获取附加的块设备列表。然后,从实例元数据中检索块设备映射部分。
-
连接到您的实例。
-
运行 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 是否为临时驱动器。为此,请检索 block-device-mapping 元数据。使用所有实例元数据请求的基本 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