

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 Windows 配置 iSCSI
<a name="mount-iscsi-windows"></a>

FSx 适用于 ONTAP 支持 iSCSI 协议。您需要在 Windows 客户端和 SVM 及 卷上配置 iSCSI，才能使用 iSCSI 协议在客户端和文件系统之间传输数据。iSCSI 协议适用于所有拥有 6 个或更少的[高可用性（HA）对](HA-pairs.md)的文件系统。

这些步骤中提供的示例说明了如何在客户端上为 ONTAP 文件系统配置 iSCSI 协议，以及如何使用以下设置： FSx 
+ 正在挂载到 Windows 主机的 iSCSI LUN 已创建。有关更多信息，请参阅 [创建 iSCSI LUN](create-iscsi-lun.md)。
+ 正在挂载 iSCSI LUN 的 Microsoft Windows 主机是运行 Microsoft Windows Server 2019 亚马逊机器映像（AMI）的 Amazon EC2 实例。为允许入站和出站流量，它已配置 VPC 安全组，如 [使用 Amazon VPC 进行文件系统访问控制](limit-access-security-groups.md) 中所述。

  您可能需要在设置过程中使用不同的 Microsoft Windows AMI。
+ 客户端和文件系统位于同一 VPC 和 Amazon Web Services 账户中。如果客户端位于其他 VPC 中，则可以使用 VPC 对等互连或 Amazon Transit Gateway 向其他人授予对 iSCSI 终端节点的 VPCs 访问权限。有关更多信息，请参阅 [从部署 VPC 外部访问数据](supported-fsx-clients.md#access-from-outside-deployment-vpc)。

  我们建议您将 EC2 实例与文件系统的首选子网放入同一个可用区，如下图所示。

![该图显示了适用于 NetApp ONTAP 的 Amazon FSx 文件系统，该文件系统具有 iSCSI LUN，Amazon EC2 实例与文件系统的首选子网位于同一个可用区。](http://docs.amazonaws.cn/fsx/latest/ONTAPGuide/images/fsx-ontap-iscsi-mnt-client.png)


**Topics**
+ [在 Windows 客户端上配置 iSCSI](#configure-iscsi-win-client)
+ [在 ONTAP 文件系统 FSx 上配置 iSCSI](#configure-iscsi-on-ontap-win)
+ [在 Windows 客户端上挂载 iSCSI LUN](#configure-iscsi-on-fsx)
+ [验证 iSCSI 配置](#validate-iscsi-windows)

## 在 Windows 客户端上配置 iSCSI
<a name="configure-iscsi-win-client"></a>

1. 使用 Windows 远程桌面连接到要在其上挂载 iSCSI LUN 的 Windows 客户端。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[使用 RDP 连接到 Windows 实例](https://docs.amazonaws.cn/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html#connect-rdp)。

1. 以管理员 PowerShell 身份打开窗口。使用以下命令在 Windows 实例上启用 iSCSI，并将 iSCSI 服务配置为自动启动。

   ```
   PS C:\> Start-Service MSiSCSI 
   PS C:\> Set-Service -Name msiscsi -StartupType Automatic
   ```

1. 检索您的 Windows 实例的启动程序名称。您将使用 ONTAP CLI 在 FSx 适用于 ONTAP 的文件系统上配置 iSCS NetApp I 时使用此值。

   ```
   PS C:\> (Get-InitiatorPort).NodeAddress
   ```

   系统使用启动程序端口做出响应。

   ```
   iqn.1991-05.com.microsoft:ec2amaz-abc123d 
   ```

1. 您需要在 Windows 实例上安装 `Multipath-IO`（MPIO），以使客户端能够在文件服务器之间自动进行失效转移。使用以下命令：

   ```
   PS C:\> Install-WindowsFeature Multipath-IO
   ```

1. `Multipath-IO` 安装完成后重启 Windows 实例。保持您的 Windows 实例处于打开状态，以便执行后续部分中的 iSCSI LUN 挂载步骤。

## 在 ONTAP 文件系统 FSx 上配置 iSCSI
<a name="configure-iscsi-on-ontap-win"></a>

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. 使用 ONTAP CLI [https://docs.netapp.com/us-en/ontap-cli-9141/lun-igroup-create.html](https://docs.netapp.com/us-en/ontap-cli-9141/lun-igroup-create.html) 创建启动程序组或 `igroup`。启动器组映射到 iSCSI LUNs 并控制哪些启动器（客户端）可以访问。 LUNs将 `host_initiator_name` 替换为在上一过程中从 Windows 主机中检索到的启动程序名称。

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

   如果要将 LUNs 映射到此映射的`igroup`内容可供多台主机使用，则可以使用 CLI [https://docs.netapp.com/us-en/ontap-cli-9141/lun-create.html#parameters](https://docs.netapp.com/us-en/ontap-cli-9141/lun-create.html#parameters)ONTAP命令指定多个以逗号分隔的启动器名称。

1. 使用 `igroup` [lun igroup show ](https://docs.netapp.com/us-en/ontap-cli-9141/lun-igroup-show.html)ONTAP CLI 命令确认是否创建成功：

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

   系统将使用以下输出做出响应：

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

   `igroup`创建完成后，您就可以创建它们 LUNs 并将其映射到`igroup`。

1. 此步骤假定您已创建了 iSCSI LUN。如果没有，[创建 iSCSI LUN](create-iscsi-lun.md)请参见以 step-by-step获取操作说明。

   从 LUN 创建一个新 LUN 的映射到 `igroup`。

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

1. 使用以下命令确认 LUN 已创建、已联机且已映射：

   ```
   ::> lun show -path /vol/{{vol_name}}/{{lun_name}} 
   Vserver     Path                            State   Mapped   Type     Size 
   ---------   ------------------------------- ------- -------- -------- -------- 
   {{svm_name}}    /vol/{{vol_name}}/{{lun_name}}          online  mapped   windows  10GB
   ```

   现在，您可以在 Windows 实例上添加 iSCSI 目标。

1. 使用以下命令检索 SVM 的 `iscsi_1` 和 `iscsi_2` 接口的 IP 地址：

   ```
   ::> 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.
   ```

   在此示例中，`iscsi_1` 的 IP 地址是 `172.31.0.143`，`iscsi_2` 的IP 地址是 `172.31.21.81`。

## 在 Windows 客户端上挂载 iSCSI LUN
<a name="configure-iscsi-on-fsx"></a>

1. 在你的 Windows 实例上，以管理员身份打开 PowerShell 终端。

1. 您将创建一个用于执行以下操作的 `.ps1` 脚本：
   + 连接到文件系统的每个 iSCSI 接口。
   + 为 iSCSI 添加和配置 MPIO。
   + 为每个 iSCSI 连接建立 8 个会话，这使客户机能够向 iSCSI LUN 驱动高达 40 Gbps (5,000 MBps) 的聚合吞吐量。拥有 8 个会话可确保单个客户端可以驱动全部的 4,000 MBps 吞吐容量，以达到最高级别 FSx 的 ONTAP 吞吐容量。您可以选择通过修改变量将会话数更改为更高或更少的会话数（每个会话最多可提供 625 MBps 的吞吐`RecommendedConnectionCount`量）。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南（适用于 Windows 实例）》**中的 [Amazon EC2 实例网络带宽](https://docs.amazonaws.cn/AWSEC2/latest/WindowsGuide/ec2-instance-network-bandwidth.html)。

   将以下一组命令复制到文件中，创建 `.psl` 脚本。
   + 将 `iscsi_1` 和 `iscsi_2` 替换为在上一步中检索到的 IP 地址。
   + 将 `ec2_ip` 替换为 Windows 实例的 IP 地址。

   ```
   Write-Host "Starting iSCSI connection setup..."
        $TargetPortalAddresses = @("iscsi_1","iscsi_2"); $LocaliSCSIAddress = "ec2_ip"
        $RecommendedConnectionCount = 8
   
        Foreach ($TargetPortalAddress in $TargetPortalAddresses) {
            New-IscsiTargetPortal -TargetPortalAddress $TargetPortalAddress -TargetPortalPortNumber 3260 -InitiatorPortalAddress $LocaliSCSIAddress
        }
   
        New-MSDSMSupportedHW -VendorId MSFT2005 -ProductId iSCSIBusType_0x9
   
        $currentMPIOSettings = Get-MPIOSetting
        if ($currentMPIOSettings.PathVerificationState -ne 'Enabled') {
            Write-Host "Setting MPIO path verification state to Enabled"; Set-MPIOSetting -NewPathVerificationState Enabled
        } else { Write-Host "MPIO path verification state already Enabled" }
   
        $portalConnectionCounts = @{}
        foreach ($TargetPortalAddress in $TargetPortalAddresses) { $portalConnectionCounts[$TargetPortalAddress] = 0 }
   
        $sessions = Get-IscsiSession
        if ($sessions) {
            foreach ($session in $sessions) {
                if ($session.IsConnected) {
                    $targetPortal = (Get-IscsiTargetPortal -iSCSISession $session).TargetPortalAddress
                    if ($portalConnectionCounts.ContainsKey($targetPortal)) { $portalConnectionCounts[$targetPortal]++ }
                }
            }
        }
   
        foreach ($TargetPortalAddress in $TargetPortalAddresses) {
            $existingCount = $portalConnectionCounts[$TargetPortalAddress]; $remainingConnections = $RecommendedConnectionCount - $existingCount
            Write-Host "Portal $TargetPortalAddress has $existingCount existing connections, $remainingConnections remaining (max recommended: $RecommendedConnectionCount)"
            if ($remainingConnections -gt 0) {
                Write-Host "Creating $remainingConnections connections for portal $TargetPortalAddress"
                1..$remainingConnections | ForEach-Object {
                    Get-IscsiTarget | Connect-IscsiTarget -IsMultipathEnabled $true -TargetPortalAddress $TargetPortalAddress -InitiatorPortalAddress $LocaliSCSIAddress -IsPersistent $true
                }
            } else { Write-Host "Maximum connections (8) reached for portal $TargetPortalAddress" }
        }
   
        Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy RR
   ```

1. 启动 Windows 的“磁盘管理”应用程序。打开 Windows 的“运行”对话框，输入 `diskmgmt.msc`，然后按 **Enter**。然后，“磁盘管理”应用程序随之打开。  
![系统会显示 Windows 的“磁盘管理”窗口。](http://docs.amazonaws.cn/fsx/latest/ONTAPGuide/images/DiskMgmt.png)

1. 找到未分配的磁盘，那个就是 iSCSI LUN。在此示例中，“Disk 1”即为 iSCSI 磁盘。其处于离线状态。  
![将光标置于磁盘 1 上方时显示的面板。](http://docs.amazonaws.cn/fsx/latest/ONTAPGuide/images/GoOnline.png)

   将光标悬停在 **Disk 1 ** 上方，单击右键，然后选择**联机**，即可使该卷联机。
**注意**  
您可以修改存储区域网络（SAN）策略，以使新卷能够自动联机。有关更多信息，请参阅 *Microsoft Windows Server 命令参考*中的 [SAN 策略](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/san)。

1. 要初始化磁盘，请右键单击 **Disk 1**，然后选择**初始化**。系统将显示“初始化”对话框。选择**确定**即可初始化磁盘。

1. 像往常一样格式化磁盘。格式化完成后，iSCSI 驱动器就会在 Windows 客户端上显示为可用驱动器。

## 验证 iSCSI 配置
<a name="validate-iscsi-windows"></a>

我们提供了一个检查 iSCSI 设置是否配置正确的脚本。该脚本检查会话计数、节点分布和多路径 I/O (MPIO) 状态等参数。以下任务介绍了如何安装和使用此脚本。<a name="validate-iscsi-windows-procedure"></a>

**验证 iSCSI 配置**

1. 打开窗户 PowerShell 窗口。

1. 使用以下命令下载脚本。

   ```
   PS C:\> Invoke-WebRequest "https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/samples/CheckiSCSI.zip" -OutFile "CheckiSCSI.zip"
   ```

1. 使用以下命令下载 zip 文件。

   ```
   PS C:\> Expand-Archive -Path ".\CheckiSCSI.zip" -DestinationPath "./"
   ```

1. 使用以下命令运行脚本。

   ```
   PS C:\> ./CheckiSCSI.ps1
   ```

1. 查看输出以了解配置的当前状态。以下示例演示了成功的 iSCSI 配置。

   ```
   PS C:\> ./CheckiSCSI.ps1
   
   This script checks the iSCSI configuration on the local instance.
   It will provide information about the number of connected sessions, connected file servers, and MPIO status.
                               
   MPIO is installed on this server.
   
   MPIO Load Balance Policy is set to Round Robin (RR).
   Initiator: 'iqn.1991-05.com.microsoft:ec2amaz-d2cebnb'
   to Target: 'iqn.1992-08.com.netapp:sn.13266b10e61411ee8bc0c76ad263d613:vs.3'
   has 16 total sessions (16 active, 0 non-active)
   spread across 2 node(s).
   MPIO: Yes
   ```