Bre*_*ong 3 amazon-ec2 amazon-web-services
我一直在 m5 EC2 实例上使用Amazon ECS AMI,我注意到有一个新的 m5d 实例类型,它类似但带有 70 GB 本地 SSD。由于这些是一次性实例,更快的半廉价 SSD 看起来很完美,但我不知道如何实际使用这个本地存储。
我最初尝试在块设备映射中用 ephemeral0 替换 /dev/xvda 或 /dev/xvdcz 设备:
BlockDeviceMappings:
- DeviceName: /dev/xvdcz
VirtualName: ephemeral0
Run Code Online (Sandbox Code Playgroud)
.. 但这似乎没有做任何事情(盒子上的日志说一些关于 ephemeral0 不存在的信息),我在文档中发现:
【NVMe 实例存储卷】这些卷被自动枚举并分配一个设备名称;将它们包含在您的块设备映射中无效。
由于ECS AMI使用一个LVM分区,我可能会创建一个小的EBS卷的/ dev / xvdcz然后添加本地分区(这是可见的lsblk
)的LVM商店,但事实上,NVMe分区具有任意名称,使这个很难以安全的方式进行。
所以这就是我坚持的重点。如果您不能在块设备映射中使用本地存储并且设备名称是半随机的,那么您实际上如何使用本地存储?亚马逊是否希望您在每次启动这些实例之一时手动登录并编辑 fstab?我觉得我一定错过了什么。
我意识到可能有特殊规则阻止我用临时设备替换根设备,但是如果它甚至不能替换数据量,我不知道我应该如何使用它。
您不能将实例存储用作根设备。多年前这曾经是可能的,但据我所知,新的 AMI 不再支持它。所以你的根必须在 EBS 上,你必须在启动期间格式化和挂载临时设备,并且只将它用于你的临时数据、缓存文件夹、tmp 等。
不,您不需要通过 SSH 连接到实例并手动执行此操作。而是将所需的命令放入UserData
实例第一次启动时执行的脚本中。要了解有关UserData
参考在启动时在 Linux 实例上运行命令的更多信息
更新:问题之一是实例存储设备名称不太可预测。它可能是/dev/nvme1n1
或/dev/nvme2n1
或谁知道什么。幸运的是,所有磁盘设备也有更多的描述性别名/dev/disk/by-id/
,我们可以将它们用于我们的目的:
[ec2-user@ip-172-31-10-228 ~]$ ls -l /dev/disk/by-id/
nvme-Amazon_EC2_NVMe_Instance_Storage_AWS12B74F473B3456789 << instance storage
nvme-Amazon_EC2_NVMe_Instance_Storage_AWS12B74F473B3456789-ns-1 << instance storage
nvme-Amazon_Elastic_Block_Store_vol0199d8c18d345678a
nvme-Amazon_Elastic_Block_Store_vol0199d8c18d345678a-...
...
Run Code Online (Sandbox Code Playgroud)
前两行是实例存储。我不确定别名/dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS12B74F473B3456789
和...-ns-1
别名之间有什么区别,它们指的是同一个块设备,因此我们可以使用它们中的任何一个。
我们现在需要做的就是/dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_...
在引导期间找到实际的设备名称,对其进行格式化、添加/etc/fstab
和挂载。注意:我们将其添加到,/etc/fstab
以便在重启后再次挂载。
现在我们把所有的部分放在一个 Cloud Formation 模板中。应该做的事情:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
[...]
UserData:
Fn::Base64: |
#!/bin/bash -x
IDX=1
for DEV in /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_*-ns-1; do
mkfs.xfs ${DEV}
mkdir -p /local${IDX}
echo ${DEV} /local${IDX} xfs defaults,noatime 1 2 >> /etc/fstab
IDX=$((${IDX} + 1))
done
mount -a
Run Code Online (Sandbox Code Playgroud)
创建并启动实例后,您应该将实例 / 临时 / SSD 存储安装在/local1
:
[ec2-user@ip-172-31-10-228 ~]$ mount | grep /local1
/dev/nvme1n1 on /local1 type xfs (rw,noatime,attr2,inode64,noquota)
Run Code Online (Sandbox Code Playgroud)
此处/dev/nvme1n1
显示的是规范设备名称,而不是/dev/disk/by-id/..
设备别名。但它仍然是同一个磁盘。
希望有帮助:)
归档时间: |
|
查看次数: |
885 次 |
最近记录: |