ONTAPシミュレータを9.7から9.10.1にアップデートしようとしたらIllegal instructionとwaiting until daemon ktlsd starts upで失敗した


※ この問題はシミュレータ環境で実施した場合の話で、実機では発生しないはずです

ONTAP 9.7からONTAP 9.10.1へのアップデートを行おうとした場合の手順を確認してみたところ、ドキュメントによれば、ダイレクトマルチホップアップデートを行うとある。

具体的にどう操作すればいいのか確認するために、vSphere仮想環境上にONTAPシミュレータ 9.7のOVAファイルを展開して実験することにした。

手順としては、管理Webの[クラスタ]-[概要]の「ONTAPの更新」にて、イメージの追加から「ONTAP 9.8のアップデートファイル」と「ONTAP 9.10.1のアップデートファイル」の2種類を追加する。

読み込みが終わったら「9.10.1」の方を選択して「更新」を実行

あとは終わるまでユーザができることはなにも無い。

まずはONTAP 9.7からONTAP 9.8へのアップデートが実行される

しばらくすると、ノードが再起動してONTAP 9.8で起動してくる。そして、ONTAP 9.10.1へのアップデートが始まる

終わるとONTAP 9.10.1で起動している、ということとなる。

が・・・ここまで来るのにいくつか問題が発生した。

vol0容量問題

vol0の容量が10GBだと途中で失敗した。とりあえず15GBで実施し、成功した。

ONTAP 9.8とONTAP 9.10.1のイメージを2つ処理するには不足していた模様。

ONTAPシミュレータ構築時にディスク構成を変えておくことを推奨する→「NetApp ONTAPシミュレータのディスク構成を変更する

作成済みの場合は、ディスクを追加する、という手順でも良い→「ONTAP 9.7シミュレータのシステムボリュームを拡張する

システムメモリ問題

ONTAPシミュレータ仮想マシンに割り当てるメモリはONTAP 9.10.1シミュレータでも6GBなので、メモリ6GBならいけるのかなー、と思ってたんですが失敗した際のメッセージの1つに「WAFL is running low on memory, with 14MB remaining.」というものが見られた。

このため、アップグレード処理にメモリ容量が6GBでは足らないのでは?という疑惑があったため、10GBに増やして実施した。

Illegal instruction問題

ONTAP 9.7からONTAP 9.8へのアップデートは問題なく完了し、ONTAP 9.10.1へのアップデートが行われようとするタイミングで「Illegal instruction」というエラーが表示された。

そのあと「Waiting until daemon ktlsd starts up.」というメッセージが無限に出力され続けた。

こちらについてはNetApp KBに「ONTAP Select Node fails to boot 9.9.1 due to “Illegal instruction”」というものが載っている。

ONTAP シミュレータ 9.7 でONTAP 9.10.1にアップデートしようとしてIllegal instructionが表示される、というのは微妙に関係していて、vSphere仮想マシンのHWバージョンの問題だった。

ONTAP シミュレータHWバージョン説明書きHWバージョン
8.3.2ESX/ESXi 4.x 仮想マシン7
9.1ESX/ESXi 4.x 仮想マシン7
9.7ESX/ESXi 4.x 仮想マシン7
9.8ESXi 5.5 仮想マシン10
9.10.1ESXi 5.5 仮想マシン10
9.11.1ESXi 5.5 仮想マシン10

上記の様にONTAP 9.8から使用する仮想マシンHWバージョンが変更になっている。

ONTAP シミュレータ9.7仮想マシンの仮想マシンHWを10に変更したところ、Illegal instruction無しにアップデート動作が実行できるようになった。


2023/11/01追記

ONTAP 9.5シミュレータ 仮想マシンはHW 4であるところをHW10にアップデート、またメモリを8GBから10GBに変更して起動してみたらが、特に動作上問題は発生しなかった。

また、ONTAP 9.5でvol0容量を10GBに変更した上で、ONTAP9.5→ONTAP 9.7→(ONTAP9.8)→ONTAP 9.11.1 のアップデートを行い成功した。

検証用にCentOS5を新規インストールしたら面倒だった 2024/01/09版


2024/01/09追記: 2024/01/09にCentOS 5.11のインストールを試み、この記事の内容が引き続き使えることを確認した。(記事自体への修正はない)


検証のため古いOSを2022年にインストールしてみるシリーズ、今回はCentOS5をインストールする必要がありインストールした。(これまで「Windows Server 2008R2編」「Windows 7編」)

久しぶりすぎて忘れていたこととか、2022年の現状だと発生することとか、いろいろあったのでメモ書きとして残す。

vSphere環境上にインストールしたのだが、まず設定でいくつか問題が・・・

NICが認識できない

vSphere仮想マシンを新規作成する際のゲストOSを「CentOS 4/5以降 (64ビット)」で作成すると

ネットワークアダプタが「VMXNET3」として作成される。

しかし、VMXNET3のドライバはCentOS5.11のインストールISOには含まれていないため、ネットワーク接続が行えない

インストール直後からネットワーク接続を行いたい場合はアダプタタイプを「E1000」あたりで設定して作成する。

VMware Toolsが用意されていない

最近のESXiに含まれているVMware Toolsのlinux.iso にはRHEL5/CentOS5で使えるVMware Toolsが入っていない。

RHEL5/CentOS5に対応するのはVMware Tools 10.3.22までで、10.3.23以降は対応していない。

以前と同じように https://packages.vmware.com/tools/releases/10.3.22/ にあるレポジトリRPM をインストールしてyumコマンドでvmware-toolsをインストールしようとしたのですが、packages.vmware.com がTLS1.2のみ許可するWebサーバ設定となっているため、CentOS5からではファイルがダウンロードできない状態となっています。

このため https://www.vmware.com/go/tools から VMware Tools 10.3.22のダウンロードリンク から VMware Tools packages for Linuxをダウンロードして使うこととなる。

CentOS5の更新がダウンロードできない

CentOS5.11をインストールした直後の状態で yum check-update を実行すると下記のエラーとなる。

# yum check-update
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
#

これはmirrorlistでCentOS5用のファイルが提供されなくなったためのエラーとなる。

これに対してはmirrorlistではなくbaseurlに変更し、URLを「http://mirror.centos.org/centos/$releasever/~」から「http://vault.centos.org/centos/5.11/~」に書き換える、という手法が知られている。

しかし、2022年8月時点ではこの手法で書き換えた場合、「M2Crypto.SSL.SSLError: unknown protocol」というエラーで失敗する

# yum check-update
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 309, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 178, in main
    result, resultmsgs = base.doCommands()
  File "/usr/share/yum-cli/cli.py", line 345, in doCommands
    self._getTs(needTsRemove)
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 101, in _getTs
    self._getTsInfo(remove_only)
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 112, in _getTsInfo
    pkgSack = self.pkgSack
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 662, in <lambda>
    pkgSack = property(fget=lambda self: self._getSacks(),
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 502, in _getSacks
    self.repos.populateSack(which=repos)
  File "/usr/lib/python2.4/site-packages/yum/repos.py", line 260, in populateSack
    sack.populate(repo, mdtype, callback, cacheonly)
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 168, in populate
    if self._check_db_version(repo, mydbtype):
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 226, in _check_db_version
    return repo._check_db_version(mdtype)
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 1226, in _check_db_version
    repoXML = self.repoXML
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 1399, in <lambda>
    repoXML = property(fget=lambda self: self._getRepoXML(),
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 1391, in _getRepoXML
    self._loadRepoXML(text=self)
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 1381, in _loadRepoXML
    return self._groupLoadRepoXML(text, ["primary"])
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 1365, in _groupLoadRepoXML
    if self._commonLoadRepoXML(text):
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 1201, in _commonLoadRepoXML
    result = self._getFileRepoXML(local, text)
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 974, in _getFileRepoXML
    cache=self.http_caching == 'all')
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 811, in _getFile
    http_headers=headers,
  File "/usr/lib/python2.4/site-packages/urlgrabber/mirror.py", line 412, in urlgrab
    return self._mirror_try(func, url, kw)
  File "/usr/lib/python2.4/site-packages/urlgrabber/mirror.py", line 398, in _mirror_try
    return func_ref( *(fullurl,), **kwargs )
  File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 936, in urlgrab
    return self._retry(opts, retryfunc, url, filename)
  File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 854, in _retry
    r = apply(func, (opts,) + args, {})
  File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 922, in retryfunc
    fo = URLGrabberFileObject(url, filename, opts)
  File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 1010, in __init__
    self._do_open()
  File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 1093, in _do_open
    fo, hdr = self._make_request(req, opener)
  File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 1202, in _make_request
    fo = opener.open(req)
  File "/usr/lib64/python2.4/urllib2.py", line 364, in open
    response = meth(req, response)
  File "/usr/lib64/python2.4/urllib2.py", line 471, in http_response
    response = self.parent.error(
  File "/usr/lib64/python2.4/urllib2.py", line 396, in error
    result = self._call_chain(*args)
  File "/usr/lib64/python2.4/urllib2.py", line 337, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.4/urllib2.py", line 565, in http_error_302
    return self.parent.open(new)
  File "/usr/lib64/python2.4/urllib2.py", line 358, in open
    response = self._open(req, data)
  File "/usr/lib64/python2.4/urllib2.py", line 376, in _open
    '_open', req)
  File "/usr/lib64/python2.4/urllib2.py", line 337, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.4/site-packages/M2Crypto/m2urllib2.py", line 82, in https_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib64/python2.4/httplib.py", line 810, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib64/python2.4/httplib.py", line 833, in _send_request
    self.endheaders()
  File "/usr/lib64/python2.4/httplib.py", line 804, in endheaders
    self._send_output()
  File "/usr/lib64/python2.4/httplib.py", line 685, in _send_output
    self.send(msg)
  File "/usr/lib64/python2.4/httplib.py", line 652, in send
    self.connect()
  File "/usr/lib64/python2.4/site-packages/M2Crypto/httpslib.py", line 55, in connect
    sock.connect((self.host, self.port))
  File "/usr/lib64/python2.4/site-packages/M2Crypto/SSL/Connection.py", line 174, in connect
    ret = self.connect_ssl()
  File "/usr/lib64/python2.4/site-packages/M2Crypto/SSL/Connection.py", line 167, in connect_ssl
    return m2.ssl_connect(self.ssl, self._timeout)
M2Crypto.SSL.SSLError: unknown protocol
#

これは、 vault.centos.org が TLS 1.2を使用したhttpsアクセスしか受け付けなくなったが、CentOS5側ではTLS 1.2に非対応であるため、TLS 1.2が理解できず「unknown protocol」となっている、という状態である。

2022年8月時点では archive.kernel.org は http アクセスを許可してくれているため、URLを「http://archive.kernel.org/centos-vault/5.11/」に書き換えることで、CentOS5のアップデートが行えるようになる。

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
baseurl=http://archive.kernel.org/centos-vault/5.11/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://archive.kernel.org/centos-vault/5.11/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
baseurl=http://archive.kernel.org/centos-vault/5.11/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch/
baseurl=http://archive.kernel.org/centos-vault/5.11/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://vault.centos.org/centos/$releasever/contrib/$basearch/
baseurl=http://archive.kernel.org/centos-vault/5.11/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

ラズパイ4相当の性能が出るらしいRISC-VコアのSBC StarFive Vision Five 2のクラウドファンディングが進行中


2022/12/30追記: 届いたので記事追加中です。

StarFive Vision Five 2の2022年12月出荷分を使うには面倒くさい手順が必要


例のごとくにcnxsoftwareで「StarFive VisionFive 2 quad-core RISC-V SBC launched for $46 and up (Crowdfunding)」という記事が出ていて、RISC-Vコアのボードのクラファン案件を知る

RISC-Vコアを実装しているベンダの1つであるStarFive techが新しくRV64GCを4コアつんだSoC JH7110を開発し、それを積んだボード StarFive Vision Five 2のクラウドファンディングを開始した、というもの

現時点で公開されているスペックは下記

1Gb NICが2ポートあるというのは興味深い。

そして、M.2 M-Keyのストレージスロットがあるので、そこを使うとそこそこのストレージ性能は出せそうな雰囲気

電源供給はType-C PDとGPIO経由というのはラズパイ4と同等という感じ。

大きさはラズパイ4が85*56mmのところ、100*72mmと大きい

その他、ラズパイ4とスペック比較をすると、下記のようになっており、オレンジになってる部分はスペックが上ということになっている。

GPUがOpenGL ES3.2.OpenCL 1.2, Vulkan 1.2対応と額面スペックとしては上になっているが、はたして実装/実態はどうなっていることか?

そして、気になる新SoC JH7110の演算性能は下記のようにうたわれている。

そして、GPUベンチマークについては上だということになっている。

気になる価格は下記

ただ、今回のクラファンでは、4GBモデルは2022年11月出荷を目指すものの、それ以外の2GBモデルと8GBモデルについては2023年2月出荷予定、と遅れている点に注意が必要。

さしあたっては面白そうなので「VF2-4GB」のSuper Early Birdに1枠入れました。日本への送料込みで約8千円といったところです。

はたして、どのようになるか楽しみですね。

NFS v4ではUTF-8ファイルのみ使用でき、EUCファイル名は使用できない


むかしからSolarisサーバを使っているユーザのとこにNetAppを入れることになった。

どうやらEUC-JPファイル名のものがあるらしいのでNetAppのvolume language を ja_v1で作成してから検証してみたところ、Solaris10環境からNFSマウントして書き込もうとすると「引数が正しくありません」というエラーとなり書き込みが出来ない。

しばらくあれやこれや悩んだ結果、「NFS v4で許されているファイル名は UTF-8 記述のものだけ」という仕様上の問題であることが判明した。(RFC7530 Network File System (NFS) Version 4 Protocol の 12.4. String Encoding に記載)

このため、EUC-JPのファイル名を使いたい場合は、NFS ver3でマウントすることが必須、ということが分かった。

検証過程

まず、Solaris10環境から、NFS ver4で /mnt4 にマウントし、NFS ver3で /mnt3 にマウントした。

# mount 172.17.44.103:/eucvol /mnt4
# mount -o vers=3 172.17.44.103:/eucvol /mnt3
# df -h|grep mnt
mnttab                   0K     0K     0K     0%    /etc/mnttab
172.17.44.103:/eucvol   1.9G   808K   1.9G     1%    /mnt4
172.17.44.103:/eucvol   1.9G   808K   1.9G     1%    /mnt3
# mount|grep /mnt
/etc/mnttab on mnttab read/write/setuid/devices/rstchown/dev=4c80001 on (金)  8 月 12 15:30:07 2022
/mnt4 on 172.17.44.103:/eucvol remote/read/write/setuid/devices/rstchown/xattr/dev=4f40004 on (金)  8月 12 15:33:31 2022
/mnt3 on 172.17.44.103:/eucvol remote/read/write/setuid/devices/rstchown/vers=3/xattr/dev=4f40005 on (金)  8月 12 15:33:38 2022
#

この状態でそれぞれを確認すると、下記の様になっている。

# ls -l /mnt3
合計 8
-rw-r--r--   1 root     root           6  8月 10日  14:37 test.txt
-rw-r--r--   1 root     root           0  8月 10日  14:51 てすと
drwxr-xr-x   2 root     other       4096  8月 10日  14:35 表計算
# ls -l /mnt4
合計 8
-rw-r--r--   1 root     root           6  8月 10日  14:37 test.txt
-rw-r--r--   1 root     root           0  8月 10日  14:51 礒窿
・rwxr-xr-x   2 root     daemon      4096  8月 10日  14:35 茵 ・
・
#

NFS ver4でマウントしている /mnt4 の方は日本語文字(EUC-JP)が正常に表示できていない。

次に /tmp/てすと2 のコピーを試みる

# cp  /tmp/てすと2 /mnt4
cp: /mnt4/てすと2 を作成できません: 引数が正しくありません。
# LANG=C
# export LANG
# date
Fri Aug 12 15:37:39 JST 2022
# cp  /tmp/てすと2 /mnt4
cp: cannot create /mnt4/てすと2: Invalid argument
#

NFS ver4でマウントしている領域へのコピーは「引数が正しくありません」、英語メッセージの場合は「Invalid argument」で失敗する。

対して、NFS ver3領域へのコピーは問題なく実施できる。

# LANG=ja
# export LANG
# date
2022年08月12日 (金) 15時39分11秒 JST
# cp /tmp/てすと2 /mnt3
# ls -l /mnt3
合計 8
-rw-r--r--   1 root     root           6  8月 10日  14:37 test.txt
-rw-r--r--   1 root     root           0  8月 10日  14:51 てすと
-rw-r--r--   1 root     root           8  8月 12日  15:39 てすと2
drwxr-xr-x   2 root     other       4096  8月 10日  14:35 表計算
#

なお、この領域をWindows側から見た場合はこのように正常に表示されている。

ちなみに・・・ONTAP CLIからvolume languageコマンドを実行してみたところ、標準権限(admin)とadvanced権限とで表示される内容が違う、というのが興味深かったです。

netapp101::> volume language -vserver netapp103 -volume eucvol

Volume language is ja_v1 (Japanese euc-j) for netapp103:eucvol

netapp101::> set adv

Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel.
Do you want to continue? {y|n}: y

netapp101::*> volume language -vserver netapp103 -volume eucvol

Volume language is ja_v1 (Japanese euc-j) for netapp103:eucvol

Translation Versions
        OEM Character set is cp932_v1|cp932_v1|Wed Jan 22 23:18:24 UTC 2003 for netapp103:eucvol

        NFS Character set is eucj_v1|eucj_v1|Wed Jan 22 00:46:42 UTC 2003 for netapp103:eucvol

netapp101::*>

ONTAP 9.x環境でActive DirectoryとNISとでユーザ名マッピングを行わせた場合の確認手法


Windows Active Direcotry環境とNISによるユーザ管理を行っているSolaris/Linux環境の両方からONTAP 9.9上の共有にアクセスする場合、ユーザ名マッピング設定を行う。

ただ、指定したマッピングが正しく動いているかを確認する方法がわかりにくいのでメモ書き。

(関連資料「ONTAP 9.xでntpやDNSの動作確認」)

今回はStorage VM:netapp103に対して、 Active Directory:VM2 (vm2.adosakana.local) と NISドメイン:nisdom を接続した。

NISに接続できているかを確認

「vserver services name-service nis-domain show」で設定を確認

netapp101::> vserver services name-service nis-domain show
                                  NIS
Vserver       Domain              Server
------------- ------------------- ------------------------------------
netapp103     nisdom              172.17.44.49

netapp101::>

接続できているかを確認するには「vserver services name-service nis-domain show-bound」を実行する。接続できている場合は「Bound NIS Server」に接続出来ているNISサーバのIPアドレスが表示される。

netapp101::> vserver services name-service nis-domain show-bound
                                  Bound
Vserver       Domain              NIS Server
------------- ------------------- -----------------
netapp103     nisdom              172.17.44.49

netapp101::>

接続できていない場合は、「-」という表示になる

netapp101::> vserver services name-service nis-domain show-bound
                                  Bound
Vserver       Domain              NIS Server
------------- ------------------- -----------------
netapp103     nisdom              -

netapp101::>

なぜ接続出来ていないかを確認するには権限をdiagに変更した上で「vserver services name-service nis-domain show-bound-debug」を実行して確認する。(advancedでは使えない)

netapp101::*> vserver services name-service nis-domain show-bound-debug
                                  Bound              Bound
Vserver       Domain              NIS Server         Status
------------- ------------------- -----------------  -------------------
netapp103     nisdom              172.17.44.49       Could not connect to server

netapp101::*>

今回は「Could not connect to server」ということで、NISサーバへの接続がうまくいかない、ということだった。確認したところ、途中のfirewall設定の問題でNISに関するポートが空いていないためだった。

設定変更後、手動でNISの再接続を行う場合は、ypbindの再起動を行う。このコマンドはノード名を指定することに注意

netapp101::*> vserver services name-service ypbind restart -node ノード名

netapp101::*>

再度「vserver services name-service nis-domain show-bound-debug」を実行して「Status: Success」となっていれば問題ない。

netapp101::*> vserver services name-service nis-domain show-bound-debug
                                  Bound              Bound
Vserver       Domain              NIS Server         Status
------------- ------------------- -----------------  -------------------
netapp103     nisdom              172.17.44.49       Success

netapp101::*>

ネームサービススイッチ設定

/etc/nsswitch.confに相当する設定をStorage VMに対して行い、ユーザ名とグループ名に関してNISから情報を持ってくるように設定する。

設定を確認するには「vserver services ns-switch show」を実行する

netapp101::> vserver services ns-switch show
                               Source
Vserver         Database       Order
--------------- ------------   ---------
netapp103       hosts          files,
                               dns
netapp103       group          files,
                               nis
netapp103       passwd         files,
                               nis
netapp103       netgroup       files
netapp103       namemap        files
netapp101     hosts          files,
                               dns
netapp101     group          files
netapp101     passwd         files
8 entries were displayed.
netapp101::>

UNIX側でLDAP情報を使っていない場合は、LDAPを登録する必要は無い。(Windows側だけでActive Directory/LDAPを使っている場合はnsswitchには登録しない)

なお、ONTAP 9.xでは、NISを使用できるのは passwd, group, netgroup となっており、hosts では使用できない。

情報取得の確認

まず、UNIX側のユーザ名とUIDに関する情報がひけるかを確認するため「vserver services name-service getxxbyyy getpwbyname」と「vserver services name-service getxxbyyy getpwbyuid」を実行する。

これらはadvanced権限が必要となっているので「set adv」で切り替えてから実行する。

netpp101::*> vserver services name-service getxxbyyy getpwbyname -vserver netapp103 -username osakanataro
pw_name: osakanataro
pw_passwd: !!
pw_uid: 1000
pw_gid: 1000
pw_gecos:
pw_dir: /home/osakanataro
pw_shell: /bin/bash


netpp101::*> vserver services name-service getxxbyyy getpwbyuid -vserver netapp103 -userID 1000
pw_name: osakanataro
pw_passwd: !!
pw_uid: 1000
pw_gid: 1000
pw_gecos:
pw_dir: /home/osakanataro
pw_shell: /bin/bash


netpp101::*>

このような形で情報が引けたら問題ない

うまく取得出来ていない場合は、下記の様な出力となる

netapp101::*> vserver services name-service getxxbyyy getpwbyname -vserver netapp103 -username osakanataro

Error: command failed: Failed to resolve osakanataro. Reason: Entry not found for
       "username: osakanataro".

netapp101::*>

マッピング設定

UNIX/Linuxのユーザ名/UIDとWindowsのユーザ名/SIDを変換するには ONTAPにネームマッピング設定を行う必要がある。

WindowsからUNIX/Linuxに対するマッピング(win-unix)と、UNIX/Linuxに対するマッピング(unix-win)の2種類を設定する必要がある。

netapp101::> vserver name-mapping show

Vserver:   netapp103
Direction: win-unix
Position Hostname         IP Address/Mask
-------- ---------------- ----------------
1       -                 -                   Pattern: VM2\\*
                                          Replacement: *

Vserver:   netapp103
Direction: unix-win
Position Hostname         IP Address/Mask
-------- ---------------- ----------------
1       -                 -                   Pattern: *
                                          Replacement: VM2\\*
2 entries were displayed.

netapp101::>

基本的に1対1となるようであれば、「ADドメイン\Windowsユーザ名」→「UNIXユーザ名」というルール(win-unixにある「VM2\\* → *」)と「UNIXユーザ名」→「ADドメイン\Windowsユーザ名」(unix-winにある「* → VM2\\*」)を設定することになる。

なお、”\”は2つ指定する必要がある。

マッピングの確認

実際にどのようなマッピングが行われているのかを確認するには「vserver services access-check name-mapping show」を使います。このコマンドもadvanced権限が必要です。

netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction win-unix -name osakanataro

ATTENTION: Mapping of Data ONTAP "admin" users to UNIX user "root" is enabled, but the following information does not reflect this mapping.

'osakanataro' maps to 'osakanataro'


netapp101::*> 
Windowsの名前からUNIXを探すときはにユーザ名を「-name "vm2\\osakanataro"」というように"でくくると正常な動作とならないので注意。
また、ドメインとユーザの区切りは「\\」と2つ続ける必要がある。
netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction win-unix -name vm2\\osakanataro

ATTENTION: Mapping of Data ONTAP "admin" users to UNIX user "root" is enabled, but the following information does not reflect this mapping.

'vm2\\osakanataro' maps to 'osakanataro'


netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction unix-win -name osakanataro

'osakanataro' maps to 'VM2\osakanataro'


netapp101::*>

なお、NISサーバにアクセスできない場合にこのコマンドを実行すると、以下の様な結果になります。

netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction unix-win -name osakanataro

Vserver: netapp103 (internal ID: 3)

Error: RPC map name request procedure failed
  [  4 ms] Mapping Successful for Unix-user 'osakanataro' to Windows
           user 'VM2*' at position 1
  [    11] Successfully connected to ip 172.17.44.49, port 445 using
           TCP
  [    59] Unknown error: 12
  [    59] Failed to initiate Kerberos authentication. Trying NTLM.
  [    70] Encountered NT error (NT_STATUS_MORE_PROCESSING_REQUIRED)
           for SMB command SessionSetup
  [    95] Successfully authenticated with DC
           samba.adosakana.local
  [   109] Encountered NT error (NT_STATUS_PENDING) for SMB command
           Read
  [   117] Could not find Windows name 'VM2*'
**[   120] FAILURE: Name mapping for UNIX user 'osakanataro' failed.
**         Explicit Mapping failed and no default mapping found

Error: command failed: Failed to find mapping for the user. Reason: "SecD
       Error: The mapped user does not exist and no default user is defined".

netapp101::*>

ファイル権限確認

ONTAP上に置かれているファイルの権限をONTAP OS上から確認する「vserver security file-directory show-effective-permissions」がadvanced権限にあります。

確認したいファイル/ディレクトリをフルパスで指定します。

Windows側ユーザ名でアクセスした場合の確認。このコマンドではドメインとユーザの区切りは「\」が1つとなる。

netapp101::*> vserver security file-directory show-effective-permissions -vserver netapp103 -win-user-name VM2\osakanataro -path /sharevol/testfile.txt

                        Vserver: netapp103
              Windows User Name: VM2\osakanataro
                 Unix User Name: osakanataro
                      File Path: /sharevol/testfile.txt
                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

netapp101::*>

UNIX/Linux側からアクセスした場合の確認

netapp101::*> vserver security file-directory show-effective-permissions -vserver netapp103 -unix-user-name osakanataro -path /sharevol/testfile.txt

                        Vserver: netapp103
              Windows User Name: VM2\osakanataro
                 Unix User Name: osakanataro
                      File Path: /sharevol/testfile.txt
                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

netapp101::*>

細かい動作確認

ユーザ名/UID/SID変換の詳細を確認したい場合は、advanced権限にある「vserver services access-check authentication」を使います

UNIX用ユーザ名からUNIX UIDを検索

netapp101::*> vserver services access-check authentication translate -vserver netapp103 -unix-user-name osakanataro
1000


netapp101::*>

UNIX UIDからUNIX用ユーザ名を検索

netapp101::*> vserver services access-check authentication translate -vserver netapp103 -uid 1000
osakanataro


netapp101::*>

UNIX UIDからWindows用SIDを検索

netapp101::*> vserver services access-check authentication uid-to-sid -vserver netapp103 -uid 1000
SID: S-1-5-21-937304154-1581684492-536532533-1180


netapp101::*>

SIDからUNIX用ユーザ名 と Windows用ユーザ名を検索

netapp101::*> vserver services access-check authentication sid-to-unix-name -vserver netapp103 -sid S-1-5-21-937304154-1581684492-536532533-1180
    SID Type: User
   Unix Name: osakanataro
 Domain Name: VM2
Windows Name: osakanataro


netapp101::*>

Windows用ユーザ名からSIDを検索。このコマンドではドメインとユーザの区切りは「\」が1つとなる。

netapp101::*> vserver services access-check authentication translate -vserver  netapp103 -win-name osakanataro
S-1-5-21-937304154-1581684492-536532533-1180


netapp101::*> vserver services access-check authentication translate -vserver  netapp103 -win-name vm2\osakanataro
S-1-5-21-937304154-1581684492-536532533-1180


netapp101::*>