

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

# Amazon EBS 磁碟區和 NVMe
<a name="nvme-ebs-volumes"></a>

Amazon EBS 磁碟區會在建置於 [AWS Nitro 系統的](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) Amazon EC2 執行個體上公開為 NVMe 區塊型儲存設備。若要充分利用公開為 NVMe 區塊裝置的 Amazon EBS 磁碟區的效能和功能，EC2 執行個體必須安裝 AWS NVMe 驅動程式。所有最新一代的 AWS Windows 和 Linux AMIs 都隨附預設安裝的 AWS NVMe 驅動程式。

如果您使用的 AMI 沒有 AWS NVMe 驅動程式，您可以手動安裝它。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的 [AWS NVMe 驅動程式](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/aws-nvme-drivers.html)。

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

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

**Topics**
+ [將 Amazon EBS 磁碟區映射至 NVMe 裝置名稱](identify-nvme-ebs-device.md)
+ [Amazon EBS 磁碟區的 NVMe I/O 操作逾時](timeout-nvme-ebs-volumes.md)
+ [Amazon EBS 磁碟區的 NVMe Abort命令](abort-command.md)

# 將 Amazon EBS 磁碟區映射至 NVMe 裝置名稱
<a name="identify-nvme-ebs-device"></a>

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

## Linux 執行個體
<a name="ebs-nvme-linux"></a>

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

我們建議您針對執行個體內的 EBS 磁碟區使用穩定的識別符，例如下列其中之一：
+ 針對 Nitro 型執行個體，當您連接 EBS 磁碟區時，或是在 `AttachVolume` 或 `RunInstances` 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 磁碟區可供使用](ebs-using-volumes.md)和從錯誤磁碟區開機。 [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-booting-from-wrong-volume.html](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`) 或磁碟裝置 (例如 `nvd0` 或 `nda0`) 的名稱。FreeBSD 也會建立磁碟裝置的符號連結 (例如 `/dev/aws/disk/ebs/`*volume\$1id*)。

**其他 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
```

## Windows 執行個體
<a name="ebs-nvme-windows"></a>

您可以執行 **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](https://s3.amazonaws.com/ec2-windows-drivers-downloads/EBSNVMeID/Latest/ebsnvme-id.zip) 連結下載該版本，再將內容解壓縮到您的 Amazon EC2 執行個體，即可存取 `ebsnvme-id.exe`。

```
PS C:\ProgramData\Amazon\Tools> 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:\ProgramData\Amazon\Tools> ebsnvme-id.exe 4
Disk Number: 4
Volume ID: vol-03e2dbe464b66f0a1
Device Name: xvdc
```

# Amazon EBS 磁碟區的 NVMe I/O 操作逾時
<a name="timeout-nvme-ebs-volumes"></a>

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

**Linux 執行個體**  
在 Linux 上，連接至 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 發行版本的值。

**Windows 執行個體**  
在 Windows 上，預設逾時為 60 秒，上限為 255 秒。您可以使用在 [Registry Entries for SCSI Miniport Drivers](https://learn.microsoft.com/en-us/previous-versions/windows/drivers/storage/registry-entries-for-scsi-miniport-drivers) 中說明的程序，修改 `TimeoutValue` 磁碟類別登錄設定。

# Amazon EBS 磁碟區的 NVMe Abort命令
<a name="abort-command"></a>

`Abort` 命令是 NVMe admin 命令，會發出以結束先前提交至控制器的特定命令。此命令通常由設備驅動程式向已超過輸入/輸出作業逾時閾值的儲存設備發出。

根據預設，支援 `Abort`命令的 Amazon EC2 執行個體類型將結束先前在命令發佈至連接的 Amazon EBS 磁碟區時提交給控制器的特定`Abort`命令。不支援 `Abort`命令的 Amazon EC2 執行個體在對連接的 Amazon EBS 磁碟區發出`Abort`命令時不採取任何動作。

以下支援 `Abort`命令：
+ 具有 NVMe 裝置 1.4 版或更新版本的 Amazon EBS 裝置。
+ 所有 Amazon EC2 執行個體，**但** Xen 型執行個體類型和下列 Nitro 型執行個體類型除外：
  + 一般用途：A1 \$1 M5 \$1 M5a \$1 M5ad \$1 M5d \$1 M5dn \$1 M5n \$1 M5zn \$1 M6g \$1 M6gd \$1 Mac1 \$1 Mac2 \$1 T3 \$1 T3a \$1 T4g
  + 運算最佳化：C5 \$1 c5a \$1 C5ad \$1 C5d \$1 C5n \$1 C6g \$1 C6gd
  + 記憶體最佳化：R5 \$1 R5a \$1 R5ad \$1 R5d \$1 R5dn \$1 R5n \$1 R6g \$1 R6gd \$1 U-12tb1 \$1 U-18tb1 \$1 U-24tb1 \$1 U-3tb1 \$1 U-6tb1 \$1 U-9tb1 \$1 X2gd \$1 X2iezn \$1 Z1d
  + 儲存最佳化：D3 \$1 D3en \$1 I3en
  + 加速運算：DL1 \$1 G4ad \$1 G4dn \$1 G5 \$1 G5g \$1 Inf1 \$1 P3dn \$1 P4d \$1 P4de \$1 VT1

如需詳細資訊，請參閱 [ NVM Express Base Specification](https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf) 的第 **5.1 節Abort命令。**