我一直在 m5 EC2 实例上使用Amazon ECS AMI,我注意到有一个类似的新 m5d 实例类型,但带有 70 GB 本地 SSD。由于这些都是一次性实例,更快的半便宜 SSD 似乎是完美的,但我无法弄清楚如何实际使用这个本地存储。
我最初尝试在块设备映射中用 ephemeral0 替换 /dev/xvda 或 /dev/xvdcz 设备:
BlockDeviceMappings:
- DeviceName: /dev/xvdcz
VirtualName: ephemeral0
..但这似乎没有做任何事情(盒子上的日志说 ephemeral0 不存在),我在文档中发现:
[NVMe 实例存储卷] 这些卷被自动枚举并分配一个设备名称;将它们包含在您的块设备映射中没有任何效果。
由于 ECS AMI 使用 LVM 分区,我可能会为 /dev/xvdcz 创建一个小的 EBS 卷,然后将本地分区(在 中可见lsblk
)添加到 LVM 存储,但 NVMe 分区具有任意名称的事实使得这很难以安全的方式进行。
所以这就是我坚持的重点。如果您不能在块设备映射中使用本地存储并且设备名称是半随机的,那么您如何实际使用本地存储?亚马逊是否希望您在每次启动这些实例之一时手动登录并编辑 fstab?我觉得我一定是错过了什么。
我意识到可能有特殊规则阻止我用临时设备替换根设备,但如果它甚至不能替换数据量,我不知道我应该如何使用这个东西。
您不能将实例存储用作您的根设备。这在多年前曾经是可能的,但据我所知,新的 AMI 不再支持它。因此,您的根必须在 EBS 上,并且您必须在启动期间格式化和挂载临时设备,并将其仅用于您的临时数据、缓存文件夹、tmp 等。
不,您不应该通过 SSH 连接到实例并手动进行。而是将所需的命令放入
UserData
实例首次启动时执行的脚本中。要了解更多信息,UserData
请参阅启动时在您的 Linux 实例上运行命令更新:问题之一是实例存储设备名称不太可预测。它可能是
/dev/nvme1n1
或/dev/nvme2n1
谁知道。幸运的是,所有磁盘设备在下面也有更多描述性的别名/dev/disk/by-id/
,我们可以将它们用于我们的目的:前两行是实例存储。我不确定 the
/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 / Ephemeral / SSD 存储安装在以下位置
/local1
:此处显示的是规范设备名称
/dev/nvme1n1
,而不是/dev/disk/by-id/..
设备别名。但它仍然是同一个磁盘。希望有帮助:)