[netatalk-ja:0517] Re: Case insensitiveでファイル名の大文字小文字を変更した場合

HAT hat @ fa2.so-net.ne.jp
2016年 5月 17日 (火) 01:45:44 JST


HATです。

>> > てことで、ログを再度送り直させて頂きます。
>> > 最後の方のaaaをAAAに変更しようとした所が該当箇所ですかね…
> 
>> この行か?
> 
>> May 11 17:43:08 midonas cnid_dbd[2912]: dbd_lookup(CNID hint: 92, DID:90, "AAA", 0x8045d4b7/0x68): CNID resolve problem: server side rename oder reused inode
> 
>> afpdじゃなくて、cnid_dbdで問題が発生してますね。
>> afp.confにおいてcase-insensitiveの指定があった場合、
>> cnid_dbdがそれを理解してファイル名比較を行うようにしなければ、
>> 動作しないように思えます。
> 
> なるほど。cnid_dbdを修正しないといけないんですかね…

遠い記憶が蘇ってきました。

昔のnetatalkはcase insensitiveのオプションがありましたが、
どう頑張っても完全な実装ができないので、オプション自体を
削除しています。

commit 16877bbac312d5566a25346978ce36d166596c6a
Author: didg <didg>
Date:   Mon Sep 1 15:18:36 2008 +0000

    remove case insensitive option, patch 2

commit b501c0b10a93f0740a0f5d3e82b56c9a047e5334
Author: didg <didg>
Date:   Sun Aug 31 13:25:57 2008 +0000

    remove case insensitive option

2008年の出来事です。
これ以降はcase insensitiveに対応できないと思います。

その後、ここのMLの[netatalk-ja:0369]にて、case-insensitiveの問題が
報告されました。

http://cgi.samba.gr.jp/mailman/archives/netatalk-ja/2014-August/thread.html

これは、本家のFeature Requests #62にフィードバックされました。
https://sourceforge.net/p/netatalk/feature-requests/62/

そして、case sensitive = yes|noとして実装しました。

commit 7ef5a9ef9c2b5a5a1ec9b609310859de155b44de
Author: HAT <hat @ fa2.so-net.ne.jp>
Date:   Wed Aug 6 22:23:08 2014 +0900

    new option "case sensitive = yes|no", FR #62.

    In spite of being case sensitive as a matter of fact, netatalk
    3.1.3 and earlier did not notify kCaseSensitive flag to the client.
    Now, it is notified correctly by default.

この一連の流れを要約すると、
1) 昔のnetatalkにはcase insensitiveのオプションがあった
2) 正常動作しないのでcase insensitiveオプションを削除した
3) それ以来、実質的にcase sensitiveで動作している
4) AFPに「このボリュームはcase sensitiveです」を宣言する仕様が追加された
5) netatalkとしては、この宣言をすべきかどうか不明だった
6) [netatalk-ja:0369]にて、宣言しなければならないことが判明した
7) デフォルトでcase sensitiveを宣言するようにした
   ただし、下位互換性のためにcase sensitiveを宣言しないようにもできる

現在の
case sensitive = no
は、「case sensitiveであると宣言しない」オプションであって、
「case insensitiveに対応する」オプションではありません。

>> あと、ZFSにはcasesensitiveやcaseinsensitiveのほかにmixedなるオプションが
>> あるようですが、これを使うとどうなるでしょうか。
>> Solaris CIFS専用のオプションみたいですけど。

> 試行錯誤しましたが、mixedを一通り試してみました。
> netatalkからはどうやってもcase sensitiveに見えてしまいますねぇ
> sharemgr専用の様でした…
> 
> 難しいですね…

難しいです。
というか、そもそも対応してないというのが正解ですね。
この問題を解決するのは、ここのMLでは無理っぽいです。
本気で対応するには本家MLで議論するしかないでしょう。

別解としては、netatalkを捨ててsambaを使うという方法があると思います。
sambaは最初からcase insensitiveです。
smb.confのman pageに書いてありますが、
case sensitive (S)
Default: case sensitive = no
です。
cae sensitive = yesという設定も可能ですが、これはUnix系OSどうしで
SMB接続する場合を想定しています。(ただしマトモに動作しません)

sambaでvfs_fruitを使うと、netatalk互換でファイル保存できます。
Linux上のsambaだと、実際にnetatalk互換にできますが、
FreeBSD上のsambaだと拡張属性の名前の扱いにバグがあって、
完全互換になりません。これはまだ直っていないと思います。
つまり、netatalkを捨てる覚悟があるなら、sambaに移行できます。

-- 
HAT


netatalk-ja メーリングリストの案内