将 Amazon EBS 卷映射到 NVMe 设备名称 - Amazon EBS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Amazon EBS 卷映射到 NVMe 设备名称

EBS 使用单根 I/O 虚拟化 (SR-IOV),根据该规范在基于 Nitro 的实例上提供卷附件。 NVMe 这些设备依赖于操作系统上的标准 NVMe驱动程序。这些驱动程序通常在实例启动期间发现附加的设备,然后根据设备响应的顺序创建设备节点,而不是按照在块设备映射中指定设备的顺序。

在 Linux 中, NVMe 设备名称遵循模式/dev/nvme<x>n<y>,其中<x>是枚举顺序,对于 EBS,<y>则为 1。有时候,在接下来的实例启动时,设备会以不同顺序响应发现过程,这会导致设备名称更改。此外,块储存设备驱动程序分配的设备名称可以不同于块储存设备映射中指定的名称。

建议您在实例中为 EBS 卷使用静态标识符,例如以下之一:

  • 对于基于 Nitro 的实例,将在 EC2 控制器标识的供应商特定数据字段中捕获您在连接 EBS 卷时或在AttachVolumeRunInstances API 调用期间在 Amazon 控制台中指定的块储存设备映射。 NVMe 对于 AMIs 高于 2017.09.01 版本的 Amazon Linux,我们提供了一udev条规则,用于读取这些数据并创建指向区块设备映射的符号链接。

  • EBS 卷 ID 和挂载点在实例状态更改之间保持稳定。 NVMe 设备名称可以根据设备在实例启动期间的响应顺序而变化。我们建议使用 EBS 卷 ID 和挂载点以实现一致的设备标识。

  • NVMe EBS 卷将 EBS 卷 ID 设置为设备标识中的序列号。使用 lsblk -o +SERIAL 命令列出序列号。

  • NVMe 设备名称格式可能有所不同,具体取决于 EBS 卷是在实例启动期间还是之后连接的。 NVMe 实例启动后连接的卷的 NVMe设备名称包含/dev/前缀,而实例启动期间连接的卷的设备名称不包含/dev/前缀。

    • 对于 Amazon Linux 或 FreeBSD AMI,sudo ebsnvme-id /dev/nvme0n1 -u使用命令获得一致 NVMe 的设备名称。

    • 对于其他发行版,请使用sudo nvme id-ctrl -v /dev/nvme0n1命令来确定 NVMe 设备名称。您可能需要包含 --vendor-specific 命令选项。

  • 格式化设备时,将生成在文件系统的使用寿命内保持的 UUID。此时可指定设备标签。有关更多信息,请参阅使 Amazon EBS 卷可供使用从错误的卷启动

亚马逊 Linux AMIs

在 Amazon Linux AMI 2017.09.01 或更高版本(包括亚马逊 Linux 2)中,您可以按如下方式运行ebsnvme-id命令将 NVMe 设备名称映射到卷 ID 和设备名称:

以下示例显示实例启动期间附上的卷的命令和输出。请注意, NVMe 设备名称不包含前/dev/缀。

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

以下示例显示实例启动后附上的卷的命令和输出。请注意, NVMe 设备名称包含前/dev/缀。

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

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

FreeBSD AMIs

从 FreeBSD 12.2-RELEASE 开始,您可以运行如上所示的 ebsnvme-id 命令。传递 NVMe 设备的名称(例如,nvme0)或磁盘设备的名称(例如nvd0nda0)。FreeBSD 还会创建指向磁盘设备的符号链接(例如,)。/dev/aws/disk/ebs/ volume_id

其他Linux AMIs

如果内核版本为 4.2 或更高版本,则可以按如下方式运行nvme id-ctrl命令将 NVMe 设备映射到卷 ID。首先,使用适用于 Linux 发行版的软件包管理工具安装 NVMe 命令行软件包。nvme-cli有关其他发行版的下载和安装说明,请参阅特定于您的发行版的文档。

以下示例获取在实例启动期间连接的卷的卷 ID 和 NVMe 设备名称。请注意, NVMe 设备名称不包含前/dev/缀。设备名称可通过 NVMe控制器供应商特定的扩展名获得(控制器标识的 384:4095 字节):

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme0n1 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 "sda..."

以下示例获取实例启动后连接的卷的卷 ID 和 NVMe 设备名称。请注意, NVMe 设备名称包含前/dev/缀。

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme1n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : volabcdef01234567890 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

您可以运行ebsnvme-id命令将 NVMe 设备磁盘号映射到 EBS 卷 ID 和设备名称。默认情况下,会枚举所有 EBS NVMe 设备。您可以传递磁盘编号以枚举特定设备的信息。该ebsnvme-id工具包含在最新 AWS 提供的 Windows 服务器中, AMIs 位于C:\PROGRAMDATA\AMAZON\Tools

从 AWS NVMe 驱动程序包开始1.5.0,,该ebsnvme-id工具的最新版本由驱动程序包安装。最新版本仅在驱动程序包中可用。ebsnvme-id 工具的独立下载链接将不再接收更新。可通过独立链接获得的最新版本是1.1.0,可以使用 ebsnvme-id.zip 链接下载该版本,并将内容提取到您的 Amazon EC2 实例中进行ebsnvme-id.exe访问。

PS C:\Users\Administrator\Desktop> ebsnvme-id.exe Disk Number: 0 Volume ID: vol-0d6d7ee9f6e471a7f Device Name: sda1 Disk Number: 1 Volume ID: vol-03a26248ff39b57cf Device Name: xvdd Disk Number: 2 Volume ID: vol-038bd1c629aa125e6 Device Name: xvde Disk Number: 3 Volume ID: vol-034f9d29ec0b64c89 Device Name: xvdb Disk Number: 4 Volume ID: vol-03e2dbe464b66f0a1 Device Name: xvdc PS C:\Users\Administrator\Desktop> ebsnvme-id.exe 4 Disk Number: 4 Volume ID: vol-03e2dbe464b66f0a1 Device Name: xvdc