差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
blog:2018:2018-07-03 [2019-07-24 16:18]
Decomo
blog:2018:2018-07-03 [2021-05-17 09:45] (現在)
Decomo
行 1: 行 1:
-====== SambaとZFSで大量のファイルを扱う時はcase-sensitiveの組み合わせを最適化する ======+====== SambaとZFSで大量のファイルを扱う時はcase-sensitiveを最適化する ======
  
 [[blog:2017:2017-08-04|同一フォルダに大量のファイルがあるとSambaが超遅くなる]]問題、自分なりの知見が得られたのでメモ。結果だけ知りたい人は最後までスクロールしてくだしあ。 [[blog:2017:2017-08-04|同一フォルダに大量のファイルがあるとSambaが超遅くなる]]問題、自分なりの知見が得られたのでメモ。結果だけ知りたい人は最後までスクロールしてくだしあ。
行 17: 行 17:
 ローカルのファイルに対してなら、Windowsがよしなに取り計らってくれるので問題にはならない。 ローカルのファイルに対してなら、Windowsがよしなに取り計らってくれるので問題にはならない。
  
-しかし、共有フォルダのアクセスに関しては、忖度することなくリクエストされたファイルパスをそのままサーバに渡しているようだ。ゆえにサーバ側でそのあたりが考慮されてないと、意図したファイルが見つからないという事になる。Sambaの''case sensitive''オプションは、まさにその辺の制御に関するオプションなのだ。''case sensitive=yes''にするということは、''\\Server\Data\FILE.dat''と''\\Server\data\file.dat''は別のファイル扱いになるということで、/-手抜き-/アプリからすれば、case-insensitiveなら見えていたファイルが見つからなくなる。これでは使い物にならない((実際、某有名3Dモデリングソフトでアセットファイルが突然見えなくなるという現象に遭遇している))+しかし、共有フォルダのアクセスに関しては、忖度することなくリクエストされたファイルパスをそのままサーバに渡しているようだ。ゆえにサーバ側でそのあたりが考慮されてないと、意図したファイルが見つからないという事になる。Sambaの''case sensitive''オプションは、まさにその辺の制御に関するオプションなのだ。 
 + 
 +''case sensitive=yes''にするということは、''\\Server\Data\FILE.dat''と''\\Server\data\file.dat''は別のファイル扱いになるということで、<del>手抜き</del>アプリからすれば、case-insensitiveなら見えていたファイルが見つからなくなる。これでは使い物にならない((実際、某有名3Dモデリングソフトでアセットファイルが突然見えなくなるという現象に遭遇している))
  
 ===== ではどうするか ===== ===== ではどうするか =====
行 27: 行 29:
 これを''caseinsensitive''にしてやれば、大文字/小文字を区別しないようにファイルシステムが処理するようになる。"insensitive"とはなっているけど、挙動としては"preserving"のようだ。ちなみに、''mixed''というのもあるが、使いどころがよくわからない挙動なので指定しない方が無難(一応、Windowsを想定した挙動らしいんだけど…)。 これを''caseinsensitive''にしてやれば、大文字/小文字を区別しないようにファイルシステムが処理するようになる。"insensitive"とはなっているけど、挙動としては"preserving"のようだ。ちなみに、''mixed''というのもあるが、使いどころがよくわからない挙動なので指定しない方が無難(一応、Windowsを想定した挙動らしいんだけど…)。
  
-残念ながら、というか性質を考えたら仕方ないけど、本プロパティはFS作成時にしか指定できない。既に問題が起きてしまっている場合は、''caseinsensitive''FSを新たに作り、''casesensitive''なFSの方からファイルコピーして移行するしかない。(zfs send/recvではプロパティが引き継がれるので意味がない。)+残念ながら、というか性質を考えたら仕方ないけど、本プロパティはデータセット作成時にしか指定できない。既に問題が起きてしまっている場合は、''caseinsensitive''データセットを新たに作り、''casesensitive''の方からファイルコピー移行するしかない。(zfs send/recvではプロパティが引き継がれるので意味がない。)
  
 そのうえでSamba側の''case sensitive=yes''としてやれば、smbdの負荷問題は解決する。 そのうえでSamba側の''case sensitive=yes''としてやれば、smbdの負荷問題は解決する。
行 46: 行 48:
     * ファイル名の扱いをcase-sensitiveにする<code>     * ファイル名の扱いをcase-sensitiveにする<code>
 case sensitive = yes case sensitive = yes
-case preserve = no +case preserve = yes 
-short preserve case = no+short preserve case = yes
 </code> </code>
  
 +<WRAP center round info 60%>
 +(2021-05-17 追記)
 +
 +上記設定について、以前はcase preserve, short preserve caseをnoとしていたが、yesの方が良さそうである。これらはファイル新規作成時のファイル名の大文字・小文字の取り扱いのオプションで、noだと大文字ないし小文字に変換されていまう(default caseの指定に因る。デフォルト値はlowerなので小文字になる。)
 +</WRAP>
 +
 +
 +===== 参考サイト =====
 +
 +  * [[https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html#NAMEMANGLINGSECT|smb.conf — The configuration file for the Samba suite]]のNAME MANGLINGセクション
  • blog/2018/2018-07-03.1563952704.txt.gz
  • 最終更新: 2019-07-24 16:18
  • by Decomo