むかしから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::*>