Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon EBS 和 NVMe

对于以下实例,EBS 卷显示为 NVMe 块储存设备:C5、C5d、i3.metal、M5、M5d、R5、R5d 和 z1d。设备名称为 /dev/nvme0n1/dev/nvme1n1,以此类推。您在块储存设备映射中指定的设备名称将使用 NVMe 设备名称 (/dev/nvme[0-26]n1) 进行重命名。

注意

无论块储存设备接口如何,Amazon EBS 产品详细信息中声明的 EBS 性能保证都有效。

识别 EBS 设备

Amazon Linux AMI

利用 Amazon Linux AMI 2017.09.01 或更高版本(包括 Amazon Linux 2),您可以按下面所示运行 ebsnvme-id 命令以将 NVMe 设备名称映射到卷 ID 和设备名称。

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-01324f611e2463981 /dev/sdf

Amazon Linux 还将创建从块储存设备映射中的设备名称 (例如,/dev/sdf) 到 NVMe 设备名称的符号链接。

其他 Linux AMI

利用内核版本 4.2 或更高版本,您可以按下面所示运行 nvme id-ctrl 命令以将 NVMe 设备映射到卷 ID。首先,使用您的 Linux 发行版的程序包管理工具安装 NVMe 命令行程序包 nvme-cli

以下示例将获取卷 ID 和设备名称。设备名称通过特定于 NVMe 控制器供应商的扩展 (控制器标识的字节 384:4095) 提供。

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme1n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : vol01234567890abcdef mn : Amazon Elastic Block Store ... 0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "/dev/sdf..."

lsblk 命令可列出可用设备及其装载点 (如果适用)。这有助于确定要使用的正确设备名称。在本示例中,/dev/nvme0n1p1 作为根设备装载,/dev/nvme1n1 会附加但不会装载。

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:3 0 100G 0 disk nvme0n1 259:0 0 8G 0 disk nvme0n1p1 259:1 0 8G 0 part / nvme0n1p128 259:2 0 1M 0 part

使用 NVMe EBS 卷

如果您使用的是 Linux 内核 4.2 或更高版本,您对 NVMe EBS 卷的卷大小进行的所有更改将自动在实例中反映。对于旧版 Linux 内核,您可能需要分离然后附加 EBS 卷或者重启实例才能反映大小更改。对于 Linux 内核 3.19 或更高版本,您可以按下面所示使用 hdparm 命令强制重新扫描 NVMe 设备:

[ec2-user ~]$ sudo hdparm -z /dev/nvme1n1

在分离 NVMe EBS 卷之前,您应该同步并卸载它。当您分离 NVMe EBS 卷时,强制执行选项会隐式启用。因此,在分离卷之前,实例没有机会刷新文件系统缓存或元数据。

I/O 操作超时

NVMe EBS 卷使用操作系统提供的默认 NVMe 驱动程序。大多数操作系统为提交到 NVMe 设备的 I/O 操作指定一个超时。默认超时为 30 秒,可以使用 nvme_core.io_timeout 引导参数 (对于版本 4.6 之前的 Linux 内核为 nvme.io_timeout 引导参数) 更改。为了获得与附加到 Xen 实例的 EBS 卷类似的体验,我们建议将该参数设置为可能的最大值。对于 Amazon Linux AMI 2017.09.01 (或更高版本) 以及具有 4.15 或更高版本的 Linux 内核,最大值为 4294967295。在 Linux 4.15 之前,最大值为 255 秒。如果使用当前版本的 Amazon Linux AMI,我们已增加了该超时。

对于 Linux 内核 4.14 和更高版本,您还可以配置 I/O 操作可以重试的次数。默认设置为重试 5 次。您可以使用 nvme_core.max_retries 内核引导参数配置不同的值,或者在运行时使用以下命令配置该值:

[ec2-user ~]$ echo 10 > /sys/module/nvme_core/parameters/max_retries