

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

# 佈建 Linux 的 iSCSI
<a name="mount-iscsi-luns-linux"></a>

FSx for ONTAP 支援 iSCSI 通訊協定。您需要同時在 Linux 用戶端和檔案系統上佈建 iSCSI，才能使用 iSCSI 通訊協定在用戶端和檔案系統之間傳輸資料。iSCSI 通訊協定可用於具有 6 個或更少[高可用性 (HA) 對](HA-pairs.md)的所有檔案系統。

在 Amazon FSx for NetApp ONTAP 上設定 iSCSI 有三個主要步驟，涵蓋於下列程序：

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

1. 在檔案系統的 SVM 上設定 iSCSI。
   + 建立 iSCSI 啟動器群組。
   + 將啟動器群組對應至 LUN。

1. 在 Linux 用戶端上安裝 iSCSI LUN。

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

在開始設定 iSCSI 檔案系統的程序之前，您需要完成下列項目。
+ 建立適用於 ONTAP 檔案系統的 FSx。如需詳細資訊，請參閱[建立檔案系統](creating-file-systems.md)。
+ 在檔案系統上建立 iSCSI LUN。如需詳細資訊，請參閱[建立 iSCSI LUN](create-iscsi-lun.md)。
+ 在與檔案系統相同的 VPC 中建立執行 Amazon Linux 2 Amazon Machine Image (AMI) 的 EC2 執行個體。這是您要設定 iSCSI 並存取檔案資料的 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)。
+ 您將為 iSCSI 設定的 Linux 主機，以及用於存取 FSx for ONTAP 檔案系統的 Linux 主機位於相同的 VPC 和 中 AWS 帳戶。
+ 我們建議 EC2 執行個體與您檔案系統偏好的子網路位於相同的可用區域，如下圖所示。  
![顯示 Amazon FSx for NetApp ONTAP 檔案系統，其 iSCSI LUN 和 Amazon EC2 執行個體位於與檔案系統偏好子網路相同的可用區域中。](http://docs.aws.amazon.com/zh_tw/fsx/latest/ONTAPGuide/images/fsx-ontap-iscsi-mnt-client.png)

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

**Topics**
+ [開始之前](#iscsi-linux-byb)
+ [在 Linux 主機上安裝和設定 iSCSI](#configure-iscsi-on-linux-client)
+ [在 FSx for ONTAP 檔案系統上設定 iSCSI](#configure-iscsi-on-fsx-ontap)
+ [在 Linux 用戶端上安裝 iSCSI LUN](#mount-iscsi-lun-on-linux-client)

## 在 Linux 主機上安裝和設定 iSCSI
<a name="configure-iscsi-on-linux-client"></a>

**安裝 iSCSI 用戶端**

1. 確認您的 Linux 裝置已安裝 `device-mapper-multipath` `iscsi-initiator-utils`和 。使用 SSH 用戶端連線至 Linux 執行個體。如需詳細資訊，請參閱[使用 SSH 連線至 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)。

1. 使用下列命令安裝 `multipath`和 iSCSI 用戶端。如果您想要在檔案伺服器之間自動容錯移轉，`multipath`則需要安裝 。

   ```
   ~$ sudo yum install -y device-mapper-multipath iscsi-initiator-utils
   ```

1. 若要在使用 時，在檔案伺服器之間自動容錯移轉時加快回應速度`multipath`，請將`/etc/iscsi/iscsid.conf`檔案中的替代逾時值設定為 值，`5`而不是使用 的預設值`120`。

   ```
   ~$ sudo sed -i 's/node.session.timeo.replacement_timeout = .*/node.session.timeo.replacement_timeout = 5/' /etc/iscsi/iscsid.conf; sudo cat /etc/iscsi/iscsid.conf | grep node.session.timeo.replacement_timeout
   ```

1. 啟動 iSCSI 服務。

   ```
   ~$ sudo service iscsid start
   ```

   請注意，根據您的 Linux 版本，您可能需要改用此命令：

   ```
   ~$ sudo systemctl start iscsid
   ```

1. 使用以下命令確認服務正在執行。

   ```
   ~$ sudo systemctl status iscsid.service
   ```

   系統會以下列輸出回應：

   ```
   iscsid.service - Open-iSCSI 
       Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled) 
       Active: active (running) since Fri 2021-09-02 00:00:00 UTC; 1min ago
       Docs: man:iscsid(8)
       man:iscsiadm(8)
       Process: 14658 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS)
       Main PID: 14660 (iscsid)
       CGroup: /system.slice/iscsid.service
       ├─14659 /usr/sbin/iscsid
       └─14660 /usr/sbin/iscsid
   ```

**在 Linux 用戶端上設定 iSCSI**

1. 若要讓用戶端在您的檔案伺服器之間自動容錯移轉，您必須設定多路徑。使用下列命令：

   ```
   ~$ sudo mpathconf --enable --with_multipathd y
   ```

1. 使用以下命令判斷 Linux 主機的啟動者名稱。啟動器名稱的位置取決於您的 iSCSI 公用程式。如果您使用的是 `iscsi-initiator-utils`，則啟動器名稱位於 檔案 中`/etc/iscsi/initiatorname.iscsi`。

   ```
   ~$ sudo cat /etc/iscsi/initiatorname.iscsi
   ```

   系統會以啟動者名稱回應。

   ```
   InitiatorName=iqn.1994-05.com.redhat:abcdef12345
   ```

## 在 FSx for ONTAP 檔案系統上設定 iSCSI
<a name="configure-iscsi-on-fsx-ontap"></a>

1. 使用下列命令，連線到您建立 iSCSI LUN 之 FSx for ONTAP 檔案系統的 NetApp ONTAP CLI。如需詳細資訊，請參閱[使用 NetApp ONTAP CLI](managing-resources-ontap-apps.md#netapp-ontap-cli)。

   ```
   ~$ ssh fsxadmin@{{your_management_endpoint_ip}}
   ```

1. 使用 NetApp ONTAP CLI [https://docs.netapp.com/us-en/ontap-cli-9111/lun-igroup-create.html](https://docs.netapp.com/us-en/ontap-cli-9111/lun-igroup-create.html)命令建立啟動器群組 (`igroup`)。啟動器群組會映射至 iSCSI LUNs並控制哪些啟動器 （用戶端） 可存取 LUNs。`host_initiator_name` 將 取代為您在先前程序中擷取的 Linux 主機的啟動器名稱。

   ```
   ::> lun igroup create -vserver {{{{svm_name}}}} -igroup {{igroup_name}} -initiator {{host_initiator_name}} -protocol iscsi -ostype linux 
   ```

   如果您想要將對應至此 igroup LUNs 提供給多個主機，您可以指定多個以逗號分隔的啟動者名稱。如需詳細資訊，請參閱 *NetApp ONTAP 文件中心*中的 [ lun igroup 建立](https://docs.netapp.com/us-en/ontap-cli-9111/lun-igroup-create.html)。

1. 使用 [https://docs.netapp.com/us-en/ontap-cli-9111/lun-igroup-show.html](https://docs.netapp.com/us-en/ontap-cli-9111/lun-igroup-show.html)命令確認 `igroup` 存在：

   ```
   ::> lun igroup show
   ```

   系統會以下列輸出回應：

   ```
   Vserver   Igroup       Protocol OS Type  Initiators
   --------- ------------ -------- -------- ------------------------------------
   {{svm_name}}  {{igroup_name}}  iscsi    linux    iqn.1994-05.com.redhat:abcdef12345
   ```

1. 此步驟假設您已建立 iSCSI LUN。如果尚未執行，請參閱 [建立 iSCSI LUN](create-iscsi-lun.md) 以取得執行此作業step-by-step說明。

   使用 從您建立的 LUN 建立對應到您建立的 igroup[https://docs.netapp.com/us-en/ontap-cli-9111/lun-mapping-create.html](https://docs.netapp.com/us-en/ontap-cli-9111/lun-mapping-create.html)，並指定下列屬性：
   + `{{svm_name}}` – 提供 iSCSI 目標的儲存虛擬機器名稱。主機使用此值來到達 LUN。
   + `{{vol_name}}` – 託管 LUN 的磁碟區名稱。
   + `{{lun_name}}` – 您指派給 LUN 的名稱。
   + `{{igroup_name}}` – 啟動器群組的名稱。
   + `{{lun_id}}` – LUN ID 整數專屬於映射，而非 LUN 本身。這由 igroup 中的啟動器用作邏輯單位編號，在存取儲存體時，會為啟動器使用此值。

   ```
   ::> lun mapping create -vserver {{svm_name}} -path /vol/{{vol_name}}/{{lun_name}} -igroup {{igroup_name}} -lun-id {{lun_id}}
   ```

1. 使用 [https://docs.netapp.com/us-en/ontap-cli-9111/lun-show.html](https://docs.netapp.com/us-en/ontap-cli-9111/lun-show.html)命令來確認 LUN 已建立、上線和映射。

   ```
   ::> lun show -path /vol/{{vol_name}}/{{lun_name}} -fields state,mapped,serial-hex
   ```

   系統會以下列輸出回應：

   ```
    Vserver    Path                           serial-hex               state    mapped
    --------- ------------------------------- ------------------------ -------- --------
    {{svm_name}}  /vol/{{vol_name}}/{{lun_name}}          6c5742314e5d52766e796150 online   mapped
   ```

   儲存`serial_hex`值 （在此範例中為 `6c5742314e5d52766e796150`)，您將在後續步驟中使用它來為區塊型裝置建立易記的名稱。

1. 使用 [https://docs.netapp.com/us-en/ontap-cli-9111/network-interface-show.html](https://docs.netapp.com/us-en/ontap-cli-9111/network-interface-show.html)命令來擷取您已建立 iSCSI LUN 之 SVM 的 `iscsi_1`和 `iscsi_2` 介面地址。

   ```
   ::> network interface show -vserver {{{{svm_name}}}}
   ```

   系統會以下列輸出回應：

   ```
               Logical               Status     Network            Current                    Current Is 
   Vserver     Interface             Admin/Oper Address/Mask       Node                       Port    Home
   ----------- ----------            ---------- ------------------ -------------              ------- ----
   {{svm_name}}
               iscsi_1               up/up      172.31.0.143/20    FSxId0123456789abcdef8-01  e0e     true
               iscsi_2               up/up      172.31.21.81/20    FSxId0123456789abcdef8-02  e0e     true
               nfs_smb_management_1 
                                     up/up      198.19.250.177/20  FSxId0123456789abcdef8-01  e0e     true
   3 entries were displayed.
   ```

   在此範例中， 的 IP 地址`iscsi_1`為 `172.31.0.143`，而 `iscsi_2`為 `172.31.21.81`。

## 在 Linux 用戶端上安裝 iSCSI LUN
<a name="mount-iscsi-lun-on-linux-client"></a>

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

1. 探索目標 iSCSI 節點

1. 分割 iSCSI LUN

1. 在用戶端上安裝 iSCSI LUN

下列程序涵蓋這些項目。

**探索目標 iSCSI 節點**

1. 在 Linux 用戶端上，使用下列命令，使用 `iscsi_1`的 IP 地址 {{iscsi\_1\_IP}} 探索目標 iSCSI 節點。

   ```
   ~$ sudo iscsiadm --mode discovery --op update --type sendtargets --portal {{iscsi_1_IP}}
   ```

   ```
   172.31.0.143:3260,1029 iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3
   172.31.21.81:3260,1028 iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3
   ```

   在此範例中， `iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3`會對應至偏好可用區域中 `target_initiator` iSCSI LUN 的 。

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

   下列命令會在每個可用區域中為每個 ONTAP 節點建立每個啟動器 8 個工作階段，讓用戶端能夠驅動高達 40 Gbps (5，000 MBps) 的彙總輸送量至 iSCSI LUN。

   ```
   ~$ sudo iscsiadm --mode node -T {{target_initiator}} --op update -n node.session.nr_sessions -v 8
   ```

1. 登入目標啟動器。您的 iSCSI LUNs會顯示為可用的磁碟。

   ```
   ~$ sudo iscsiadm --mode node -T {{target_initiator}} --login
   ```

   ```
   Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3, portal: 172.31.14.66,3260] (multiple)
   Login to [iface: default, target: iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3, portal: 172.31.14.66,3260] successful.
   ```

   上述輸出已截斷；您應該會在每個檔案伺服器上看到每個工作階段`Logging in`的一個`Login successful`回應。如果每個節點有 4 個工作階段，將會有 8 個`Logging in`和 8 個`Login successful`回應。

1. 使用下列命令，透過顯示具有多個政策的單一 LUN 來驗證 `dm-multipath` 是否已識別和合併 iSCSI 工作階段。應該有相同數量的裝置，列出為 `active`，而列出為 `enabled`。

   ```
   ~$ sudo multipath -ll
   ```

   在輸出中，磁碟名稱的格式為 `dm-xyz`，其中 `xyz`是整數。如果沒有其他多路徑磁碟，則此值為 `dm-0`。

   ```
   3600a09806c5742314e5d52766e79614f {{dm-xyz}} NETAPP  ,LUN C-Mode      
   size=10G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
   |-+- policy='service-time 0' prio=50 status=active
   | |- 0:0:0:1 sda     8:0   active ready running
   | |- 1:0:0:1 sdc     8:32  active ready running
   | |- 3:0:0:1 sdg     8:96  active ready running
   | `- 4:0:0:1 sdh     8:112 active ready running
   `-+- policy='service-time 0' prio=10 status=enabled
     |- 2:0:0:1 sdb     8:16  active ready running
     |- 7:0:0:1 sdf     8:80  active ready running
     |- 6:0:0:1 sde     8:64  active ready running
     `- 5:0:0:1 sdd     8:48  active ready running
   ```

   您的區塊裝置現在已連線至您的 Linux 用戶端。它位於路徑 下`/dev/{{dm-xyz}}`。您不應將此路徑用於管理用途；而是使用路徑 下的符號連結`/dev/mapper/{{wwid}}`，其中 `{{wwid}}` 是 LUN 的唯一識別符，在各裝置之間保持一致。在下一個步驟中，您將為 提供易記的名稱`{{wwid}}`，以便與其他多路徑磁碟區區別。

**為區塊裝置指派易記的名稱**

1. 若要為裝置提供易記的名稱，請在 `/etc/multipath.conf` 檔案中建立別名。若要執行此作業，請使用您偏好的文字編輯器將下列項目新增至 檔案，取代下列預留位置：
   + `serial_hex` 將 取代為您在[在 FSx for ONTAP 檔案系統上設定 iSCSI](#configure-iscsi-on-fsx-ontap)程序中儲存的值。
   + 將 字首`3600a0980`新增至 `serial_hex`值，如範例所示。這是 Amazon FSx for NetApp ONTAP 使用的 NetApp ONTAP 分佈的唯一前導詞。
   + `device_name` 將 取代為您想要用於裝置的易記名稱。

   ```
   multipaths {
       multipath {
           wwid 3600a0980{{serial_hex}}
           alias {{device_name}}
       }
   }
   ```

   或者，您可以將下列指令碼複製並儲存為 bash 檔案，例如 `multipath_alias.sh`。您可以使用 sudo 權限執行指令碼，將 `{{serial_hex}}`（不含 3600a0980 字首） 和 取代`{{device_name}}`為各自的序號和所需的易記名稱。此指令碼會在 `/etc/multipath.conf` 檔案中搜尋未註解的`multipaths`區段。如果存在項目，它會將`multipath`項目附加到該區段；否則，它會為區塊裝置建立一個具有`multipath`項目的新`multipaths`區段。

   ```
   #!/bin/bash
   SN=serial_hex
   ALIAS=device_name
   CONF=/etc/multipath.conf
   grep -q '^multipaths {' $CONF
   UNCOMMENTED=$?
   if [ $UNCOMMENTED -eq 0 ]
   then
           sed -i '/^multipaths {/a\\tmultipath {\n\t\twwid 3600a0980'"${SN}"'\n\t\talias '"${ALIAS}"'\n\t}\n' $CONF
   else
           printf "multipaths {\n\tmultipath {\n\t\twwid 3600a0980$SN\n\t\talias $ALIAS\n\t}\n}" >> $CONF
   fi
   ```

1. 重新啟動 `multipathd`服務，以使變更`/etc/multipathd.conf`生效。

   ```
   ~$ systemctl restart multipathd.service
   ```

**分割 LUN**

下一個步驟是使用 格式化和分割 LUN`fdisk`。

1. 使用以下命令來驗證 的路徑`device_name`是否存在。

   ```
   ~$ ls /dev/mapper/{{device_name}}
   ```

   ```
   /dev/{{device_name}}
   ```

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

   ```
   ~$ sudo fdisk /dev/mapper/{{device_name}}
   ```

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

   ```
   Welcome to fdisk (util-linux 2.30.2). 
   
   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 (2048-20971519, default 2048): 2048 
   Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): 20971519
                                       
   Created a new partition 1 of type 'Linux' and of size 512 B.
   Command (m for help): w
   The partition table has been altered.
   Calling ioctl() to re-read partition table. 
   Syncing disks.
   ```

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

1. 使用 `/dev/mapper/{{partition_name}}`作為路徑來建立檔案系統。

   ```
   ~$ sudo mkfs.ext4 /dev/mapper/{{partition_name}}
   ```

   系統會以下列輸出回應：

   ```
   mke2fs 1.42.9 (28-Dec-2013)
   Discarding device blocks: done 
   Filesystem label=
   OS type: Linux
   Block size=4096 (log=2)
   Fragment size=4096 (log=2)
   Stride=0 blocks, Stripe width=16 blocks
   655360 inodes, 2621184 blocks
   131059 blocks (5.00%) reserved for the super user
   First data block=0
   Maximum filesystem blocks=2151677952
   80 block groups
   32768 blocks per group, 32768 fragments per group
   8192 inodes per group
   Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
   Allocating group tables: done 
   Writing inode tables: done 
   Creating journal (32768 blocks): done
   Writing superblocks and filesystem accounting information: done
   ```

**在 Linux 用戶端上掛載 LUN**

1. 建立 directory {{directory\_path}} 做為檔案系統的掛載點。

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

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

   ```
   ~$ sudo mount -t ext4 /dev/mapper/{{partition_name}} /{{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 用戶端上建立和掛載 iSCSI LUN。