將 Amazon EBS 磁碟區對應至 NVMe 裝置名稱 - Amazon EBS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Amazon EBS 磁碟區對應至 NVMe 裝置名稱

EBS 使用單一根目錄 I/O 虛擬化 (SR-IOV) 在採用 NVMe 規格的 Nitro 型執行個體上提供磁碟區連接。這些設備倚賴作業系統上的標準 NVMe 驅動程式。這些驅動程式通常會在執行個體啟動期間探索連接的裝置,並根據裝置回應順序來建立裝置節點,而不是根據區塊型裝置映射中指定裝置的方式。

在 Linux 中,NVMe 裝置名稱遵循模式 /dev/nvme<x>n<y>,其中 <x> 是列舉順序,而對於 EBS,<y> 是 1。有時,在後續執行個體啟動時,設備回應搜索的順序可能會有不同,而這會導致設備名稱變更。此外,區塊型儲存設備驅動程式指派的設備名稱也可以與區塊型設備映射中指定的名稱不同。

我們建議您針對執行個體內的 EBS 磁碟區使用穩定的識別符,例如下列其中之一:

  • 針對 Nitro 型執行個體,當您連接 EBS 磁碟區時,或是在 AttachVolumeRunInstances API 呼叫期間,於 Amazon EC2 主控台中指定的區塊型設備映射會擷取至 NVMe 控制器識別的廠商特定資料欄位中。在 Amazon Linux AMI 2017.09.01 以後的版本中,我們提供了 udev 規則,用來讀取此資料並建立區塊型設備映射的符號連結。

  • EBS 磁碟區 ID 和掛載點在執行個體狀態變更之間保持穩定。NVMe 設備名稱可能會根據設備在執行個體啟動期間回應的順序出現變更。我們建議您使用 EBS 磁碟區 ID 和掛載點,以達到一致的設備識別。

  • NVMe EBS 磁碟區已將 EBS 磁碟區 ID 設為設備識別中的序號。使用 lsblk -o +SERIAL 命令以列出序號。

  • NVMe 設備名稱格式可能會有所不同,具體取決於 EBS 磁碟區是在執行個體啟動期間,還是之後連接。執行個體啟動後連接磁碟區的 NVMe 設備名稱包括 /dev/ 字首,而在執行個體啟動期間連接磁碟區的 NVMe 設備名稱則不包括 /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 磁碟區可供使用和從錯誤磁碟區開機。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-booting-from-wrong-volume.html

Amazon Linux AMI

使用 Amazon Linux AMI 2017.09.01 或更新版本 (包括 Amazon 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 AMI

自 FreeBSD 12.2-RELEASE 起,您可以執行 ebsnvme-id 命令,如上所示。傳遞 NVMe 裝置 (例如 nvme0) 或磁碟裝置 (例如 nvd0nda0) 的名稱。FreeBSD 也會建立磁碟裝置的符號連結 (例如 /dev/aws/disk/ebs/volume_id)。

其他 Linux AMI

使用核心版本 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 Server 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