如何可靠地获取 EC2 实例存储的块设备名称?

如何可靠地获取 EC2 实例存储的块设备名称?

在 AWS EC2 实例上运行 CentOS,我想编写一个启动脚本来格式化和挂载 NVMe 实例存储。到目前为止,每次我重新启动时,EBS 启动驱动器都是/dev/nvme0n1,临时实例存储都是/dev/nvme1n1。但根据本文档,这听起来好像没有保证。我如何才能可靠地获取实例存储块设备的名称,以免错误地格式化启动驱动器?

我尝试使用 curl 获取实例元数据,但sda1即使/dev/sda1不存在,此命令也会返回。不确定这是什么意思。

curl http://169.254.169.254/latest/meta-data/block-device-mapping/ami/

答案1

一个解决方案是调查/dev/disk/by-id/

例如,下面将第一个本地块设备添加为交换(如果有的话):

for DEVICE in /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage*; do
  if [ -e $DEVICE ]; then 
    mkswap $DEVICE; 
    swapon $DEVICE; 
    break; 
  fi;
done

(在 CentOS 8 和 Ubuntu 18.04 上测试。)

我没有找到任何官方文档,但它是根据博客中的代码改编的https://aws.amazon.com/de/blogs/containers/optimizing-spark-performance-on-kubernetes/。那里使用了略有不同的模式/dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_*-ns-1,但不再匹配。

相关内容