

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Linux용 NVMe /TCP 프로비저닝
<a name="provision-nvme-linux"></a>

FSx for ONTAP는 비휘발성 Memory Express over TCP(NVMe/TCP) 블록 스토리지 프로토콜을 지원합니다. NVMe /TCP를 사용하면 ONTAP CLI를 사용하여 네임스페이스와 하위 시스템을 프로비저닝한 다음 네임스페이스를 하위 시스템에 매핑합니다. 이는 LUNs 프로비저닝하고 iSCSI의 이니시에이터 그룹(igroup)에 매핑하는 방식과 비슷합니다. NVMe /TCP 프로토콜은 [고가용성(HA) 페어](HA-pairs.md)가 6개 이하인 2세대 파일 시스템에서 사용할 수 있습니다.

**참고**  
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를 구성하고 Linux용 NVMe NVMe/TCP를 사용하여 파일 데이터에 액세스할 Linux 호스트입니다.

  이러한 절차의 범위를 넘어 호스트가 다른 VPC에 있는 경우, VPC 피어링 또는 AWS Transit Gateway를 사용하여 다른 VPC에 볼륨의 iSCSI 엔드포인트에 대한 액세스 권한을 부여할 수 있습니다. 자세한 내용은 [배포 VPC 외부에서 데이터 액세스](supported-fsx-clients.md#access-from-outside-deployment-vpc) 섹션을 참조하세요.
+ [Amazon VPC를 사용한 파일 시스템 액세스 제어](limit-access-security-groups.md)에 설명된 대로 인바운드 및 아웃바운드 트래픽을 허용하도록 Linux 호스트의 VPC 보안 그룹을 구성합니다.
+ ONTAP CLI에 액세스하는 데 사용할 `fsxadmin` 권한이 있는 ONTAP 사용자의 자격 증명을 가져옵니다. 자세한 내용은 [ONTAP 사용자 및 역할](roles-and-users.md) 섹션을 참조하세요.
+ NVMe용으로 구성하고 FSx for ONTAP 파일 시스템에 액세스하는 데 사용할 Linux 호스트는 동일한 VPC와 AWS 계정에 있습니다.
+ EC2 인스턴스는 파일 시스템의 기본 서브넷과 동일한 가용성 영역에 있는 것이 좋습니다.

EC2 인스턴스가 RHEL 9.3과 다른 Linux AMI를 실행하는 경우 이러한 절차 및 예제에 사용된 일부 유틸리티가 이미 설치되어 있을 수 있으며, 다른 명령을 사용하여 필요한 패키지를 설치할 수 있습니다. 패키지 설치 외에도 이 섹션에 사용된 명령은 다른 EC2 Linux AMI에도 유효합니다.

**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 파일 시스템의 NetApp ONTAP CLI에 연결합니다.

1. ONTAP CLI에 액세스하려면 다음 명령을 실행하여 Amazon FSx for NetApp ONTAP 파일 시스템 또는 SVM의 관리 포트에 SSH 세션을 설정합니다. `{{management_endpoint_ip}}`를 파일 시스템의 관리 포트의 IP 주소로 바꿉니다.

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

   자세한 내용은 [ONTAP CLI를 사용한 파일 시스템 관리](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. [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 네임스페이스 `ns_1`를 생성합니다. 네임스페이스는 이니시에이터(클라이언트)에 매핑하고 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 Docs의 [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 주소로 바꾸고 클라이언트의 IP 주소는 {{`client_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 단일 클라이언트 최대 5Gbps(\~625MBps)보다 높은 처리량을 유도하려면 Linux 인스턴스용 Amazon Elastic Compute Cloud 사용 설명서의 Amazon [Amazon EC2 인스턴스 네트워크 대역폭](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html)에 설명된 절차에 따라 추가 세션을 설정합니다.

1. 컨트롤러 손실 시간 제한이 1800초 이상인 대상 이니시에이터에 로그인하고, 다시 {{`iscsi_1_IP`}}에는 `iscsi_1`의 IP 주소를, {{`client_IP`}}에는 클라이언트의 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. 다음 명령을 사용하여 사용 가능한 모든 경로에 I/O를 분산하기 위해 각 ONTAP 네임스페이스에 대해 NVMe-oF 설정 `model`가 `NetApp ONTAP Controller`로 설정되고 로드 밸런싱 `iopolicy`가 `round-robin`로 설정되어 있는지 확인합니다.

   ```
   ~$ 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 디바이스의 크기(이 예제에서는 100GiB)에 따라 달라집니다.

   ```
   ~$ 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 장치를 성공적으로 생성하고 탑재했습니다.