Linux 執行個體上的 Amazon EBS 和 NVMe - Amazon Elastic Compute Cloud

Linux 執行個體上的 Amazon EBS 和 NVMe

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

Amazon EBS 產品詳細資訊中列出的 EBS 效能保證仍然有效,與區塊型儲存設備界面無關。

安裝或升級 NVMe 驅動程式

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

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

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

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

  • Red Hat Enterprise Linux 7.4 或更新版本

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

  • CentOS 7.4.1708 或更新版本

  • FreeBSD 11.1 或更新版本

  • Debian GNU/Linux 9 或更新版本

如需 Windows 執行個體上 NVMe 驅動程式的詳細資訊,請參閱《Windows 執行個體的 Amazon EC2 使用者指南》中的 Windows 執行個體上的 Amazon EBS 和 NVMe

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

您可以確認您的執行個體具有 NVMe 驅動程式,並使用以下命令檢查驅動程式版本。如果執行個體具有 NVMe 驅動程式,命令會傳回驅動程式的相關資訊。

$ modinfo 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. 重新開機後,請重新連線至您的執行個體。

識別 EBS 裝置

EBS 使用單一根目錄 I/O 虛擬化 (SR-IOV) 在採用 NVMe 規格的 Nitro 型執行個體上提供磁碟區連接。這些設備倚賴作業系統上的標準 NVMe 驅動程式。這些驅動程式通常會在執行個體啟動期間掃描 PCI 匯流排來搜索連接的設備,並根據設備回應順序來建立設備節點,而不是根據區塊型設備映射中指定設備的方式。在 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 規則,用來讀取此資料並建立區塊型設備映射的符號連結。

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

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

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 裝置名稱的符號連結。

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 控制器廠商特定副檔名 (控制器識別的位元組 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 磁碟區

若要格式化和掛載 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 磁碟區和 Linux 執行個體 中所述。

I/O 操作逾時

連接至 Nitro 型執行個體的 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 發行版本的值。