在 AWS EC2 上挂载 NVME 磁盘
Mounting a NVME disk on AWS EC2
所以我在每个节点上使用 NVME 磁盘创建了 i3.large,这是我的过程:
- lsblk -> nvme0n1(检查 nvme 是否尚未安装)
- sudo mkfs.ext4 -E nodiscard /dev/nvme0n1
- sudo mount -o discard /dev/nvme0n1 /mnt/my-data
- /dev/nvme0n1 /mnt/my-data ext4 defaults,nofail,discard 0 2
- sudo mount -a(检查是否一切正常)
- sudo 重启
所以所有这些都有效,我可以连接回实例。我的新分区上有 500 Go。
但是在我停止并重新启动 EC2 机器后,其中一些机器随机变得无法访问(AWS 警告仅检查了 1/2 测试状态)
当我查看为什么它无法访问的日志时,它告诉我,这是关于 nvme 分区的(但我做了 sudo mount -a 来检查这是否正常,所以我不明白)
我没有确切的 AWS 日志,但我得到了其中的几行:
Bad magic number in super-block while trying to open
then the superblock is corrupt, and you might try running e2fsck with an alternate superblock:
/dev/fd/9: line 2: plymouth: command not found
停止和启动实例会擦除临时磁盘,将实例移动到新的主机硬件,并为您提供新的空磁盘...因此临时磁盘在 stop/start 后将始终为空白。当一个实例停止时,它不存在于任何物理主机上——资源被释放。
因此,如果您要停止和启动实例,最好的方法是不要将它们添加到 /etc/fstab
,而是在第一次启动时格式化它们,然后再安装它们。测试文件系统是否已经存在的一种方法是使用 file
实用程序和 grep
它的输出。如果 grep 没有找到匹配项,它会 returns false。
i3 实例 class 上的 NVMe SSD 是 Instance Store Volume, also known as an Ephemeral [ Disk | Volume | Drive ]. They are physically inside the instance and extremely fast, but not redundant and not intended for persistent data... hence, "ephemeral." Persistent data needs to be on an Elastic Block Store (EBS) volume or an Elastic File System (EFS) 的一个示例,两者都在实例 stop/start、硬件故障和维护中幸存下来。
尚不清楚您的实例无法启动的原因,但 nofail
可能不会在存在卷但没有文件系统时执行您期望的操作。我的印象是最终它应该会成功。
但是,您可能需要 apt-get install linux-aws
if running Ubuntu 16.04. Ubuntu 14.04 NVMe support is not really stable and not recommended。
这三种存储解决方案各有优缺点。
实例存储是本地的,所以速度非常快...但是,它是短暂的。它可以在硬重启和软重启后存活,但不能存活 stop/start 周期。如果您的实例遇到硬件故障或计划停用(所有硬件最终都会发生这种情况),您将不得不停止并启动实例以将其移至新硬件。保留实例和专用实例不会更改临时磁盘行为。
EBS 是持久的、冗余的存储,可以从一个实例分离并移动到另一个实例(这在 stop/start 中自动发生)。 EBS 支持时间点快照,这些是块级别的增量快照,因此您无需为存储跨快照未更改的数据付费......但通过一些出色的巫术,您也没有跟踪 "full" 与 "incremental" 快照——快照只是指向备份数据块的指针的逻辑容器,所以它们本质上都是 "full" 快照,但是仅计费为增量。当您删除快照时,只有不再需要恢复该快照和任何其他快照的块会从后端存储系统(对您透明,实际上使用 Amazon S3)中清除。
EBS 卷可用作 SSD 和旋转盘磁卷,同样需要在成本、性能和适当的应用程序之间进行权衡。参见 EBS Volume Types。 EBS 卷模仿普通硬盘驱动器,不同之处在于它们的容量可以按需手动增加(但不能减少),并且可以在不关闭系统的情况下从一种卷类型转换为另一种类型。 EBS 即时执行所有数据迁移,性能会降低但不会中断。这是一项相对较新的创新。
EFS 使用 NFS,因此您可以将 EFS 文件系统挂载到任意数量的实例上,甚至可以跨一个区域内的可用区挂载。 EFS 中任何一个文件 的大小限制 是 52 TB,您的实例实际上将报告 8 EB 的空闲空间 space。实际的免费 space 对于所有实际用途都是无限的,但 EFS 也是最昂贵的——如果您确实有一个 52 TiB 的文件在那里存储一个月,那么存储成本将超过 15,000 美元。我最多存储了 2 周的 20 TiB,花了我大约 5000 美元,但如果你需要 space,space 就在那里。它按小时计费,因此如果您将 52 TiB 文件存储几个小时然后将其删除,您可能需要支付 50 美元。 EFS中的"Elastic"指的是容量和价格。您不会在 EFS 上预配置 space。您使用您需要的,删除您不需要的,计费大小按小时计算。
如果没有 S3,关于存储的讨论将是不完整的。它不是文件系统,而是对象存储。 S3 的价格大约是 EFS 的 1/10,还具有有效的无限容量和 5TB 的最大对象大小。某些应用程序最好使用 S3 对象而不是文件来设计。
S3 也可以被 AWS 之外的系统轻松使用,无论是在您的数据中心还是在另一个云中。其他存储技术旨在用于 EC2 内部,尽管有一个 undocumented workaround 允许在外部或跨区域使用 EFS,使用代理和隧道。
我也有过类似的经历!我的 C5.xlarge 实例将 EBS 检测为 nvme1n1。我在 fstab 中添加了这一行。
/dev/nvme1n1 /data ext4 discard,defaults,nofail 0 2
重启几次后,它看起来可以正常工作。它保持 运行ning 数周。但是今天,我刚收到实例无法连接的警报。我尝试从 AWS 控制台重新启动它,不幸的是罪魁祸首是 fstab。磁盘挂载失败。
我向 AWS Support 提交了工单,目前还没有反馈。我必须启动一个新实例来恢复我的服务。
在另一个测试实例中,我尝试使用 UUID(通过命令 blkid 获取)而不是 /dev/nvme1n1。到目前为止看起来还在工作...将看看它是否会导致任何问题。
如果有任何 AWS 支持反馈,我会在这里更新。
================ 使用我的修复进行编辑 ===========
AWS 尚未给我反馈,但我发现了问题。实际上,在fstab中,无论你挂载/dev/nvme1n1还是UUID,都没有关系。我的问题是,我的 ESB 在文件系统中有一些错误。然后我将它附加到一个实例 运行
fsck.ext4 /dev/nvme1n1
修复几个文件系统错误后,放入fstab,重启,没问题了!
您可能会发现有用的配备本地 NVMe 存储的新 EC2 实例系列:C5d。
查看公告博客 post:https://aws.amazon.com/blogs/aws/ec2-instance-update-c5-instances-with-local-nvme-storage-c5d/
部分摘自博客post:
- 您不必在 AMI 中或在实例启动期间指定块设备映射;来宾操作系统启动后,本地存储将显示为一个或多个设备(/dev/nvme*1 on Linux)。
- 除了增加本地存储外,C5 和 C5d 具有相同的规格。
- 您可以使用任何包含 Elastic Network Adapter (ENA) 和 NVMe 驱动程序的 AMI
- 每个本地 NVMe 设备都使用 XTS-AES-256 块密码和唯一密钥进行硬件加密。
- 本地 NVMe 设备与其所连接的实例具有相同的生命周期,并且在实例停止或终止后不会停留。
近一个月以来,我一直在使用“c5”类型的实例,主要是带有 nvme 驱动器的“c5d.4xlarge”。所以,这就是我在 Ubuntu 个实例上工作的方法:
首先获取 nvme 驱动器所在的位置:
lsblk
我的总是安装在 nvme1n1
。然后检查它是否是一个空卷并且没有任何文件系统,(它通常没有,除非你正在重新安装)。对于空驱动器,输出应为 /dev/nvme1n1: data
:
sudo file -s /dev/nvme1n1
然后执行此操作以进行格式化(如果您从上一步了解到您的驱动器具有文件系统并且不是空驱动器。跳过此步骤并转到下一步):
sudo mkfs -t xfs /dev/nvme1n1
然后在当前目录下创建文件夹并挂载nvme盘:
sudo mkdir /data
sudo mount /dev/nvme1n1 /data
您现在甚至可以通过 运行:
检查它是否存在
df -h
所以我在每个节点上使用 NVME 磁盘创建了 i3.large,这是我的过程:
- lsblk -> nvme0n1(检查 nvme 是否尚未安装)
- sudo mkfs.ext4 -E nodiscard /dev/nvme0n1
- sudo mount -o discard /dev/nvme0n1 /mnt/my-data
- /dev/nvme0n1 /mnt/my-data ext4 defaults,nofail,discard 0 2
- sudo mount -a(检查是否一切正常)
- sudo 重启
所以所有这些都有效,我可以连接回实例。我的新分区上有 500 Go。
但是在我停止并重新启动 EC2 机器后,其中一些机器随机变得无法访问(AWS 警告仅检查了 1/2 测试状态)
当我查看为什么它无法访问的日志时,它告诉我,这是关于 nvme 分区的(但我做了 sudo mount -a 来检查这是否正常,所以我不明白)
我没有确切的 AWS 日志,但我得到了其中的几行:
Bad magic number in super-block while trying to open
then the superblock is corrupt, and you might try running e2fsck with an alternate superblock:
/dev/fd/9: line 2: plymouth: command not found
停止和启动实例会擦除临时磁盘,将实例移动到新的主机硬件,并为您提供新的空磁盘...因此临时磁盘在 stop/start 后将始终为空白。当一个实例停止时,它不存在于任何物理主机上——资源被释放。
因此,如果您要停止和启动实例,最好的方法是不要将它们添加到 /etc/fstab
,而是在第一次启动时格式化它们,然后再安装它们。测试文件系统是否已经存在的一种方法是使用 file
实用程序和 grep
它的输出。如果 grep 没有找到匹配项,它会 returns false。
i3 实例 class 上的 NVMe SSD 是 Instance Store Volume, also known as an Ephemeral [ Disk | Volume | Drive ]. They are physically inside the instance and extremely fast, but not redundant and not intended for persistent data... hence, "ephemeral." Persistent data needs to be on an Elastic Block Store (EBS) volume or an Elastic File System (EFS) 的一个示例,两者都在实例 stop/start、硬件故障和维护中幸存下来。
尚不清楚您的实例无法启动的原因,但 nofail
可能不会在存在卷但没有文件系统时执行您期望的操作。我的印象是最终它应该会成功。
但是,您可能需要 apt-get install linux-aws
if running Ubuntu 16.04. Ubuntu 14.04 NVMe support is not really stable and not recommended。
这三种存储解决方案各有优缺点。
实例存储是本地的,所以速度非常快...但是,它是短暂的。它可以在硬重启和软重启后存活,但不能存活 stop/start 周期。如果您的实例遇到硬件故障或计划停用(所有硬件最终都会发生这种情况),您将不得不停止并启动实例以将其移至新硬件。保留实例和专用实例不会更改临时磁盘行为。
EBS 是持久的、冗余的存储,可以从一个实例分离并移动到另一个实例(这在 stop/start 中自动发生)。 EBS 支持时间点快照,这些是块级别的增量快照,因此您无需为存储跨快照未更改的数据付费......但通过一些出色的巫术,您也没有跟踪 "full" 与 "incremental" 快照——快照只是指向备份数据块的指针的逻辑容器,所以它们本质上都是 "full" 快照,但是仅计费为增量。当您删除快照时,只有不再需要恢复该快照和任何其他快照的块会从后端存储系统(对您透明,实际上使用 Amazon S3)中清除。
EBS 卷可用作 SSD 和旋转盘磁卷,同样需要在成本、性能和适当的应用程序之间进行权衡。参见 EBS Volume Types。 EBS 卷模仿普通硬盘驱动器,不同之处在于它们的容量可以按需手动增加(但不能减少),并且可以在不关闭系统的情况下从一种卷类型转换为另一种类型。 EBS 即时执行所有数据迁移,性能会降低但不会中断。这是一项相对较新的创新。
EFS 使用 NFS,因此您可以将 EFS 文件系统挂载到任意数量的实例上,甚至可以跨一个区域内的可用区挂载。 EFS 中任何一个文件 的大小限制 是 52 TB,您的实例实际上将报告 8 EB 的空闲空间 space。实际的免费 space 对于所有实际用途都是无限的,但 EFS 也是最昂贵的——如果您确实有一个 52 TiB 的文件在那里存储一个月,那么存储成本将超过 15,000 美元。我最多存储了 2 周的 20 TiB,花了我大约 5000 美元,但如果你需要 space,space 就在那里。它按小时计费,因此如果您将 52 TiB 文件存储几个小时然后将其删除,您可能需要支付 50 美元。 EFS中的"Elastic"指的是容量和价格。您不会在 EFS 上预配置 space。您使用您需要的,删除您不需要的,计费大小按小时计算。
如果没有 S3,关于存储的讨论将是不完整的。它不是文件系统,而是对象存储。 S3 的价格大约是 EFS 的 1/10,还具有有效的无限容量和 5TB 的最大对象大小。某些应用程序最好使用 S3 对象而不是文件来设计。
S3 也可以被 AWS 之外的系统轻松使用,无论是在您的数据中心还是在另一个云中。其他存储技术旨在用于 EC2 内部,尽管有一个 undocumented workaround 允许在外部或跨区域使用 EFS,使用代理和隧道。
我也有过类似的经历!我的 C5.xlarge 实例将 EBS 检测为 nvme1n1。我在 fstab 中添加了这一行。
/dev/nvme1n1 /data ext4 discard,defaults,nofail 0 2
重启几次后,它看起来可以正常工作。它保持 运行ning 数周。但是今天,我刚收到实例无法连接的警报。我尝试从 AWS 控制台重新启动它,不幸的是罪魁祸首是 fstab。磁盘挂载失败。
我向 AWS Support 提交了工单,目前还没有反馈。我必须启动一个新实例来恢复我的服务。
在另一个测试实例中,我尝试使用 UUID(通过命令 blkid 获取)而不是 /dev/nvme1n1。到目前为止看起来还在工作...将看看它是否会导致任何问题。
如果有任何 AWS 支持反馈,我会在这里更新。
================ 使用我的修复进行编辑 ===========
AWS 尚未给我反馈,但我发现了问题。实际上,在fstab中,无论你挂载/dev/nvme1n1还是UUID,都没有关系。我的问题是,我的 ESB 在文件系统中有一些错误。然后我将它附加到一个实例 运行
fsck.ext4 /dev/nvme1n1
修复几个文件系统错误后,放入fstab,重启,没问题了!
您可能会发现有用的配备本地 NVMe 存储的新 EC2 实例系列:C5d。
查看公告博客 post:https://aws.amazon.com/blogs/aws/ec2-instance-update-c5-instances-with-local-nvme-storage-c5d/
部分摘自博客post:
- 您不必在 AMI 中或在实例启动期间指定块设备映射;来宾操作系统启动后,本地存储将显示为一个或多个设备(/dev/nvme*1 on Linux)。
- 除了增加本地存储外,C5 和 C5d 具有相同的规格。
- 您可以使用任何包含 Elastic Network Adapter (ENA) 和 NVMe 驱动程序的 AMI
- 每个本地 NVMe 设备都使用 XTS-AES-256 块密码和唯一密钥进行硬件加密。
- 本地 NVMe 设备与其所连接的实例具有相同的生命周期,并且在实例停止或终止后不会停留。
近一个月以来,我一直在使用“c5”类型的实例,主要是带有 nvme 驱动器的“c5d.4xlarge”。所以,这就是我在 Ubuntu 个实例上工作的方法:
首先获取 nvme 驱动器所在的位置:
lsblk
我的总是安装在 nvme1n1
。然后检查它是否是一个空卷并且没有任何文件系统,(它通常没有,除非你正在重新安装)。对于空驱动器,输出应为 /dev/nvme1n1: data
:
sudo file -s /dev/nvme1n1
然后执行此操作以进行格式化(如果您从上一步了解到您的驱动器具有文件系统并且不是空驱动器。跳过此步骤并转到下一步):
sudo mkfs -t xfs /dev/nvme1n1
然后在当前目录下创建文件夹并挂载nvme盘:
sudo mkdir /data
sudo mount /dev/nvme1n1 /data
您现在甚至可以通过 运行:
检查它是否存在df -h