ONTAP Simulatorを Windows VirtualBoxで動かす

## 2020.7 追記:

ONTAP Simulator 9.7から こんな面倒無くもっと簡単に利用できるようになっていました。

普通に仮想ディスクを使った仮想マシンを作って起動すれば
DHCPで Addressもらって System ManagerからCluster作成の作業が行えます。
ただ、私の環境では どうもCOMポートはDisconnectedでも存在していると問題になるようなので、
COMポートの作成を行わない様にする必要がありました。

## 初めに

NetAppの ONTAPは NASのOSとしては非常に多機能な事もあって、手元に動作環境があるとコマンドの確認等色々便利です。

このようなために NetAppは ONTAP Simulatorをパートナ会社等に提供しておりますが、
この Simulatorは VMware向けの OVAイメージになっています。

一般的にはこれをVMware Workstation Player等で利用する事になるかと思います。
ただ、手持ちの環境によっては VirtualBox等でも実行できると便利です。
この記事ではそのやり方について記載しています。

なお、ここでセットアップするのは 一つの仮想マシンだけで動かすシングルノードクラスタです。

__お約束ではありますが、ONTAP Simulatorの VirtualBoxでの利用はメーカーの想定する利用方法から外れます。__
__あくまで自己責任で、NetAppやパートナ各社への問い合わせ等は避けていただけるようお願いいたします。__

## 環境等

- ONTAP Simulator 9.6
- Windows 10 Home, 10.0.18363  
  仮想マシンで最低でも 6GBのメモリー と 2つの仮想CPU を必要とします。  
- VirtualBox 6.1.6 r137129
- tarファイルを展開できるツール([7-zip](https://sevenzip.osdn.jp/)等)
- コマンドプロンプト

## ネットワークについて

ネットワークインターフェースは e0a-e0dの4つです。

ネットワークの接続先は好きにしてもらえばよいと思いますが、
セットアップするための管理系については以下で設定したいと思います。

|用途|VirtualBox NIC|ONTAP Port|
|:---|:---|:---|
|汎用|NIC 1|e0a|
|汎用|NIC 2|e0b|
|管理|NIC 3|e0c|
|管理|NIC 4|e0d|

### ホストオンリーネットワークの確認

管理インターフェースを外に公開せずホストからのみアクセス可能にするために
ホストオンリーネットワークの確認をします。

最初にネットワーク設定を確認します。使うコマンドは二つです。

```cmd
vboxmanage list hostonlyifs
vboxmanage list dhcpservers
```

私の環境で実際に確認するとこんな感じです(不要な行は削ってます）
コマンドプロンプトから実行してみます。

このうち Name のところの "VirtualBox Host-Only Ethernet Adapter" については
後ほど仮想マシン作成時のネットワークの設定で利用します。

```console
C:\Users\netapp> vboxmanage list hostonlyifs
Name:            VirtualBox Host-Only Ethernet Adapter
IPAddress:       192.168.56.1
NetworkMask:     255.255.255.0
Status:          Up
VBoxNetworkName: HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter
```

DHCP Disableになっていますが、念のためにDHCPのアドレスレンジを確認しておきます。

```console
C:\Users\netapp> vboxmanage list dhcpservers
NetworkName:    HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter
Dhcpd IP:       192.168.56.100
LowerIPAddress: 192.168.56.101
UpperIPAddress: 192.168.56.254
NetworkMask:    255.255.255.0
Enabled:        Yes
```

管理ネットワークで 二つ IPアドレスをアサインする必要がありますので、
ここで 二つ IPアドレスを設計しておきます。

- クラスタ管理IP (クラスタ管理をするためのフローティングIP）
- ノード管理IP (クラスタに参加している各ノードを管理するための固定IP）

とりあえず、ここでは以下で進めたいと思います。

|用途|インターフェース|IP|
|:---|:---|:---|
|クラスタ管理IP|e0c|192.168.56.10|
|ノード管理IP|e0c|192.168.56.11|

## Simulatorファイルの展開

### 仮想マシン展開用フォルダの作成

仮想マシン展開用のフォルダを 作ります。

私の場合は %USERPROFILE%\work\ontapsim としました。

```cmd
mkdir "%USERPROFILE%\work\ontapsim"
cd "%USERPROFILE%\work\ontapsim"
```

以後、ここで作業する事にします。

### ダウンロード

__NetAppのサポートサイトにログインできるアカウントが必要になります。__
__再配布等は禁止されておりますので、利用条件等をよく読んでご利用ください。__

1. https://mysupport.netapp.com/site/global/dashboard にアクセスします。
2. DOWNLOADS -> Product Evaluationをクリック  
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/b89a5a5d-3ee0-6c62-6577-7bf51349bcb3.png)
3. Data ONTAP&trade; Simulatorのリンクをクリック
4. 「terms of the license agreement」を確認してチェックして[Continue]
5. 以下のファイルをダウンロード
    - 導入セットアップガイド Simulate_ONTAP_9.x_Installation_and_Setup_Guide.pdf
    - 評価ライセンス CMode_licenses_9.x.txt
    - Hash MD5Checksums_9.x.txt
    - シミュレータ OVAファイル: Simulate ONTAP 9.x for VMware Workstation... vsim-netapp-DOT9.x-cm_nodar.ovaMB) 

ダウンロードしたファイルは先ほど作成した仮想マシン用フォルダに格納しておいてください。

### 展開と仮想ディスクの作成

OVAファイルを展開してOVFのインポートだけでできればよいのですが、私の環境では正常に動きませんでした。[^ovfimport]
このため仮想マシンを手動で作成するようにします。

#### VMDKファイルの取り出し

ovaファイルを展開します。
ovaは tarフォーマットなので ここでは 7-Zipを使って展開します。
コマンドのパスや、OVAファイル名等は適宜変更してください。

```cmd
"C:\Program Files\7-Zip\7z.exe" x "vsim-netapp-DOT9.6-cm_nodar.ova"
```

実行すると展開されて6個のファイルができます。

```
2019/07/16  15:14       433,936,896 vsim-netapp-DOT9.6-cm-disk1.vmdk
2019/07/16  15:14            71,168 vsim-netapp-DOT9.6-cm-disk2.vmdk
2019/07/16  15:14            71,680 vsim-netapp-DOT9.6-cm-disk3.vmdk
2019/07/16  15:27           100,352 vsim-netapp-DOT9.6-cm-disk4.vmdk
2019/07/16  15:13               398 vsim-netapp-DOT9.6-cm.mf
2019/07/16  15:13             7,845 vsim-netapp-DOT9.6-cm.ovf
```

vsim-netapp-DOT9.6-cm.mfに sha1のhashが格納されていますので、
データの破損等が気になる方は sha1deep64等のユーティリティを使って確認してください。

## 仮想マシンの作成

仮想マシンを作ります。
設定内容が多い[^configvm]ので、バッチで一気に処理してます。

```cmd
REM 仮想マシン名と仮想マシンのベースフォルダとホストオンリーネットワークの名前

SET "VMNAME=ontapsim"
SET "BASEFOLDER=%USERPROFILE%\work\ontapsim"
SET "HOSTONLYNET=VirtualBox Host-Only Ethernet Adapter"

REM 仮想マシンを作成

vboxmanage createvm --name "%VMNAME%" --ostype "FreeBSD_64" --register --basefolder "%BASEFOLDER%"

REM CPUとメモリーを設定

vboxmanage modifyvm "%VMNAME%" --cpus 2
vboxmanage modifyvm "%VMNAME%" --memory 6144

REM デバイスの調整

vboxmanage modifyvm "%VMNAME%" --ioapic on
vboxmanage modifyvm "%VMNAME%" --vram 16 --graphicscontroller vmsvga
vboxmanage modifyvm "%VMNAME%" --audio none
vboxmanage modifyvm "%VMNAME%" --usbohci off --usbehci off --usbxhci off
vboxmanage modifyvm "%VMNAME%" --uart1 0x3F8 4 --uartmode1 disconnected
vboxmanage modifyvm "%VMNAME%" --uart2 0x2F8 3 --uartmode2 disconnected

REM ブートデバイスの調整

vboxmanage modifyvm "%VMNAME%" --boot1 disk --boot2 none --boot3 none --boot4 none

REM ネットワークインターフェースの作成

vboxmanage modifyvm "%VMNAME%" --nic1 intnet   --nictype1 82545EM --cableconnected1 on --intnet1 intnet
vboxmanage modifyvm "%VMNAME%" --nic2 intnet   --nictype2 82545EM --cableconnected2 on --intnet2 intnet
vboxmanage modifyvm "%VMNAME%" --nic3 hostonly --nictype3 82545EM --cableconnected3 on --hostonlyadapter3 "%HOSTONLYNET%"
vboxmanage modifyvm "%VMNAME%" --nic4 hostonly --nictype4 82545EM --cableconnected4 on --hostonlyadapter4 "%HOSTONLYNET%"

REM フロッピーの設定

vboxmanage storagectl "%VMNAME%" --name floppy --add floppy --controller I82078 --portcount 1
vboxmanage storageattach "%VMNAME%" --storagectl floppy --device 0 --medium emptydrive

REM ストレージの設定

vboxmanage storagectl "%VMNAME%" --name IDE --add ide --controller PIIX4

vboxmanage storageattach "%VMNAME%" --storagectl IDE --port 0 --device 0 --type hdd --medium "vsim-netapp-DOT9.6-cm-disk1.vmdk"
vboxmanage storageattach "%VMNAME%" --storagectl IDE --port 0 --device 1 --type hdd --medium "vsim-netapp-DOT9.6-cm-disk2.vmdk"
vboxmanage storageattach "%VMNAME%" --storagectl IDE --port 1 --device 0 --type hdd --medium "vsim-netapp-DOT9.6-cm-disk3.vmdk"
vboxmanage storageattach "%VMNAME%" --storagectl IDE --port 1 --device 1 --type hdd --medium "vsim-netapp-DOT9.6-cm-disk4.vmdk"
```

## 仮想マシンの起動と初期クラスタセットアップ

仮想マシンができたので、起動して設定していきます。

### 起動

```cmd
vboxmanage startvm ontapsim
```

この後は仮想マシンのコンソール上で作業が必要になります。

1. 下記の様な画面が出て起動プロセスが開始されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/337dbd0f-8849-240b-a2ae-3faf1654aabd.png)
2. __一番のハマりポイントなのが次です。Press Ctrl-C for Boot Menu. と出たら、CTRL+Cを押します。__  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/1a01e716-9472-5523-f054-4624eaf67be5.png)
3. 無事ブートメニューに入れたら、4 [Enter] で、__設定と仮想マシンにつながれたディスクを消去__します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/e9c65d31-f8ee-345f-b131-b84898e66c8c.png)
4. 確認として「ONTAP Simulatorを初期化してディスク消すけど本当に良いのか？」と出ますので、確認して yes[Enter]を二回答えます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/bdb4b145-89f9-dde6-1974-3623d527889d.png)
5. 自動的に ONTAP Simulatorが再起動して 構成の初期化処理が始まります。

### Cluster Setup Wizard

再起動後にCluster Setup Wizardで管理用IP等を与えていきます。

1. cluster setup wizardが起動します。書かれている事を確認したら yes[Enter]で作業を続けます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/a85e8b80-995e-5eca-c248-39466e3a4879.png)
2. ノード管理用の論理I/Fをe0c上に作成します。  
   私の場合、パラメータは以下の通りです。
   - ノード管理用インターフェースのポート: e0c
   - ノード管理用インターフェースのIPアドレス: 192.168.56.11
   - ノード管理用インターフェースのnetmask: 255.255.255.0
   - ノード管理用インターフェースのgateway: 192.168.56.1
3. パラメータを入力していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128512/b29526f5-747a-1e6e-1fac-143eb2a7a441.png)
4. ノード管理用インターフェースが出来上がると Web Browserから設定を完結させるように出ますが、CLIでこのままクラスタを作成しますので、[Enter]を押します。
5. 質問が続きますので以下を解答していきます。
   - 新しいクラスタを作るのか、クラスタに参加するのか？: 新規作成なので create[Enter]
   - Single Node Clusterにするつもりか？: シングルノードなので yes[Enter]
   - クラスタ管理者のパスワードを入力: パスワードを入力して[Enter] 確認入力して[Enter]
   - Step 1 新規作成するクラスタ名を入力: クラスタ名を入力して[Enter] 例えば ontap96simにすると ノードはontap96sim-01になります。
   - Step 2 ライセンスキーの登録: ライセンス追加は後回しにできるので 何も入力せずに [Enter]で次のステップに進みます。
   - Step 3 クラスタ管理用インターフェースを設定していきます。ここではノード管理用と同じポート上に設定します。
     - クラスタ管理用インターフェースのポート: e0c
     - クラスタ管理用インターフェースのIPアドレス: 192.168.56.11
     - クラスタ管理用インターフェースのnetmask: 255.255.255.0
     - クラスタ管理用インターフェースのgateway: 192.168.56.1
   - Step 4 Storage Failoverの設定のため自動的にSkipされます。
   - Step 5 ノードセットアップ: ノードの場所を聞かれるので vbox[Enter]等とします。続く質問で構成のバックアップ先を聞かれます。ここでは [Enter] で構成を終了します。

## System Managerへのアクセス

ブラウザを立ち上げて https://192.168.56.10/ という様にクラスタ管理インターフェースのIPアドレスにアクセスしてシステムマネージャが表示されれば初期セットアップ完了です。

この後は追加ライセンスの登録、データ用アグリゲートの作成をしていけば良いかと思います。

[^ovfimport]: OVFインポート処理の途中で落ちちゃうんですよねぇ、、、。
[^configvm]: 最近のVersionだとFloppyの設定無くてもいけるっぽい(昔のVersionのはまりポイントだった)とか、ioapicの設定やuartの設定は削れるので もう少し短くできます。