本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Amazon EBS 卷映射到NVMe设备名称
EBS使用单根 I/O 虚拟化 (SR-IOV) 在使用规范的基于 Nitro的实例上提供卷附件。NVMe这些设备依赖于操作系统上的标准NVMe驱动程序。这些驱动程序通常在实例启动期间发现附加的设备,然后根据设备响应的顺序创建设备节点,而不是按照在块设备映射中指定设备的顺序。
在 Linux 中,NVMe设备名称遵循模式/dev/nvme<x>n<y>
,其中<x>是枚举顺序,for EBS <y>是 1。有时候,在接下来的实例启动时,设备会以不同顺序响应发现过程,这会导致设备名称更改。此外,块储存设备驱动程序分配的设备名称可以不同于块储存设备映射中指定的名称。
我们建议您为实例中的EBS卷使用稳定的标识符,例如以下标识符之一:
-
对于基于 Nitro 的实例,将在EC2控制器标识的供应商特定数据字段中捕获您在连接EBS卷时
AttachVolume
或RunInstances
API调用期间在 Amazon 控制台中指定的块储存设备映射。NVMe对于AMIs高于 2017.09.01 版本的 Amazon Linux,我们提供了一udev
条规则,用于读取这些数据并创建指向区块设备映射的符号链接。 -
在实例状态更改之间,EBS卷 ID 和挂载点是稳定的。NVMe设备名称可以根据设备在实例启动期间的响应顺序而变化。我们建议使用EBS卷 ID 和装入点以实现一致的设备识别。
-
NVMeEBSEBS卷在设备标识中将卷 ID 设置为序列号。使用
lsblk -o +SERIAL
命令列出序列号。 -
NVMe设备名称格式可能会有所不同,具体取决于EBS卷是在实例启动期间还是之后连接的。NVMe实例启动后连接的卷的NVMe设备名称包含
/dev/
前缀,而实例启动期间连接的卷的设备名称不包含/dev/
前缀。-
对于 Amazon Linux 或免费版 BSDAMI,请使用
sudo ebsnvme-id /dev/
命令获得一致的NVMe设备名称。nvme0n1
-u -
对于其他发行版,请使用
sudo nvme id-ctrl -v /dev/
命令来确定NVMe设备名称。您可能需要包含nvme0n1
--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/nvme
0
n1Volume ID: vol-01324f611e2463981 sda
以下示例显示实例启动后附上的卷的命令和输出。请注意,NVMe设备名称包含前/dev/
缀。
[ec2-user ~]$
sudo /sbin/ebsnvme-id /dev/nvme
1
n1Volume ID: vol-064784f1011136656 /dev/sdf
Amazon Linux 还会创建从块储存设备映射中的设备名称(例如/dev/sdf
)到NVMe设备名称的符号链接。
免费 BSD AMIs
从 Free BSD 12.2-开始RELEASE,你可以运行如上所示的ebsnvme-id命令。传递NVMe设备名称(例如nvme0
)或磁盘设备的名称(例如nvd0
或nda0
)。Free BSD 还会创建指向磁盘设备的符号链接(例如,/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/nvme
0
n1NVME 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/nvme
1
n1NVME 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 和设备名称。默认情况下,枚举所有EBSNVMe设备。您可以传递磁盘编号以枚举特定设备的信息。该ebsnvme-id
工具包含在最新 Amazon 提供的 Windows 服务器中,AMIs位于C:\PROGRAMDATA\AMAZON\Tools
。
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