vfs_fruit — OS X と Netatalk との相互運用性を強化する
vfs objects = fruit
この VFS モジュールは samba(7) システムの一部である。
vfs_fruit
モジュールは、Apple SMB クライアント
との互換性向上と、Netatalk 3 AFP ファイルサーバーとの相互運用性を提供する。
このモジュールは、もしも文字変換をするのであれば、
vfs_catia
といっしょに使うべきであり、さらに、
vfs_streams_xattr
と共に使わなければならない。
正しい設定方法は、例 の節を参照のこと。
モジュールは、共有に対して、代替データストリーム (ADS)
のサポートと、OS X 特有のストリーム "AFP_AfpInfo" と "AFP_Resource"
を横取りし、それを特別な方法で扱う機能を有効にする。
その他すべての名前付きストリームは、vfs_fruit
といっしょにロードされねばならない vfs_streams_xattr
にゆだねられる。
vfs_fruit が有効な共有と無効な共有が混在している場合は注意すること。 OS X クライアントは最初に tcon を行う際に SMB2 AAPL プロトコル拡張の ネゴシエーションを行う。そのため、最初に tcon を行った共有で vfs_fruit が無効の場合、すべての共有で AAPL が無効となってしまう。
共有で OS X クライアント向けの代替データストリーム(訳注:ADS)の サポートを有効化することにより、Apple 固有の SMB サーバー実装と同等の動作が 実現する。これにより、Samba が大文字小文字判別に起因する 顕著なパフォーマンス低下が抑止される。
OS X メタデータとリソースフォークストリームは、Netatalk 3 と
互換性のある方法で、下記のように設定することにより格納される。
fruit:resource = file
と
fruit:metadata = netatalk
OS X は、NTFS の不正な文字を、SMB 要求中で、Unicode
のプライベート領域にマップする。
fruit:encoding = native
を設定することにより、
すべてのマップされた文字は ネイティブな ASCII 文字に変換される。
最後に、共有アクセスモードは、
fruit:locking = netatalk
を設定することにより、Netatalk AFP 共有モードに対して
チェックすることもできる。
このモジュールは、このマニュアルページで言及されている もの以外に対してはスタックできない。
以下に示すオプションは smb.conf のグローバルセクションに 定義しなければならず、共有ごとに設定しても無効である。
グローバルオプション。Appleの コードネーム AAPL の、SMB2+ 拡張を 有効にするかどうかを指定する。規定値では、 yes である。この拡張は、Mac からの接続時に いくつかの足らない機能を補う:
ディレクトリ一覧表示は、Mac のファイルシステム メタデータで強化され (UNIX モード、FinderInfo、リソースフォーク サイズと実行パーミッション)、その結果、驚異的な性能向上が得られ るので、Mac クライアントは、ディレクトリエントリごとに、個別に このメタデータをフェッチする必要がない。
ディレクトリエントリの UNIX モードを問い合わせ/ 変更する機能。
ディレクトリ一覧表示時に、特定の Mac メタデータの計算を無効 にするときに使う、共有単位のオプション群がある。既定値では すべて有効である:
readdir_attr:aapl_rsize = true | false
readdir_attr:aapl_finder_info = true | false
readdir_attr:aapl_max_access = true | false
NFS ACE 経由での、ディレクトリエントリの UNIX モードを問合せ/変更する 機能を有効にするかどうかの指定で、既定値は yes。
OS X 固有の、すべての付属するメタデータと一緒にファイル全体 コピーを要求する copychunk ioctl を有効にするかの指定。
注意: copyfile 要求は、サーバーがコピーを行っている間は クライアントに対してブロックされることに注意。
既定値は no である。
グローバルオプション。クライアントによる AAPL ネゴシエート 後に、ディスク上のファイル識別子の問い合わせに対してゼロを返すか どうかを指定する。
Mac アプリケーションや Mac SMB クライアントコードは、 ディスク上のファイル識別子が HFS+ カタログノード識別子(HFS+ Catalog Node Identifier; CNID)として機能することを想定しているが、 Samba はこうした機能を提供していない。これは利便性の問題を 引き起こすだけでなく、データ損失を引き起こすことすらある。 ファイル識別子としてゼロが返ると、Mac クライアントはサーバーから 返るファイル識別子を信用しなくなり、使わなくなる。
既定値は yes である。
このオプションは、AAPL 内でのモデル文字と、 ファインダーウィンドウ内での、Samba サーバアイコンの表現方法を 決める。
既定値はMacSambaである。
以下に示すオプションは smb.conf 内のグローバルセクションと 各共有ごとのいずれにおいても設定できる。
どこに OSX リソースフォークを格納するかを制御する。
4.6.0 以前の古い Samba バージョンすべてには スペルミスの バグがあり、このオプションは fruit:ressource 、すなわち2つの s が ついている形でも提供されている。
file (既定値)
-
OS X と Netatalk 互換の ._ AppleDouble ファイル
を使う。
xattr
-
拡張属性 (xattr) を使用する。これは、大きなサイズの拡張属性をサポート
するファイルシステムと、拡張属性に準拠した
ファイル IO API が必要となる。つまり、
Solaris と Solaris 派生プラットフォームの ZFS が必須である。
stream (実験的)
-
VFS スタック内において、ストリームを次のモジュールに渡す。
警告: たいていのファイルシステム
には拡張属性のサイズ制限があるため、このオプションを
streams_xattr モジュールとともに利用しないこと。
OS X メタデータストリームが格納される場所を指定する:
netatalk (既定値)
-
Netatalk 互換の xattr を使う
stream
-
VFS スタックの次のモジュールにストリームを渡す
none (既定値)
-
cross protocol locking を使わない
netatalk
-
Netatalk で cross protocol locking を使う
ファイルシステムに格納される、OS X クライアントで一般的に 使われる、不正な NTFS ASCII 文字セットを制御:
重要: 既知のことであるが、これは fruit:metadata=stream や fruit:resource=stream とともに用いた場合、 完全には動作しない。
private (規定値)
-
OS X クライアントによってエンコードされた形で文字を格納:
Unicode プライベート領域にマップされる
native
-
そのままの ASCII 値として文字を格納。
重要:このオプションは、例 で説明している
ように、VFS モジュールスタック中で vfs_catia
を必要とする。
参考: このオプションは、
fruit:resource
が
file
(既定値) に設定されている
場合にのみ適用される。
fruit:resource
が
file
に設定された場合、
vfs_fruit は ._ AppleDouble ファイルを生成する。
このオプションは、クライアントからファイルに対するアクセスを
防ぐために、._ AppleDouble を見えなくする (veto)
かを制御する。
._ ファイルをアクセス不可にすると、いくつかのアプリケーションで 誤動作を引き起こすことがある。たとえば、Mac クライアントから Mac ZIP アーカイブのを展開すると、アーカイブ中に ._ ファイルが 含まれているために失敗する。 このオプションを false にすることでこの問題を回避できるが、 内部向けに作成された ._ ファイルが露見してしまうことで 未知の副作用を引き起こすかもしれない。
既定値は yes である。
OS X クライアントで、POSIX の改名動作を有効にするかどうか。 これがないと、クライアントが、対象ディレクトリ中 (再帰的に!) に オープンしているファイルがあると、ディレクトリは改名出来ない。
既定値は yes である。
SMB2 FIND レスポンスにおいてリソースフォークサイズを返す。
既定値は yes である。
SMB2 FIND レスポンスにおいて FinderInfo を返す。
既定値は yes である。
SMB2 FIND レスポンスにおいて、ユーザーにとって有効な アクセス許可の最大値を返す。これを求める処理には時間を要する。 no に設定した場合は、アクセス許可は最大とみなされる。
既定値は yes である。
[share]
vfs objects = catia fruit streams_xattr
fruit:resource = file
fruit:metadata = netatalk
fruit:locking = netatalk
fruit:encoding = native