2段階のNFSマウントをする方法


直接アクセスできないネットワークにあるNFSサーバをNFSでマウントすることはできないか試行錯誤してみた。

普通にCentOS7やSolaris11からやってみたところ、NFSマウントした領域のNFS exportでの公開はnfsd側から「Cannot export /mnt, possibly unsupported filesystem or fsid= required」とか、「Invalid filesystem」とか言われて設定できない。

これはuser-spaceで動作するnfsdを使えば回避できるんじゃないかと探してみた結果、unfs3というものを発見。ソースコードは https://github.com/unfs3/unfs3

Linux,FreeBSD,Solaris,AIX,Irix,MacOSXで動く以外に、Windows上でも制限ありで動作するとのこと。

Windows上で動かした場合は、unfsdが使用するWindowsユーザを1つ割り当てる形になるので、NFS経由のアクセスは全てそのWindowsユーザがアクセスしている、という扱いになるようだ。

あと、このunfs3はNFS ver3のみ使え、NFS v4やNFS v2でのアクセスには対応していない。また、NFS v3でもREADDIRPLUS(属性付きディレクトリの読み取り)周りは実装していないとのこと。

READDIRPLUSはOracle/Solarisのドキュメントによればlsコマンドなどでディレクトリ内のファイル一覧を表示させる動作を高速化するためのものなので、まぁ、なくてもなんとかなる感じのもの。

属性付きディレクトリの読み取り
NFS バージョン 3 では、READDIRPLUS と呼ばれる操作があります。たとえば、ls や ls -l などの、大部分の READDIR が READDIRPLUS コールとして発行されます。バージョン 3 で ls -l コマンドを実行すると、ディレクトリ内の名前リストと共に、ファイルハンドルと属性が返されます。バージョン 2 では、名前が最初に返され、ファイルハンドルと属性を取得するには、続いてサーバーを呼び出す必要があります。
バージョン 3 の READDIRPLUS 操作の利点は、ファイルごとに GETATTR 要求を送信する必要がないため時間が短縮され、ls と ls -l の速度が同程度になることです。

要件は満たせそうなので、とりあえずテスト用CentOS7環境でunfs3を動作させてみる。

準備

環境をインストール

# yum install git
# yum groupinstall "開発ツール"

コンパイル

まず、ソースコードの入手

$ git clone https://github.com/unfs3/unfs3.git

READMEにあるとおりbootstrap&configureを実行

$ cd unfs3/unfs3
$ ./bootstrap
$ ./configure

そしてmake

$ make
for i in Config ; do (cd $i && make all) || exit; done
make[1]: ディレクトリ `/root/unfs3/Config' に入ります
gcc -g -O2 -Wall -W -I.. -I. -I..   -c -o lex.yy.o lex.yy.c
gcc -g -O2 -Wall -W -I.. -I. -I..   -c -o y.tab.o y.tab.c
ar crs lib.a lex.yy.o y.tab.o
make[1]: ディレクトリ `/root/unfs3/Config' から出ます
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o afsgettimes.o afsgettimes.c
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o afssupport.o afssupport.c
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o attr.o attr.c
attr.c: 関数 ‘get_free_bad_dir_entry’ 内:
attr.c:550:5: エラー: ‘for’ ループ初期化宣言は C99 モード内でのみ許可されてい ます
     for (int i = 0;i < BAD_DIR_CACHE_SIZE;i++) {
     ^
attr.c:550:5: 備考: オプション -std=c99 または -std=gnu99 をコードコンパイル時に使用してください
attr.c: 関数 ‘find_bad_dir_entry’ 内:
attr.c:573:5: エラー: ‘for’ ループ初期化宣言は C99 モード内でのみ許可されてい ます
     for (int i = 0;i < BAD_DIR_CACHE_SIZE;i++) {
     ^
make: *** [attr.o] エラー 1
$

エラーとなってしまいます。

これはコンパイル時のオプションに「-std=c99」を指定するようにして解決

$ export CPPFLAGS="-std=c99";./configure
$ make
<略>
$

インストールと設定

普通にmake installすると/usr/local以下にインストールされます。

# make install
/usr/bin/install -c -d /usr/local/sbin
/usr/bin/install -c -d /usr/local/share/man/man7
/usr/bin/install -c -d /usr/local/share/man/man8
/usr/bin/install -c unfsd /usr/local/sbin/unfsd
/usr/bin/install -c -m 644 ./Extras/tags.7 /usr/local/share/man/man7/tags.7
/usr/bin/install -c -m 644 ./unfsd.8       /usr/local/share/man/man8/unfsd.8
#

NFSで公開するディレクトリの設定は、普通のnfsdと同じく /etc/exports ファイルを使用。「-e」オプションで別のファイルを指定することも可能です。

注意点としては、Linuxだとホスト名指定に「*」とnetgroupが使用できず、ログに「unfsd[20479]: syntax error in ‘/etc/exports’, exporting nothing」といった出力が出てしまうという点です。

「*」については「0.0.0.0/0」で代替できます。

/etc/exports ファイルを編集した場合、変更にはexportfsコマンドは使用できません。

unfsdに対してHUPシグナルを送ることで反映されます。(kill -HUP unfsdのPID)

unfsdの起動は「/usr/local/sbin/unfsd」の実行、停止はunfsdへのTERMシグナル送信(kill -TERM unfsdのPID)です。

東京証券取引所arrowheadを止めた設定 on_panic


10月1日に東京証券取引所arrowheadシステムは共有ディスク装置のメモリ障害が起因になって発生したとのこと。

ようやく情報が出そろって何が原因だったのかがわかってきた。

書かれていた情報をまとめると後述のようになる。
(注:Data ONTAP 7G, Data ONTAP 8, ONTAP 9という正式表記がありますがめんどいので全部ONTAPで統一します)

なお、富士通が直接やった案件ではどうなのかわかりませんが、それ以外からNetAppを購入している場合、この設定項目を変更するなんてことはしないので、影響ありません。心配しなくて大丈夫です。

前提条件について

・NetApp FASシリーズのOEMである富士通 NR1000Fを使用している

・NetAppはONTAP OSというOSで動作している

・arrowheadで使用していたNASのOSバージョンは(制御機構バージョン)、初代(2010/01)は 7、2代目(2015/09)は8、今回障害が発生した3代目(2019/11)は9

・ONTAP OSはversion 8からシステムが作り直されておりシステム体系がだいぶ変わった。ただ、いままでの操作を新システムに変換する為の一覧(7-Modeオプションとclustered Data ONTAPコマンドのマッピング)が用意されている

・ONTAP 8は7-modeとClusteredの2種類がある
 7-modeはONTAP 7と同じコマンド体系だが内部はClusteredベース

・ONTAP 8を7-modeかClusteredのどちらで使っていたのか不明
 2代目(2015/09)だと、8.1.x最終バージョンの8.1.4(July 2014)はサポート切れになるので
 September 2014リリースの8.2.2、April 2015リリースの8.2.3?
 7-modeが廃止されてClusteredに一本化されたONTAP 8.3はApril 2015リリース

・ONTAP 7とONTAP 8 7-modeではサーバの上でNFS/CIFSファイルサービスが動く形式
 管理とファイルサービスは同一サーバ上で動作
 1物理ノード=1ファイルサービス

・ONTAP 8 Clustered/ONTAP 9は仮想基盤の上でNFS/CIFSサービス用仮想マシン(StorageVM/SVM)が動く形式
 管理とファイルサービスは別扱いで動作
 1つの物理ノードの上で複数のStorageVMを動作可能

設定内容について

・今回問題となった設定は「storage failoverのonpanicオプション」に関するもの

・このオプションに相当するONTAP 7時代の設定はマッピングには「cf.takeover.on_panic」<=>「storage failover modify -onpanic」と記載されている。

・cf.takeover.on_panic設定についてONTAP 7.3.2のドキュメントではデフォルトが「on」となっている(それ以前のバージョンの同一箇所にはデフォルト記載が無い)

・ONTAP 7.xのリリース時期を比較すると、初代稼働が2010/01ということは2009/夏前には試験が始まってそうなので、7.3.2だと時期が早すぎるので、 7.3.1.1 あたりと想定される
 7.3.1: 23 January 2009, 7.3.1.1: April 2009, 7.3.2: Aug 14 2009
 7.3.3: 18 June 2010,7.3.4: 14 March 2011

・ONTAP 7.3時代のマニュアルには「iSCSIライセンスを入れるとcf.takeover.on_panicがonに設定される」という記述もあり、on_panic設定がデフォルト「off」だった時代もあるようだ

・ONTAP 7.3のマニュアルの「Reasons for takeover」にcf.takeover.on_panicはデフォルト「off」と明記。ONTAP7.3.2の同じ箇所にもデフォルトoffと書いてある。ONTAP7.3.2は同一マニュアル内でon_panicのデフォルト値が異なっているという事態に。どっちなんだよ

・ONTAP 8の7-modeの場合はcf.takeover.on_panicオプションがあるがoff時の説明が「a node panic will not cause an automatic takeover.」に変わっており、「You should not turn this option off unless you are instructed by technical support to do so.」と記載されている。

さて、問題となった設定の「ONTAP7のcf.takeover.on_panic」と「ONTAP8以降のstorage failoverのonpanicオプション」の違いを見てみる

まず、ONTAP 7での「cf.takeover.on_panic

この値は「on」でも「off」でもサービスが切り替わるのは変わらない。

ONTAP 7では相手ノードからの応答が15秒以内になかったら相手が死んだと判断して切り替える、というのが基本となっている。

しかし、PANICが発生し、それがちゃんと検出できた場合は相手が死んでいるのは確定しているので、15秒待たないで切り替えていいんじゃないか?というのが「cf.takeover.on_panic」の扱いになる。

ONTAP 7時代の cf.takeover.on_panic
 on = PANICを検出したら即座に切り替える
 off = 通常の障害検出である15秒待ってから切り替える

ONTAP 8以降ではこのcf.takeover.on_panicオプションは storage failoverのonpanicオプション に置き換えられた、とマッピングに記載されている。

storage failoverのonpanicオプションについて確認するとonrebootオプションとあわせて、「自動テイクオーバーの制御用コマンド」として掲載されている。

役割は「ノードでのパニック」「ノード再起動」が発生した場合に、ストレージサービス(StorageVM)が使用しているストレージを活きているノード上に所有権を移動して継続稼働させるか、というものになっている。

また、この動作の説明はONTAP8 7-mode時のcf.takeover.on_panicに書かれている説明とも合致する。

ONTAP 8以降のstorage failoverのonpanicオプションとONTAP 8 7-modeのcf.takeover.on_panic
 on = 切り替えを行う
 off = 切り替えない

ただ、ここらへんの違いを下記のドキュメント記述だけで判断できるのか?という感じではある。

ONTAP 7.3.2のcf.takeover.on_panic設定についての記述

ONTAP 8.2.1の7-modeでのcf.takeover.on_panicについての記述

ONTAP 9でのstorage failoverについての記述

ONTAP 7.3の「Reasons for takeover

ONTAP 7.3.2の「Reasons for takeover


プレスリリースからの引用

JPX 2020/10/05付け「arrowhead の障害に関する原因と対策について」より

画像
画像

JPX 2020/10/19付け「10月1日に株式売買システムで発生した障害について

富士通 2020/10/19付け「東京証券取引所様の株式売買システム「arrowhead」で発生した障害の原因と対策について」と「[重要]ストレージシステム「ETERNUS NR1000 series」におけるコントローラ自動切替の仕様に関する重要なお知らせ

画像
画像
画像

NetApp ONTAPシミュレータのディスク構成を変更する


NetApp ONTAPシミュレータの初期構成は1024MB HDDが28本接続されている、という構成になっている。

使いにくいので、9GB HDD構成に変更して使用することにする。

ONTAPシミュレータのデータディスクのありか

vSphere上で vsim-netapp-DOT9.7-cm_nodar.ova をデプロイした場合、下記の様な構成になっている。

このとき、ハードディスク4の230GBの中にファイルとして1024MBディスクのイメージファイルが作成されている。

もし、200GB以上のデータを書き込みたい場合は、初回起動前にハードディスク4の容量を増やす必要がある。初回起動時はUFSファイルシステムを作成してくれるので対応できるのだが、シミュレータ内にはファイルシステム拡張用のコマンドが用意されていないので初回起動時以外に拡張しようとすると、FreeBSD 12のDVDで起動してgrowfsコマンドで拡張する、といった操作が必要になる。

ハードディスク4のサイズを「1TB」に変更した場合はこんな感じです。(ついでにCPUとメモリを増量している)

ディスク削除

ONTAPシミュレータ仮想マシンの電源を入れ、下記の「Press Ctrl-C for Boot Menu」が出たらCtrlキーとCキーを同時押しする。

しばらく待つと下記の様なメニューが表示されるので「4」のClean Configuration and initialize all disks」を選択する。

初期化確認は「yes」で答える。

しばらく待つと再起動して、下記の様な初期セットアップが始まる。

これはyesと入力しないで、Ctrl+Cで強制中断すると下記の様にログインプロンプトが現れるので「admin」ユーザでログインする。(パスワードは聞かれない)

「set diag」を実行すると「systemshellコマンド」が利用できるようになる。これはONTAP OS上でUNIXコマンドを実行できるようになるものです。(“system node systemshell”が正式コマンド名なのですが、ONTAP 9.7ではsystemshellでも実行できます)

「systemshell localhost “df -h /sim/dev”」と実行すると、UNIXで「df -h /sim/dev」を実行する、というような動作になります。

なお、日本語配列キーボードを使う場合、「”」は「Shift+8」で入力します。

::> set diag

Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y

::*> system node systemshell local "df -h /sim/dev"
Filesystem    Size    Used   Avail Capacity  Mounted on
/dev/ad3      223G     11G    194G     5%    /sim
::*>

ONTAPシミュレータ上で認識するディスクのイメージファイルは「/sim/dev/,disks」というディレクトリにあります(「,」は誤字ではない)

現状あるファイルを確認するには「systemshell localhost “ls -l /sim/dev/,disks”」と実行します。

(画像はないです)

::*> systemshell local "ls -l /sim/dev/,disks"
total 11024296
-rwxr-xr-x  1 root  wheel         912 Sep  2 13:56 ,reservations
-rw-r--r--  1 root  wheel        1372 Sep  2 13:56 Shelf:DiskShelf14
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v0.16:NETAPP__:VD-1000MB-FZ-520:14001600:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v0.17:NETAPP__:VD-1000MB-FZ-520:14001601:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v0.18:NETAPP__:VD-1000MB-FZ-520:14001602:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v0.19:NETAPP__:VD-1000MB-FZ-520:14001603:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v0.20:NETAPP__:VD-1000MB-FZ-520:14001604:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v0.21:NETAPP__:VD-1000MB-FZ-520:14001605:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:10 v0.22:NETAPP__:VD-1000MB-FZ-520:14001606:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v0.24:NETAPP__:VD-1000MB-FZ-520:14001607:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v0.25:NETAPP__:VD-1000MB-FZ-520:14001608:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v0.26:NETAPP__:VD-1000MB-FZ-520:14001709:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v0.27:NETAPP__:VD-1000MB-FZ-520:14001710:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v0.28:NETAPP__:VD-1000MB-FZ-520:14001711:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v0.29:NETAPP__:VD-1000MB-FZ-520:14001712:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v0.32:NETAPP__:VD-1000MB-FZ-520:14001713:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v1.16:NETAPP__:VD-1000MB-FZ-520:16391700:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v1.17:NETAPP__:VD-1000MB-FZ-520:16391701:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v1.18:NETAPP__:VD-1000MB-FZ-520:16391702:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:27 v1.19:NETAPP__:VD-1000MB-FZ-520:16391703:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.20:NETAPP__:VD-1000MB-FZ-520:16391704:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.21:NETAPP__:VD-1000MB-FZ-520:16391705:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.22:NETAPP__:VD-1000MB-FZ-520:16391706:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.24:NETAPP__:VD-1000MB-FZ-520:16391707:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.25:NETAPP__:VD-1000MB-FZ-520:16391708:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.26:NETAPP__:VD-1000MB-FZ-520:16391709:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.27:NETAPP__:VD-1000MB-FZ-520:16391710:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 13:05 v1.28:NETAPP__:VD-1000MB-FZ-520:16391711:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 11:50 v1.29:NETAPP__:VD-1000MB-FZ-520:16391712:2104448
-rw-r--r--  1 root  wheel  1094312960 Sep 24 11:50 v1.32:NETAPP__:VD-1000MB-FZ-520:16391713:2104448
::*>

いまある仮想ディスクを削除する場合は「systemshell localhost “sudo rm /sim/dev/,disks/*”」と実行します。

削除した後の、ディスク再作成はvsim_makedisksというコマンドで実行します。

いろいろオプションがあるのでまずは「systemshell local “vsim_makedisks -h”」と実行して確認します。

::*> systemshell local "vsim_makedisks -h"
Usage: /usr/sbin/vsim_makedisks [ -n <additional number of disks to create> ]
          [ -t <disk type ID> ]
          [ -e <additional sectors> ]
          [ -a <adapter on which to start populating disks ]
          [ -h ]

By default 5 disks will be added. The <disk type ID> can be one
of the following: (NOTE, 0 is the default)
                                                               Fast
Type Vendor ID Product ID       Usable Size[B] Actual Size[B]  Zero  BPS   RPM
  0  NETAPP__  VD-16MB_________     16,777,216     38,273,024   No   512  10000
  1  NETAPP__  VD-35MB_________     35,913,728     57,409,536   No   512  10000
  2  NETAPP__  VD-50MB_________     52,428,800     73,924,608   No   512  10000
  3  NETAPP__  VD-100MB________    104,857,600    126,353,408   No   512  10000
  4  NETAPP__  VD-500MB________    524,288,000    545,783,808   No   512  10000
  5  NETAPP__  VD-1000MB_______  1,048,576,000  1,070,071,808   No   512  10000
  6  NETAPP__  VD-16MB-FZ______     16,777,216     38,273,024   Yes  512  15000
  7  NETAPP__  VD-35MB-FZ______     35,913,728     57,409,536   Yes  512  15000
  8  NETAPP__  VD-50MB-FZ______     52,428,800     73,924,608   Yes  512  15000
  9  NETAPP__  VD-100MB-FZ_____    104,857,600    126,353,408   Yes  512  15000
 10  NETAPP__  VD-500MB-FZ_____    524,288,000    545,783,808   Yes  512  15000
 11  NETAPP__  VD-1000MB-FZ____  1,048,576,000  1,070,071,808   Yes  512  15000
 12  NETAPP__  VD-16MB-520_____     16,777,216     38,273,024   No   520  10000
 13  NETAPP__  VD-35MB-520_____     35,913,728     57,409,536   No   520  10000
 14  NETAPP__  VD-50MB-520_____     52,428,800     73,924,608   No   520  10000
 15  NETAPP__  VD-100MB-520____    104,857,600    126,353,408   No   520  10000
 16  NETAPP__  VD-500MB-520____    524,288,000    545,783,808   No   520  10000
 17  NETAPP__  VD-1000MB-520___  1,048,576,000  1,070,071,808   No   520  10000
 18  NETAPP__  VD-16MB-FZ-520__     16,777,216     38,273,024   Yes  520  15000
 19  NETAPP__  VD-35MB-FZ-520__     35,913,728     57,409,536   Yes  520  15000
 20  NETAPP__  VD-50MB-FZ-520__     52,428,800     73,924,608   Yes  520  15000
 21  NETAPP__  VD-100MB-FZ-520_    104,857,600    126,353,408   Yes  520  15000
 22  NETAPP__  VD-500MB-FZ-520_    524,288,000    545,783,808   Yes  520  15000
 23  NETAPP__  VD-1000MB-FZ-520  1,048,576,000  1,070,071,808   Yes  520  15000
 24  NETAPP__  VD-16MB-FZ-ATA__     16,777,216     51,388,416   Yes  512   7200
 25  NETAPP__  VD-35MB-FZ-ATA__     36,700,160     73,801,728   Yes  512   7200
 26  NETAPP__  VD-50MB-FZ-ATA__     52,428,800     91,496,448   Yes  512   7200
 27  NETAPP__  VD-100MB-FZ-ATA_    104,857,600    150,478,848   Yes  512   7200
 28  NETAPP__  VD-500MB-FZ-ATA_    524,288,000    622,338,048   Yes  512   7200
 29  NETAPP__  VD-1000MB-FZ-ATA  1,048,576,000  1,212,162,048   Yes  512   7200
 30  NETAPP__  VD-2000MB-FZ-520  2,097,512,000  2,119,007,808   Yes  520  15000
 31  NETAPP__  VD-4000MB-FZ-520  4,194,304,000  4,215,799,808   Yes  520  15000
 32  NETAPP__  VD-2000MB-FZ-ATA  2,097,512,000  2,391,810,048   Yes  512   7200
 33  NETAPP__  VD-4000MB-FZ-ATA  4,194,304,000  4,751,106,048   Yes  512   7200
 34  NETAPP__  VD-100MB-SS-512_    104,857,600    126,353,408   Yes  512  15000
 35  NETAPP__  VD-500MB-SS-520_    524,288,000    545,783,808   Yes  520  15000
 36  NETAPP__  VD-9000MB-FZ-520  9,437,184,000  9,458,679,808   Yes  520  15000
 37  NETAPP__  VD-9000MB-FZ-ATA  9,437,184,000 10,649,346,048   Yes  512   7200

::*>

いろんなディスクタイプが選択できますが、BPSが520になっているものを優先して選びます。

その中で一番容量が大きいのは36番なので、「-t 36」というオプションを使います。

今回は60本を増設してみます(なお、あとで分かりますが、56本までしか認識してくれませんでした)

アダプタ0配下に20本追加するコマンド「systemshell localhost “cd /sim/dev;sudo vsim_makedisks -t 36 -n 20 -a 0″」を実行します。

アダプタ1配下に20本追加するコマンド「systemshell localhost “cd /sim/dev;sudo vsim_makedisks -t 36 -n 20 -a 1″」を実行します。

アダプタ2配下に20本追加するコマンド「systemshell localhost “cd /sim/dev;sudo vsim_makedisks -t 36 -n 20 -a 2″」を実行します。

作成したら「halt local」で停止をして、再起動します。

これで起動すればOKです。

Windowsで簡易的にWebサーバをたてるソフト HFS


むかしはネットワーク機器のfirmware versionアップにtftpやftpなどを使うことが多かった。

最近はhttp経由という例が増えている。

Windows標準のIISだと大がかりすぎるのでもっと簡単にできるものを探して「簡単WEBサーバー」というものを試したのだが、これはGETしか実装していないという中途半端なものだった。

GETしか実装されていないと何が問題になるかと言うと、ファイルダウンロード前にHEADでファイルサイズを確認し、保存できる領域があるかを確認する、という動作をする機器の場合、HEADが実装されていないため容量確認ができず、ダウンロードが実施できない、ということになる。

で、探したところ「HFS ~ Http File Server」というものを発見。

これは2MBのバイナリでインストール不要というもの。

hfs.exeを実行すると下記の様にウィンドウが立ち上がり、Webサーバとして動作しだす。

ファイルの登録は簡単で、登録したいファイルの右クリックメニューから「Add to HFS」を選択するだけ、となっている。

追加すると下記の様に/直下に配置される。ファイルを選択するとダウンロードに使用するURLが表示されるという点も便利

ダウンロードが開始されるとLogウインドウにどういうリクエストがあったのかが表示される。

起動したWindowsに複数のIPアドレスがある場合、どのIPアドレスで公開するかは選択できる。

ポート番号は80以外にも設定することはできる(httpsは未対応)

サービスとして動作させることはできないが、Windows起動時にHFSを実行する、という設定もある

ONTAP 9でCIFS/NFS共有へのアクセス確認


NetApp ONTAP9でCIFS/NFS共有を作った時に、指定ディレクトリに対してアクセスできるかどうかをNetApp側で確認する手法

export policy上でクライアントIPからのアクセス状況確認

export policy上で、該当IPアドレスからのアクセスを受け付ける設定になっているかを確認

「vserver export-policy check-access」を使用する。

CIFSアクセスの確認

ontap-select-cluster::> vserver export-policy check-access -vserver svm0 -volume testvol -qtree ntfs-test1 -client-ip  172.17.44.50 -authentication-method ntlm -protocol cifs -access-type read-write
                                         Policy    Policy       Rule
Path                          Policy     Owner     Owner Type  Index Access
----------------------------- ---------- --------- ---------- ------ ----------
/                             default    svm0_root volume          1 read
/testvol                      testvol    testvol   volume          8 read
/testvol/ntfs-test1           testvol    ntfs-test1
                                                   qtree           8 read-write
3 entries were displayed.

ontap-select-cluster::>

NFSアクセスの確認

ontap-select-cluster::> vserver export-policy check-access -vserver svm0 -volume testvol -qtree ntfs-test1 -client-ip  172.17.44.50 -authentication-method sys -protocol nfs4 -access-type read-write
                                         Policy    Policy       Rule
Path                          Policy     Owner     Owner Type  Index Access
----------------------------- ---------- --------- ---------- ------ ----------
/                             default    svm0_root volume          1 read
/testvol                      testvol    testvol   volume          8 read
/testvol/ntfs-test1           testvol    ntfs-test1
                                                   qtree           8 read-write
3 entries were displayed.

ontap-select-cluster::>

該当ディレクトリ/ファイルの権限確認

NetApp上のパスを指定して、そこに与えられている権限がどのようになっているかを確認する。

「vserver security file-directory show」コマンドを使う。

NTFS/mixedの場合

ontap-select-cluster::> vserver security file-directory show -vserver svm0 -path /testvol/ntfs-test1

                Vserver: svm0
              File Path: /testvol/ntfs-test1
      File Inode Number: 966
         Security Style: mixed
        Effective Style: ntfs
         DOS Attributes: 10
 DOS Attributes in Text: ----D---
Expanded Dos Attributes: -
           UNIX User Id: 0
          UNIX Group Id: 0
         UNIX Mode Bits: 777
 UNIX Mode Bits in Text: rwxrwxrwx
                   ACLs: NTFS Security Descriptor
                         Control:0x8004
                         Owner:BUILTIN\Administrators
                         Group:BUILTIN\Administrators
                         DACL - ACEs
                           ALLOW-Everyone-0x1f01ff
                           ALLOW-Everyone-0x10000000-OI|CI|IO

ontap-select-cluster::>

NFSの場合

ontap-select-cluster::> vserver security file-directory show -vserver svm0 -path /testvol/test

                Vserver: svm0
              File Path: /testvol/test
      File Inode Number: 96
         Security Style: unix
        Effective Style: unix
         DOS Attributes: 10
 DOS Attributes in Text: ----D---
Expanded Dos Attributes: -
           UNIX User Id: 0
          UNIX Group Id: 0
         UNIX Mode Bits: 777
 UNIX Mode Bits in Text: rwxrwxrwx
                   ACLs: -

ontap-select-cluster::>

ユーザ名の変換について

UNIX上のユーザ名とWindows上のユーザ名の変換状況を確認しつつ、該当ディレクトリ/ファイルにアクセスできるかを確認するには「vserver security file-directory show-effective-permissions」を使用する。

NTFS/mixedの場合

ontap-select-cluster::> vserver security file-directory show-effective-permissions -vserver svm0 -path /testvol/ntfs-test1 -unix-user-name root

              Vserver: svm0
    Windows User Name: ADOSAKANA\Administrator
       Unix User Name: root
            File Path: /testvol/ntfs-test1
      CIFS Share Path: -
Effective Permissions:
                       Effective File or Directory Permission: 0x1f01ff
                        Read
                        Write
                        Append
                        Read EA
                        Write EA
                        Execute
                        Delete Child
                        Read Attributes
                        Write Attributes
                        Delete
                        Read Control
                        Write DAC
                        Write Owner
                        Synchronize

ontap-select-cluster::> vserver security file-directory show-effective-permissions -vserver svm0 -path /testvol/ntfs-test1 -win-user-name administrator

              Vserver: svm0
    Windows User Name: administrator
       Unix User Name: root
            File Path: /testvol/ntfs-test1
      CIFS Share Path: -
Effective Permissions:
                       Effective File or Directory Permission: 0x1f01ff
                        Read
                        Write
                        Append
                        Read EA
                        Write EA
                        Execute
                        Delete Child
                        Read Attributes
                        Write Attributes
                        Delete
                        Read Control
                        Write DAC
                        Write Owner
                        Synchronize

ontap-select-cluster::>

NFSの場合

ontap-select-cluster::> vserver security file-directory show-effective-permissions -vserver svm0 -path /testvol/test1 -unix-user-name root

              Vserver: svm0
    Windows User Name: ADOSAKANA\Administrator
       Unix User Name: root
            File Path: /testvol/test1
      CIFS Share Path: -
Effective Permissions:
                       Effective File or Directory Permission: 0x11f01ff
                        Read
                        Write
                        Append
                        Read EA
                        Write EA
                        Execute
                        Delete Child
                        Read Attributes
                        Write Attributes
                        Delete
                        Read Control
                        Write DAC
                        Write Owner
                        Synchronize
                        System Security

ontap-select-cluster::> vserver security file-directory show-effective-permissions -vserver svm0 -path /testvol/test1 -win-user-name ADOSAKANA\administrator

              Vserver: svm0
    Windows User Name: ADOSAKANA\administrator
       Unix User Name: root
            File Path: /testvol/test1
      CIFS Share Path: -
Effective Permissions:
                       Effective File or Directory Permission: 0x11f01ff
                        Read
                        Write
                        Append
                        Read EA
                        Write EA
                        Execute
                        Delete Child
                        Read Attributes
                        Write Attributes
                        Delete
                        Read Control
                        Write DAC
                        Write Owner
                        Synchronize
                        System Security

ontap-select-cluster::>