

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

# 佈建適用於 Linux 的 NVMe/TCP
<a name="provision-nvme-linux"></a>

FSx for ONTAP 支援透過 TCP (NVMe/TCP) 區塊儲存協定的非揮發性記憶體 Express。使用 NVMe/TCP，您可以使用 ONTAP CLI 佈建命名空間和子系統，然後將命名空間映射至子系統，類似於佈建 LUNs並映射至 iSCSI 啟動器群組 (igroup) 的方式。NVMe/TCP 通訊協定適用於具有 6 個或更少[高可用性 (HA) 對](HA-pairs.md)的第二代檔案系統。

**注意**  
FSx for ONTAP 檔案系統針對 iSCSI 和 NVMe/TCP 區塊儲存通訊協定使用 SVM 的 iSCSI 端點。

在 Amazon FSx for NetApp ONTAP 上設定 NVMe/TCP 有三個主要步驟，請參閱下列程序：

1. 在 Linux 主機上安裝和設定 NVMe 用戶端。

1. 在檔案系統的 SVM 上設定 NVMe。
   + 建立 NVMe 命名空間。
   + 建立 NVMe 子系統。
   + 將命名空間映射至子系統。
   + 將用戶端 NQN 新增至子系統。

1. 在 Linux 用戶端上掛載 NVMe 裝置。

## 開始之前
<a name="nvme-tcp-linux-byb"></a>

開始設定 NVMe/TCP 檔案系統的程序之前，您需要完成下列項目。
+ 建立 FSx for ONTAP 檔案系統。如需詳細資訊，請參閱[建立檔案系統](creating-file-systems.md)。
+ 在與檔案系統相同的 VPC 中建立執行 Red Hat Enterprise Linux (RHEL) 9.3 的 EC2 執行個體。這是您要設定 NVMe 並使用 NVMe/TCP for Linux 存取檔案資料的 Linux 主機。

  除了這些程序的範圍之外，如果主機位於另一個 VPC 中，您可以使用 VPC 對等互連 AWS Transit Gateway ，或授予其他 VPCs存取磁碟區的 iSCSI 端點。如需詳細資訊，請參閱[從部署 VPC 外部存取資料](supported-fsx-clients.md#access-from-outside-deployment-vpc)。
+ 設定 Linux 主機的 VPC 安全群組，以允許傳入和傳出流量，如 中所述[使用 Amazon VPC 的檔案系統存取控制](limit-access-security-groups.md)。
+ 取得具有您將用來存取 CLI ONTAP `fsxadmin`權限ONTAP之使用者的登入資料。如需詳細資訊，請參閱[ONTAP 角色和使用者](roles-and-users.md)。
+ 您將為 NVMe 設定的 Linux 主機，並用來存取 FSx for ONTAP 檔案系統，位於相同的 VPC 和 中 AWS 帳戶。
+ 我們建議 EC2 執行個體與您檔案系統偏好的子網路位於相同的可用區域。

如果您的 EC2 執行個體執行的 Linux AMI 與 RHEL 9.3 不同，這些程序和範例中使用的某些公用程式可能已安裝，而且您可以使用不同的命令來安裝必要的套件。除了安裝套件之外，本節中使用的命令對其他 EC2 Linux AMIs 有效。

**Topics**
+ [開始之前](#nvme-tcp-linux-byb)
+ [在 Linux 主機上安裝和設定 NVMe](#configure-nvme-on-rhel93)
+ [在 FSx for ONTAP 檔案系統上設定 NVMe](#configure-nvme-on-svm)
+ [在 Linux 用戶端上掛載 NVMe 裝置](#add-nvme-on-rhel93-host)

## 在 Linux 主機上安裝和設定 NVMe
<a name="configure-nvme-on-rhel93"></a>

**安裝 NVMe 用戶端**

1. 使用 SSH 用戶端連線至 Linux 執行個體。如需詳細資訊，請參閱[使用 SSH 從 Linux 或 macOS 連線至 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html)。

1. 使用下列命令安裝 `nvme-cli`：

   ```
   ~$ sudo yum install -y nvme-cli
   ```

1. 將`nvme-tcp`模組載入主機：

   ```
   $ sudo modprobe nvme-tcp
   ```

1. 使用下列命令取得 Linux 主機的 NVMe 合格名稱 (NQN)：

   ```
   $ cat /etc/nvme/hostnqn
   nqn.2014-08.org.nvmexpress:uuid:9ed5b327-b9fc-4cf5-97b3-1b5d986345d1
   ```

   記錄回應以供稍後步驟使用。

## 在 FSx for ONTAP 檔案系統上設定 NVMe
<a name="configure-nvme-on-svm"></a>

**在檔案系統上設定 NVMe**

連線至您計劃建立 NVMe 裝置之 FSx for ONTAP 檔案系統 (FSx for ONTAP) 上的 NetApp ONTAP CLI。

1. 若要存取 ONTAP CLI，請執行下列命令，在 Amazon FSx for NetApp ONTAP 檔案系統或 SVM 的管理連接埠上建立 SSH 工作階段。將 `{{management_endpoint_ip}}`取代為檔案系統管理連接埠的 IP 地址。

   ```
   [~]$ ssh fsxadmin@{{management_endpoint_ip}}
   ```

   如需詳細資訊，請參閱[使用 CLI ONTAP 管理檔案系統](managing-resources-ontap-apps.md#fsxadmin-ontap-cli)。

1. 在您用來存取 NVMe 界面的 SVM 上建立新的磁碟區。

   ```
   ::> vol create -vserver fsx -volume nvme_vol1 -aggregate aggr1 -size 1t
        [Job 597] Job succeeded: Successful
   ```

1. `ns_1` 使用 [https://docs.netapp.com/us-en/ontap-cli-9141/vserver-nvme-namespace-create.html](https://docs.netapp.com/us-en/ontap-cli-9141/vserver-nvme-namespace-create.html) NetApp ONTAP CLI 命令建立 NVMe 命名空間。命名空間會映射至啟動器 （用戶端），並控制哪些啟動器 （用戶端） 可存取 NVMe 裝置。

   ```
   ::> vserver nvme namespace create -vserver fsx -path /vol/nvme_vol1/ns_1 -size 100g -ostype linux
   Created a namespace of size 100GB (107374182400).
   ```

1. 使用 [https://docs.netapp.com/us-en/ontap-cli-9141/vserver-nvme-subsystem-create.html](https://docs.netapp.com/us-en/ontap-cli-9141/vserver-nvme-subsystem-create.html) NetApp ONTAP CLI 命令建立 NVMe 子系統。

   ```
   ~$ vserver nvme subsystem create -vserver fsx -subsystem sub_1 -ostype linux
   ```

1. 將命名空間對應至您剛建立的子系統。

   ```
   ::> vserver nvme subsystem map add -vserver fsx -subsystem sub_1 -path /vol/nvme_vol1/ns_1
   ```

1. 使用您先前擷取的 NQN，將用戶端新增至子系統。

   ```
   ::> vserver nvme subsystem host add -subsystem sub_1 -host-nqn nqn.2014-08.org.nvmexpress:uuid:ec21b083-1860-d690-1f29-44528e4f4e0e -vserver fsx
   ```

   如果您想要讓映射到此子系統的裝置可供多個主機使用，您可以在逗號分隔清單中指定多個啟動器名稱。如需詳細資訊，請參閱 NetApp ONTAP 文件中的 [vserver nvme 子系統主機新增](https://docs.netapp.com/us-en/ontap-cli-9141/vserver-nvme-subsystem-host-add.html)。

1. 使用 [https://docs.netapp.com/us-en/ontap-cli-9141/vserver-nvme-namespace-show.html](https://docs.netapp.com/us-en/ontap-cli-9141/vserver-nvme-namespace-show.html)命令確認命名空間存在：

   ```
   ::> vserver nvme namespace show -vserver fsx -instance
   Vserver Name: fsx
               Namespace Path: /vol/nvme_vol1/ns_1
                         Size: 100GB
                    Size Used: 90.59GB
                      OS Type: linux
                      Comment: 
                   Block Size: 4KB
                        State: online
            Space Reservation: false
   Space Reservations Honored: false
                 Is Read Only: false
                Creation Time: 5/20/2024 17:03:08
               Namespace UUID: c51793c0-8840-4a77-903a-c869186e74e3
                     Vdisk ID: 80d42c6f00000000187cca9
         Restore Inaccessible: false
      Inconsistent Filesystem: false
          Inconsistent Blocks: false
                       NVFail: false
   Node Hosting the Namespace: FsxId062e9bb6e05143fcb-01
                  Volume Name: nvme_vol1
                   Qtree Name: 
             Mapped Subsystem: sub_1
               Subsystem UUID: db526ec7-16ca-11ef-a612-d320bd5b74a9               
                 Namespace ID: 00000001h
                 ANA Group ID: 00000001h
                 Vserver UUID: 656d410a-1460-11ef-a612-d320bd5b74a9
                   Vserver ID: 3
                  Volume MSID: 2161388655
                  Volume DSID: 1029
                    Aggregate: aggr1
               Aggregate UUID: cfa8e6ee-145f-11ef-a612-d320bd5b74a9
    Namespace Container State: online
           Autodelete Enabled: false
             Application UUID: -
                  Application: -
     Has Metadata Provisioned: true
     
   1 entries were displayed.
   ```

1. 使用 [https://docs.netapp.com/us-en/ontap-cli-9141/network-interface-show.html](https://docs.netapp.com/us-en/ontap-cli-9141/network-interface-show.html)命令來擷取您已建立 NVMe 裝置之 SVM 的區塊儲存介面地址。

   ```
   ::> network interface show -vserver {{svm_name}} -data-protocol nvme-tcp
               Logical               Status     Network            Current                    Current Is 
   Vserver     Interface             Admin/Oper Address/Mask       Node                       Port    Home
   ----------- ----------            ---------- ------------------ -------------              ------- ----
   {{svm_name}}
               iscsi_1               up/up      172.31.16.19/20    FSxId0123456789abcdef8-01  e0e     true
               iscsi_2               up/up      172.31.26.134/20   FSxId0123456789abcdef8-02  e0e     true
   2 entries were displayed.
   ```
**注意**  
`iscsi_1` LIF 用於 iSCSI 和 NVMe/TCP。

   在此範例中，iscsi\_1 的 IP 地址為 172.31.16.19，iscsi\_2 為 172.31.26.134。

## 在 Linux 用戶端上掛載 NVMe 裝置
<a name="add-nvme-on-rhel93-host"></a>

在 Linux 用戶端上安裝 NVMe 裝置的程序包含三個步驟：

1. 探索 NVMe 節點

1. 分割 NVMe 裝置

1. 在用戶端上掛載 NVMe 裝置

這些涵蓋在下列程序中。

**探索目標 NVMe 節點**

1. 在 Linux 用戶端上，使用下列命令來探索目標 NVMe 節點。{{`iscsi_1_IP`}} 將 取代為 `iscsi_1`的 IP 地址，以及{{`client_IP`}}用戶端的 IP 地址。
**注意**  
`iscsi_1` 和 `iscsi_2` LIFs用於 iSCSI 和 NVMe 儲存。

   ```
   ~$ sudo nvme discover -t tcp -w {{client_IP}} -a {{iscsi_1_IP}}
   ```

   ```
   Discovery Log Number of Records 4, Generation counter 11
   =====Discovery Log Entry 0======
   trtype:  tcp
   adrfam:  ipv4
   subtype: current discovery subsystem
   treq:    not specified
   portid:  0
   trsvcid: 8009
   subnqn:  nqn.1992-08.com.netapp:sn.656d410a146011efa612d320bd5b74a9:discovery
   traddr:  172.31.26.134
   eflags:  explicit discovery connections, duplicate discovery information
   sectype: none
   =====Discovery Log Entry 1======
   trtype:  tcp
   adrfam:  ipv4
   subtype: current discovery subsystem
   treq:    not specified
   portid:  1
   trsvcid: 8009
   subnqn:  nqn.1992-08.com.netapp:sn.656d410a146011efa612d320bd5b74a9:discovery
   traddr:  172.31.16.19
   eflags:  explicit discovery connections, duplicate discovery information
   sectype: none
   ```

1. （選用） 若要為檔案 NVMe 裝置提供高於 Amazon EC2 單一用戶端最大 5 Gbps (\~625 MBps) 的輸送量，請遵循 Linux [執行個體的 Amazon Elastic Compute Cloud 使用者指南中所述的 Amazon EC2 執行個體網路頻寬](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html)程序，以建立其他工作階段。

1. 使用 `iscsi_1`的 IP 地址{{`iscsi_1_IP`}}和 的用戶端 IP 地址，以至少 1800 秒的控制器遺失逾時登入目標啟動器{{`client_IP`}}。您的 NVMe 裝置會顯示為可用的磁碟。

   ```
   ~$ sudo nvme connect-all -t tcp -w {{client_IP}} -a {{iscsi_1}} -l 1800
   ```

1. 使用下列命令來驗證 NVMe 堆疊是否已識別和合併多個工作階段，並已設定多路徑。`Y` 如果組態成功，命令會傳回 。

   ```
   ~$ cat /sys/module/nvme_core/parameters/multipath
   Y
   ```

1. 使用下列命令來確認 NVMe-oF 設定`model`已設為 ，`NetApp ONTAP Controller`且負載平衡`iopolicy`已設為 `round-robin`，以便個別ONTAP命名空間在所有可用的路徑上分配 I/O

   ```
   ~$ cat /sys/class/nvme-subsystem/nvme-subsys*/model
   Amazon Elastic Block Store              
   NetApp ONTAP Controller
   ~$ cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy
   numa
   round-robin
   ```

1. 使用下列命令來驗證是否已在主機上建立並正確探索命名空間：

   ```
   ~$ sudo nvme list
   Node                  Generic               SN                   Model                                    Namespace  Usage                      Format           FW Rev  
   --------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
   /dev/nvme0n1          /dev/ng0n1            vol05955547c003f0580 Amazon Elastic Block Store               0x1         25.77  GB /  25.77  GB    512   B +  0 B   1.0     
   /dev/nvme2n1          /dev/ng2n1            lWB12JWY/XLKAAAAAAAC NetApp ONTAP Controller                  0x1        107.37  GB / 107.37  GB      4 KiB +  0 B   FFFFFFFF
   ```

   輸出中的新裝置為 `/dev/nvme2n1`。此命名機制可能會因 Linux 安裝而有所不同。

1. 確認每個路徑的控制器狀態為即時，且具有正確的非對稱命名空間存取 (ANA) 多路徑狀態：

   ```
   ~$ nvme list-subsys /dev/nvme2n1
   nvme-subsys2 - NQN=nqn.1992-08.com.netapp:sn.656d410a146011efa612d320bd5b74a9:subsystem.rhel
                  hostnqn=nqn.2014-08.org.nvmexpress:uuid:ec2a70bf-3ab2-6cb0-f997-8730057ceb24
                  iopolicy=round-robin
   \
    +- nvme2 tcp traddr=172.31.26.134,trsvcid=4420,host_traddr=172.31.25.143,src_addr=172.31.25.143 live non-optimized
    +- nvme3 tcp traddr=172.31.16.19,trsvcid=4420,host_traddr=172.31.25.143,src_addr=172.31.25.143 live optimized
   ```

   在此範例中，NVMe 堆疊已自動探索檔案系統的替代 LIF、`iscsi_2`、，以及 172.31.26.134。

1. 確認NetApp外掛程式顯示每個ONTAP命名空間裝置的正確值：

   ```
   ~$ sudo nvme netapp ontapdevices -o column
   Device           Vserver                   Namespace Path                                     NSID UUID                                   Size     
   ---------------- ------------------------- -------------------------------------------------- ---- -------------------------------------- ---------
   /dev/nvme2n1     fsx                       /vol/nvme_vol1/ns_1                                1    0441c609-3db1-4b0b-aa83-790d0d448ece   107.37GB
   ```

**分割裝置**

1. 使用下列命令來驗證 Device\_name 的路徑`nvme2n1`是否存在。

   ```
   ~$ ls /dev/mapper/nvme2n1
   /dev/nvme2n1
   ```

1. 使用 分割磁碟`fdisk`。您將輸入互動式提示。依顯示的順序輸入選項。您可以使用小於最後一個區段的值 (`20971519`在此範例中為 ) 來建立多個分割區。
**注意**  
`Last sector` 值會根據 NVMe 裝置的大小 （在此範例中為 100 GiB) 而有所不同。

   ```
   ~$ sudo fdisk /dev/mapper/nvme2n1
   ```

   `fsdisk` 互動式提示隨即啟動。

   ```
   Welcome to fdisk (util-linux 2.37.4). 
   Changes will remain in memory only, until you decide to write them. 
   Be careful before using the write command. 
   
   Device does not contain a recognized partition table. 
   Created a new DOS disklabel with disk identifier 0x66595cb0. 
   
   Command (m for help): n
   Partition type 
      p primary (0 primary, 0 extended, 4 free) 
      e extended (container for logical partitions) 
   Select (default p): p
   Partition number (1-4, default 1): 1 
   First sector (256-26214399, default 256): 
   Last sector, +sectors or +size{K,M,G,T,P} (256-26214399, default 26214399): 20971519
                                       
   Created a new partition 1 of type 'Linux' and of size 100 GiB.
   Command (m for help): w
   The partition table has been altered.
   Calling ioctl() to re-read partition table. 
   Syncing disks.
   ```

   輸入 後`w`，新的分割區`/dev/nvme2n1`就會變成可用。{{partition\_name}} 的格式為 {{<device\_name>}}{{<partition\_number>}}。 `1` 在上一個步驟的 `fdisk`命令中用作分割區編號。

1. 使用 `/dev/nvme2n1`做為路徑來建立檔案系統。

   ```
   ~$ sudo mkfs.ext4 /dev/nvme2n1
   ```

   系統會以下列輸出回應：

   ```
   mke2fs 1.46.5 (30-Dec-2021)
   Found a dos partition table in /dev/nvme2n1
   Proceed anyway? (y,N) y
   Creating filesystem with 26214400 4k blocks and 6553600 inodes
   Filesystem UUID: 372fb2fd-ae0e-4e74-ac06-3eb3eabd55fb
   Superblock backups stored on blocks: 
       32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
       4096000, 7962624, 11239424, 20480000, 23887872
   
   Allocating group tables: done                            
   Writing inode tables: done                            
   Creating journal (131072 blocks): done
   Writing superblocks and filesystem accounting information: done
   ```

**在 Linux 用戶端上掛載 NVMe 裝置**

1. 在 Linux 執行個體上建立 {{directory\_path}} 做為檔案系統的掛載點。

   ```
   ~$ sudo mkdir /{{directory_path}}/{{mount_point}}
   ```

1. 使用以下命令掛載檔案系統。

   ```
   ~$ sudo mount -t ext4 /dev/nvme2n1 /{{directory_path}}/{{mount_point}}
   ```

1. （選用） 如果您想要為特定使用者提供掛載目錄的所有權，請將 取代{{`username`}}為擁有者的使用者名稱。

   ```
   ~$ sudo chown {{username}}:{{username}} /{{directory_path}}/{{mount_point}}
   ```

1. （選用） 確認您可以從檔案系統讀取和寫入資料。

   ```
   ~$ echo "Hello world!" > /{{directory_path}}/{{mount_point}}/HelloWorld.txt
   ~$ cat {{directory_path}}/HelloWorld.txt
   Hello world!
   ```

   您已成功在 Linux 用戶端上建立並掛載 NVMe 裝置。