Sambaと代替データストリーム
https://ameblo.jp/u-kun-win/entry-11967790197.html
Windowsのファイルには代替データストリームが付いていることがあるので、Sambaでも代替データストリームに対応する必要があるけれど、少しハマった。
おそらく一般的と思われるのはvfs_streams_xattrモジュールを使う方法。これで構築をしたところ、代替データストリーム付のファイルを保存する時に、ファイル自体は保存出来るものの代替データストリームが保存出来ないという現象が時々発生した。
調査したところ以下のことが分かった。
vfs_streams_xattrで保存出来る代替データストリームの最大サイズは4KB。厳密に言えばファイルシステムの1ブロックのサイズが最大サイズとなる。これはOSの拡張ファイル属性の仕様。attr(5)に詳細が書かれている。今回のサーバでは1ブロック=4KBだった。
拡張ファイル属性の仕様としてもvfs_streams_xattrの仕様としてもこれを回避する手段はない。例えば代替データストリームを2ブロックに渡って保存などは出来ない。
そのため、対応しようとするとファイルシステムの1ブロックのサイズをより大きなものに変更した上で、ファイルシステムを再作成しなければならない。
参考のために別の場所で稼働しているWindowsのファイルサーバを調査したところ、代替データストリームのサイズが4KBを超えているファイルが多数あり、最大サイズは400KBのものがあった。
そのため、OSのファイルシステムの1ブロックのサイズを4KBよりも大きなものに変更するという対処方法は現実的ではない。(1ブロックが400KB超のファイルシステムなんて絶対に作りたくない)。
つまり代替データストリームにキチンと対応する場合は事実上vfs_streams_xattrモジュールを使うことが出来ない。
ということで、vfs_streams_xattrモジュールを使うのはやめてvfs_streams_depotモジュールに変更をした。実験的なモジュールという位置付けなので少し不安だったものの問題なく動作している。

コメント