可以使用m5d的本地SSD作为根设备吗?

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?我觉得我一定错过了什么。

我意识到可能有特殊规则阻止我用临时设备替换根设备,但是如果它甚至不能替换数据量,我不知道我应该如何使用它。

MLu*_*MLu 7

您不能将实例存储用作根设备。多年前这曾经是可能的,但据我所知,新的 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/..设备别名。但它仍然是同一个磁盘。

希望有帮助:)