【今から覚えるONTAPの操作】iSCSI用のSVMを作成する

## はじめに
本記事では、NetApp社の提供するStorageであるONTAPにおいて**オンプレミス環境でiSCSI用仮想ストレージ（SVM）を作成する手順について記載**します。

特定のワークロードのためのチューニングやCLIコマンドの具体的な使用方法やパラメータの解説については記載しませんが、具体的な環境構築の流れを説明することで、Ansibleを使用した自動化によるiSCSI用SVM環境の提供に必要な項目の把握につながる事になるかと思います。

なお、iSCSI利用時のベストプラクティスは[Best practices for modern SAN ONTAP 9](https://www.netapp.com/media/10680-tr4080.pdf)を参照下さい。

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/395c2d3f-110f-984c-1d41-cc4e60b8153f.png>

## 何をしたい？できる？
- ONTAPにiSCSI用SVMMの作成をCLIで実行
- WindowsからのiSCSIでLUN接続

## NFS用の仮想ストレージ（SVM）作成の流れ
基本的な設定作業の流れは下図の通りになります。

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/bc336cbb-a5b7-61bf-a1e2-77abb2bda888.png)

**本記事では**、手順1のラッキングや初期設定を実施してリモートから**ONTAPにSSHアクセスできるような状態となっていることを想定しての記載**です。


## 記事における環境情報
本記事では、以下の環境で実施した内容となります。
- Windows Server 2019
- 機種: FAS8200＋SATA Disk
- ONTAP  : 9.13.1

環境のイメージとしては以下の通りです。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/12cecbdc-1ec8-3222-75ab-90e7cbd8cd75.png>



## 実施手順
**既存環境へSVM追加ということであれば、手順4からの実施**となりますが、ここではAggregate作成からの記載となります。

### 1. Aggregateの作成

データアクセス用Aggregateを作成します。
本記事ではSATA Diskの環境で名前やDisk数以外はデフォルト値で作成する為、RAID DPで最大14個でRAID Groupを組む構成で作成されます。

<img width="350" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/5b1cabcc-3d6e-4d73-9b6c-5507d44173c2.png>

:::note info
既にデータ用Aggregate作成済の場合は、本手順は割愛して下さい。
:::

```bash:
> storage aggregate create -aggregate aggr1_node01 -diskcount 7 -node PS-8200cl-01

> storage aggregate show -aggregate aggr1_node01 -fields size,raidtype,maxraidsize
aggregate    maxraidsize raidtype size
------------ ----------- -------- -------
aggr1_node01 14          raid_dp  16.34TB
```


### 2. Network構成の設定
#### 2-1. InterfaceGroupの作成
NFSデータの通る物理Portについて、InterfaceGroupという機能を使い論理的な1つの仮想ポートを作成します。

InterfaceGroupの作成にあたっては、後述する何かしらのBroadcast Domainに所属していると作成時にエラーが出るため、事前に対象のBroadcast DomainからInterfaceGroupで利用予定のPortを外します。

本記事ではIEEE802.3ad(dynamic)に準拠したLACPを利用し、各コントローラに対して作成を実行します。

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/1e3d8548-ef36-f0f5-3470-a000fbd84d2d.png>

:::note info
既にInterfaceGroup作成済の場合は、本手順は割愛して下さい。
:::

```bash:
# InterfaceGroupに利用するPortをBroadcast Domainから除外
> broadcast-domain remove-ports -broadcast-domain Default -ports PS-8200cl-01:e0e
> broadcast-domain remove-ports -broadcast-domain Default -ports PS-8200cl-01:e0f

# InterfaceGroup作成
> network port ifgrp create -node PS-8200cl-01 -ifgrp a0a -distr-func ip -mode multimode_lacp

# InterfaceGroupに物理NICのPortを追加
> network port ifgrp add-port -node PS-8200cl-01 -ifgrp a0a -port e0e
> network port ifgrp add-port -node PS-8200cl-01 -ifgrp a0a -port e0f

> network port ifgrp show -instance -node PS-8200cl-01 -ifgrp a0a

                 Node: PS-8200cl-01
 Interface Group Name: a0a
Distribution Function: ip
        Create Policy: multimode_lacp
          MAC Address: 02:a0:98:af:de:57
   Port Participation: full
        Network Ports: e0e, e0f
             Up Ports: e0e, e0f
           Down Ports: -

#他のコントローラに対しても同様にifgrpの作成を実行
```
#### 2-2. VLANインターフェースの作成
次に作成したifgrpからVLAN インターフェースを切り出します。
<img width="300" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/a19bbb99-441d-fb93-29f0-c582426ac68c.png>

```bash:
> network port vlan create -node PS-8200cl-01 -vlan-name a0a-10

> network port vlan show -node PS-8200cl-01
                 Network Network
Node   VLAN Name Port    VLAN ID  MAC Address
------ --------- ------- -------- -----------------
PS-8200cl-01
       a0a-10    a0a     10       02:a0:98:af:de:57
```

#### 2-3. Broadcast Domainの作成
作成したVLAN インターフェースをBroadcast Domainに含めます。
Network障害時におけるPortの切り替え範囲は、Broadcast Domainに登録しているインターフェース間で実施されますが、iSCSI環境ではLIF作成時に切り替えは無効にする必要があります。
**(Broadcast DomainにPortを登録していないとLIF作成ができないので作成する形)**

:::note info
既にVLAN インターフェース作成済の場合は、本手順は割愛して下さい。
:::

<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/b664623e-cdeb-462a-0ead-63b0884cee51.png>


```bash:
> network port broadcast-domain create -broadcast-domain data_vlan10 -mtu 1500 -ports PS-8200cl-01:a0a-10, PS-8200cl-02:a0a-10

> broadcast-domain show -broadcast-domain data_vlan10
  (network port broadcast-domain show)
IPspace Broadcast                                         Update
Name    Domain Name    MTU  Port List                     Status Details
------- ----------- ------  ----------------------------- --------------
Default data_vlan10   1500
                            PS-8200cl-01:a0a-10           complete
                            PS-8200cl-02:a0a-10           complete
```


### 3. 仮想ストレージの作成

#### 3-1. 仮想ストレージの作成
仮想ストレージ(SVM)の作成を実行します。
指定された内容は、Volume作成時のDefault値になります。(languageやsecurity等) 

<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/319948dd-1069-916a-2163-6f7713469d46.png>

```bash:
> vserver create -vserver iscsi100 -rootvolume iscsi100_root -aggregate aggr1_node01 -language C.UTF-8 -rootvolume-security unix -snapshot-policy default

# iSCSIのみ利用できる仮想ストレージ設定へ変更(必須では無い)
> vserver remove-protocols -vserver iscsi100 -protocols fcp,nfs,cifs,ndmp
```

#### 3-2. LIFの作成
VLANインターフェースからIPを付与する為にLIFの作成を実施します。
LIFの作成時には、IPの他に普段の通信経路となるコントローラとPortを指定を行い、**iSCSI利用時はservice-policyをdefault-data-iscsiに指定**します。

また、**iSCSI環境におけるNetwork経路の障害は、サーバ側のマルチパスソフトウェアで管理をする為、ONTAP側で切り替え設定については無効にする必要があり、failover-policyをdisabledに指定**します。

<img width="400" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/12d2ed21-0242-9657-13ed-cba954221143.png>


```bash:
> network interface create -vserver iscsi100 -lif lif001 -service-policy default-data-iscsi -home-node  PS-8200cl-01 -home-port a0a-10  -address 172.16.10.240 -netmask 255.255.255.0 -failover-policy disabled


>  network interface create -vserver iscsi100 -lif lif002 -service-policy default-data-iscsi -home-node  PS-8200cl-02 -home-port a0a-10  -address 172.16.10.241 -netmask 255.255.255.0 -failover-policy disabled


> network interface show -vserver nfs100
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
nfs100
            lif001       up/up    172.16.10.240/24   PS-8200cl-01  a0a-10  true
            lif002       up/up    172.16.10.241/24   PS-8200cl-02  a0a-10  true
```

### 4. Volumeの作成
iSCSI用のLUN作成先のデータ置き場であるVolumeの作成を実施します。
この例では、**シンプロビジョニング構成の20GBのVolumeを作成し、Snapshot領域はサイズを0%で設定し、自動拡張を有効化します。**
iSCSI環境ではLUNと接続をする為、junction-pathの設定は不要になります。

<img width="500" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/a97e3a55-82dc-298d-1dc7-e25651c2b09a.png>


```bash:
> volume create -vserver iscsi100 -volume iscsivol -aggregate aggr1_node01 -size 20GB -percent-snapshot-space 5 -space-guarantee none -policy default -security-style unix 

# 書き込み保障の為にVolumeの自動拡張を有効化する
> volume autosize -vserver iscsi100 -volume iscsivol -mode grow -maximum-size 30g
```

### 5. プロトコル設定
SVMでiSCSIサービスを開始します。

<img width="600" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/cf63b047-022d-b30a-b441-a7634e8132c0.png>


```bash:
> vserver iscsi create -vserver iscsi100

> vserver iscsi  show
           Target                           Target                       Status
Vserver    Name                             Alias                        Admin
---------- -------------------------------- ---------------------------- ------
iscsi100   iqn.1992-08.com.netapp:sn.a16aeec0741011ee925700a098afde57:vs.24
                                            iscsi100                     up
```


### 6. LUNの作成

iSCSI用のVolumeにLUNを作成します。
Windows Server 2019に接続しますが、LUNのTypeはwindows_2008の指定を実施します。
また、LUNをNTFSでフォーマットされた後に、Windows側と空き領域の同期を取るためにspace-allocationを有効化します。

LUNとVolumeの関係が分かりにくいかもしれませんが、NAS用のアクセスができるSVMのVolumeへLUNを作成すると**LUNはONTAPでいうVolume内における1ファイルのような形で確認することができます。**

<img width="600" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/366eaff1-5a7f-0da6-5572-a97739c48116.png>



LUN作成後に、iSCSIクライアントから接続してフォーマットする事でCドライブのような形で利用することができます。




<img width="300" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/cff85856-0dd5-eff3-0304-a3a1a415d652.png>



```bash:
> lun create -vserver iscsi100 -path /vol/iscsivol/lun001 -size 5g -ostype windows_2008 -space-reserve enabled -space-allocation enabled

Created a LUN of size 5g (5368709120)
```

### 7. ONTAP内操作におけるLUNのMapping
ONTAP側からiSCSIクライアント(Windows)のイニシエータ名を登録してマスキングを実施します。
iSCSIクライアントのイニシエータ名は、Windowsの管理ツールのあるiSCSIイニシエータを立ち上げ、[構成]タブから確認できます。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/e98f10ee-ee14-5bd7-8147-69553a5107ae.png>




#### 7-1. igroupの作成

iSCSIイニシエータのノード名をグループ化したigroup (Initiator Group)を作成し、イニシエータ名の登録を実施します。
定義したigroupをLUNに紐づける事(Mapping)で、igroupに登録されているイニシエータからのみLUNアクセスを許可する事ができるようになります。
<img width="300" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/54ece81e-c7c9-afe7-481b-2fb9d462481b.png>


```bash:
> igroup create -vserver iscsi100 -igroup igroup001 -protocol iscsi -ostype windows -initiator iqn.1991-05.com.microsoft:win2019-01

```

#### 7-2. igroupとLUNの紐づけ(Mapping)
igroupに登録したイニシエータに作成したLUNをMappingします。

```bash:
> lun map -vserver iscsi100 -path /vol/iscsivol/lun001 -igroup igroup001

> lun show -mapped mapped -vserver iscsi100
Vserver   Path                            State   Mapped   Type        Size
--------- ------------------------------- ------- -------- -------- --------
iscsi100  /vol/iscsivol/lun001            online  mapped   windows_2008  5GB
```


### 8. Windows ServerからのLUN接続操作
:::note info
ここからはiSCSIクライアントであるWindows上の操作を実施します。
:::

#### 8-1. ターゲットポータルの探索
ONTAPで作成した、iSCSI用のLIFのIPアドレスをiSCSIイニシエータに登録します。



<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/a4c766a1-40c3-6134-6246-b6d2a75c997d.png>


Windowsの管理ツールのあるiSCSIイニシエータを立ち上げ、【探索】タブから【ポータルの探索】をクリックします。
表示された画面にONTAP用のiSCSI LIFのIPを入力し、【詳細設定】をクリックします。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/421056c9-a38b-0b41-e8a0-5ba8b5bfb366.png>

表示された画面で、【ローカルアダプタ】にMicrosoft iSCSI Initiatorを選択し、
【イニシエータIP】で入力したONTAPのiSCSI LIFと通信するWindows ServerのIPを選択し、
【OK】をクリックします。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/cb86bc45-4516-98b5-046b-b2ed3892abc2.png>


#### 8-2. 検出したONTAP側ターゲット名との接続実施

:::note info
この作業を設定する経路分、繰り返し実施します(本記事の場合は2経路分)
:::

iSCSIイニシエータの、【ターゲット】タブから検出されたターゲットを選択し、【接続】をクリックします。
(2経路目を登録する際は、状態が接続完了と表示されていても繰り返し設定を実施する)
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/6491048b-99e5-d58d-0b29-a4c01e9cbbb1.png>

マルチパス構成で構築する為、表示された画面で【複数パスを有効にする】にチェックを入れ、【詳細設定】をクリックします。

<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/7b52c58f-f56e-0bf0-e36f-f56763d1a1ef.png>

表示された画面で、【ローカルアダプタ】にMicrosoft iSCSI Initiatorを選択し、
【イニシエータIP】で入力したONTAPのiSCSI LIFと通信するWindows ServerのIPを選択し、
【ターゲットポータルIP】にONTAPのiSCSI LIFを選択します。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/8f5cbbc9-6484-4334-c1d2-33a635eb0585.png>

**2経路分の接続完了時点で【ターゲット】タブのデバイスをクリックすると、ONTAP上の1つのLUNが、Windows上では2つの経路から別Diskとして見えているのが確認できます。**

<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/ee4294b9-f3bf-defc-4449-6afffcd2692b.png>

<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/6456c707-e72c-cf97-c8d6-fe1a14806f0a.png>

#### 8-3. マルチパス機能の追加
複数の物理パスを使用してデータの入出力を行うためマルチパス機能を利用します。
これにより、複数パスから見えるデバイス(LUN)を1つとして見なすことができます。
また、接続経路が管理され、Activeパスで障害が発生した場合、自動的に残りのパスに切り替わり、通信を継続できるようになります。

<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/a856f008-0448-9cb6-220e-7011fc438f7f.png>



Windows Serverの【役割と機能の追加】からマルチパスI/Oを追加します。
<img width="500" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/9f82b949-cbd5-2870-deed-88091cf38460.png>

<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/19cb9ca7-e0f7-540e-5170-2b7d149d62ed.png>

:::note warn
マルチパスI/O追加後には再起動が必要になります。
:::

再起動後にWindowsの管理ツールからMPIOを選択します。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/9431ed5d-3a21-3598-3cc7-dca687dd7d9b.png>

【マルチパスの検出】タブで、**iSCSIデバイスのサポートを追加する**にチェックを入れ、【追加】をクリックします。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/672d5585-fafa-bbc7-c677-9cbae26c13f3.png>

:::note warn
iSCSIデバイスのサポート追加後には再起動が必要になります。
:::

#### 8-4. LUNの接続とフォーマット
LUNをフォーマットしてドライブレターを割り振る為、Windowsの管理ツールからコンピュータの管理を選択します。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/0796a0c5-6ffe-abea-3c5c-03b2af004943.png>

【記憶域】の【ディスクの管理】を選択し、表示されているLUNを選択し右クリックから【オンライン】を選択します。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/9c6b6606-53e6-b35d-0519-708c9e20043c.png>


未割り当てのディスクで右クリックし、【新しいシンプルボリューム】を選択します。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/76498bfc-d420-5924-6b9d-cbc314caf4b1.png>

ドライブレターの割り振りやフォーマットを実行して、LUNを利用可能な状態にします。
<img width="450" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/775e78fb-7ec5-4789-4cae-68f5e1ea9a33.png>

<img width="500" altt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/8f14f22c-4978-58aa-21b2-a70244c74457.png>



## 参考及びリンク
[ローカル階層を追加（アグリゲートを作成）](https://docs.netapp.com/ja-jp/ontap/disks-aggregates/add-local-tier-overview-task.html)

[物理ポートを組み合わせてインターフェイスグループを作成する](https://docs.netapp.com/ja-jp/ontap/networking/combine_physical_ports_to_create_interface_groups.html)

[物理ポートを介して VLAN を設定します](https://docs.netapp.com/ja-jp/ontap/networking/configure_vlans_over_physical_ports.html)

[SVM を作成します](https://docs.netapp.com/ja-jp/ontap/nfs-config/create-svms-data-access-task.html)

[LIF を作成](https://docs.netapp.com/ja-jp/ontap/nfs-config/create-lif-task.html)

[ボリュームを作成します](https://docs.netapp.com/ja-jp/ontap/volumes/create-volume-task.html)

[SAN ストレージをプロビジョニング](https://docs.netapp.com/ja-jp/ontap/san-admin/provision-storage.html)

[Best practices for modern SAN](https://www.netapp.com/media/10680-tr4080.pdf)