Amazon EBS 和 NVMe - Amazon EBS

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

Amazon EBS 和 NVMe

EBS 磁碟區在建置於 Nitro System 的執行個體上會公開為 NVMe 區塊型儲存設備。

Amazon EBS 產品詳細資訊提供的 EBS 效能指引仍然有效,與區塊型儲存裝置介面無關。

Linux 執行個體

裝置名稱為/dev/nvme0n1/dev/nvme1n1、等等。您在區塊型設備映射中指定的裝置名稱會使用 NVMe 裝置名稱 (/dev/nvme[0-26]n1) 重新命名。區塊型儲存設備驅動程式指派 NVMe 設備名稱的順序,可能會與您在區塊型設備映射中為磁碟區指定的順序不同。

Windows 執行個體

當您將磁碟區連接到您的執行個體時,您會在其中包含磁碟區的裝置名稱。Amazon EC2 會使用此裝置名稱。執行個體的區塊裝置驅動程式會在掛接磁碟區時指派實際的磁碟區名稱,而指派的名稱可能與 Amazon EC2 使用的名稱不同。

安裝或升級 NVMe 驅動程式

若要存取 NVMe 磁碟區,必須安裝 NVMe 驅動程式。執行個體可以支援 NVMe EBS 磁碟區、NVMe 執行個體存放區磁碟區、同時支援這兩種 NVMe 磁碟區,或不支援任何 NVMe 磁碟區。如需詳細資訊,請參閱網路和儲存功能摘要

下列 AMI 包含下列必要 NVMe 驅動程式:

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

  • Ubuntu 14.04 或更新版本 (帶 linux-aws 核心)

    注意

    AWS 以重力為基礎的執行個體類型需要 Ubuntu 18.04 或更新版本搭配核心 linux-aws

  • Red Hat Enterprise Linux 6.5 或更新版本

  • Red Hat Enterprise Linux 7.4 或更新版本

  • SUSE Linux Enterprise Server 12 SP2 或更新版本

  • CentOS 7.4.1708 或更新版本

  • FreeBSD 11.1 或更新版本

  • Debian GNU/Linux 9 或更新版本

確認您的執行個體具有 NVMe 驅動程式

您可以使用以下命令來確認您的執行個體具有 NVMe 驅動程式。

  • Amazon Linux、RHEL、CentOS 和 SUSE Linux Enterprise Server

    $ modinfo nvme

    如果執行個體具有 NVMe 驅動程式,命令會傳回驅動程式的相關資訊。

  • Amazon Linux 2 和 Ubuntu

    $ ls /sys/module/ | grep nvme

    如果執行個體具有 NVMe 驅動程式,命令會傳回已安裝的驅動程式。

更新 NVMe 驅動程式

如果您的執行個體具有 NVMe 驅動程式,您可以使用下列程序將驅動程式更新為最新版本。

  1. 連線到您的 執行個體。

  2. 更新套件快取,以取得如下的必要套件更新。

    • 若是 Amazon Linux 2、Amazon Linux、CentOS 與 Red Hat Enterprise Linux:

      [ec2-user ~]$ sudo yum update -y
    • 若是 Ubuntu 和 Debian:

      [ec2-user ~]$ sudo apt-get update -y
  3. Ubuntu 16.04 和更新版本包含 linux-aws 套件,其中包含 Nitro 型執行個體所需的 NVMe 和 ENA 驅動程式。升級 linux-aws 套件以接收如下的最新版本:

    [ec2-user ~]$ sudo apt-get install --only-upgrade -y linux-aws

    若要 Ubuntu 14.04,您可以安裝如下的最新 linux-aws 套件:

    [ec2-user ~]$ sudo apt-get install linux-aws
  4. 將執行個體重新開機以載入最新的核心版本。

    sudo reboot
  5. 重新開機後,請重新連線至您的執行個體。

適用於 AWS 視窗伺服器 2008 R2 及更新版本的視窗 AMI 包含 AWS NVMe 驅動程式。如果您沒有使用 Amazon 提供的最新 AWS 視窗 AMI,請參閱安裝或升級 AWS NVMe 驅動程式,請參閱 Amazon EC2 使用者指南 PowerShell中的 Windows 執行個體使用者指南

識別 EBS 裝置

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

<y>在 Linux 中,NVMe 裝置名稱遵循模式/dev/nvme<x>n<y>,其<x>中是列舉順序,而 EBS 則為 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 設備名稱。

  • 將設備格式化時,會產生可在檔案系統生命週期內保留的 UUID。可同時指定設備標籤。如需詳細資訊,請參閱使 Amazon EBS 卷可供使用從錯誤的磁碟區開機。

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 服務器 AMI 中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

使用 NVMe EBS 磁碟區

若要格式化和掛載 NVMe EBS 磁碟區,請參閱使 Amazon EBS 卷可供使用

Linux 執行個體

若您使用的是 Linux 核心 4.2 或更新版本,您對 NVMe EBS 磁碟區的磁碟區大小做出的任何變更,都會自動反映在執行個體上。針對較舊版本的 Linux 核心,您可能需要分離,然後再連接 EBS 磁碟區,或是重新開機執行個體,才能反映大小的變更。使用 Linux 核心 3.19 或更新版本,您可以使用下列 hdparm 命令,強制重新掃描 NVMe 裝置:

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

當您分離 NVMe EBS 磁碟區時,執行個體將無法在分離磁碟區前排清檔案系統快取或中繼資料。因此,在您分離 NVMe EBS 磁碟區前,您應該先同步及卸載它。如果磁碟區無法分離,您可以嘗試 force-detach 命令,如 從執行個體中分離 Amazon EBS 磁碟區 中所述。

Windows 執行個體

最新的 AWS 視窗 AMI 包含 AWS NVMe 驅動程式,這些驅動程式是將 EBS 磁碟區公開為 NVMe 區塊裝置的執行個體類型所需。但是,若您在 Windows 系統上調整根磁碟區的大小,您必須重新掃描磁碟區,此變更才會反映在執行個體中。如果您從不同的 AMI 啟動執行個體,則執行個體可能不包含所需的 AWS NVMe 驅動程式。如果您的執行個體沒有最新的 AWS NVMe 驅動程式,您必須安裝它。如需詳細資訊,請參閱 Windows 執行個體的AWS NVMe 驅動程式

I/O 操作逾時

大多數的作業系統都會指定提交到 NVMe 裝置的 I/O 操作逾時。

Linux 執行個體

在 Linux 上,連接至硝基執行個體的 EBS 磁碟區會使用作業系統提供的預設 NVMe 驅動程式。大多數的作業系統都會指定提交到 NVMe 裝置的 I/O 操作逾時。預設逾時為 30 秒,而且可使用 nvme_core.io_timeout 開機參數加以變更。對於大多數 4.6 版之前的 Linux 核心,此參數為 nvme.io_timeout

如果 I/O 延遲超過此逾時參數的值,Linux NVMe 驅動程式的 I/O 會失敗,並將錯誤傳回檔案系統或應用程式。根據 I/O 操作,您的檔案系統或應用程式可能會重試錯誤。在某些情況下,您的檔案系統可能會重新掛載為唯讀。

若要取得與連接到 Xen 執行個體之 EBS 磁碟區相似的體驗,我們建議將 nvme_core.io_timeout 設定為允許的最高值。若為最新的核心,最大值為 4294967295,若為較舊的核心,最大值為 255。根據 Linux 版本而定,逾時可能已設為支援的最大值。例如,若為 Amazon Linux AMI 2017.09.01 和更新版本,根據預設,逾時會設為 4294967295。

您可以將高於建議上限的值寫入 /sys/module/nvme_core/parameters/io_timeout,並在嘗試儲存檔案時檢查數值結果超出範圍錯誤,來確認 Linux 發行版本的值。

Windows 執行個體

在視窗上,預設逾時時間為 60 秒,最大值為 255 秒。您可以使用在 Registry Entries for SCSI Miniport Drivers 中說明的程序,修改 TimeoutValue 磁碟類別登錄設定。

Abort 命令

Abort 命令是個 NVMe 管理員命令,發出該命令以中止先前提交給控制器的特定命令。此命令通常由設備驅動程式向已超過輸入/輸出作業逾時閾值的儲存設備發出。支援 Abort 命令的 Amazon EC2 執行個體類型,當連接的 Amazon EBS 設備的控制器收到 Abort 命令時,依預設將會中止先前向該控制器提交的特定命令。

下列執行個體類型依預設支援所有連接 Amazon EBS 磁碟區的 Abort 命令:R5bR6iM6iM6aC6gnC6iX2gdX2ieznIm4gnIs4gen

在對連接 Amazon EBS 磁碟區發出 Abort 命令時,其他執行個體類型不採取任何動作。

具有 NVMe 設備版本 1.4 或更高版本的 Amazon EBS 設備支援 Abort 命令。

如需詳細資訊,請參閱《NVM 快速基礎規範》的 5.1 中止命令