Samba で日本語名フォルダがうまく扱えない時は

以前 Samba 2 サーバ上にあったファイルをごっそり他のサーバに移し,そこで新たに Samba 3 サーバを立ち上げた.ところが,日本語を含むフォルダ名にアクセスしようとすると困ったことが起こる.ちなみに旧サーバでは coding system = SJIS だった.



(1) 文字コードEUC にした場合:



smb.conf で,

   display charset = CP932
   unix charset = EUC-JP      # EUCJP-MS でも同様
   dos charset = CP932

とすると,日本語名ファイルを含むフォルダにアクセスできない.まあこれは旧サーバが SJIS だったからだろう.ちなみにこれは既存のフォルダの場合のみの現象で,新規フォルダの作成は問題ない.



(2) 文字コードSJIS or UTF-8 にした場合:



smb.conf で,

   display charset = CP932
   unix charset = SJIS
   dos charset = CP932

とすると,既存のフォルダの閲覧は問題ないが,新規フォルダを作成すると奇妙なことが起こる.ファイル階層のデリミタ (UNIX では「/」,Windows では「\」) がアンダースコア「_」に変換されてしまい,階層情報が失われてしまうようだ.

例えば,「フォルダ1」の内部に「ファイル1」「ファイル2」を作り,Samba 経由で「フォルダ1」をコピーしたとしよう.

  • フォルダ1
    • ファイル1
    • ファイル2
すると,コピー先に現れるのは,「フォルダ1」「フォルダ1_ファイル1」「フォルダ1_ファイル2」という 3 つのファイルエントリになってしまう.
  • フォルダ1 (中身は実質的に空)
  • フォルダ1_ファイル1
  • フォルダ1_ファイル2
というわけで困り果てて,smbchartool の sjistoeuc を使って,日本語ファイル名をことごとく EUC に直したところ,問題なく動くようになった.