在 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
,但不再匹配。