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 内でのモデル文字と、 ファインダーウィンドウ内での、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 モジュールとともに利用しないこと。
FULLSYNC ボリュームケーパビリティによる Time Machine 機能が クライアントに対して広告されるかを制御する。
yes
- この共有に対して
Time Machine サポートを有効にする。また、Samba が mDNS を
サポートするようにビルドされている場合は、mDNS に
共有を登録する。
no (デフォルト)
Time Machine support の広告を行わない。
このオプションは共有ごとに(あるいは、グローバルに有効に なっている場合はすべての共有に対して)、以下の設定を有効に する:
durable handles = yes
kernel oplocks = no
kernel share modes = no
posix locking = no
Time Machine に便利である: レポートされるディスクサイズを 制限するため、Time Machine が、バックアップ時に、実ディスク 領域すべてを使ってしまうことを防ぐ。オプションには、数字と、それに続く 単位を指定する。.
重要: これは、Time Machin の スパースバンドル イメージの内容のみを勘定に入れた概算である。 そのため、このオプションを使う時には、 勘定に入らないという理由により、このボリュームには 他のコンテンツを格納してはいけない。
計算は、スパースバンドル の Info.plist XML ファイルの バンドサイズを読み、band ファイルの数を数える、bands/ を読み、それぞれの結果をを乗算することで行われる。
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 アーカイブのを展開すると、アーカイブ中に ._ ファイルが
含まれているために失敗する。
rsync
も同様に、下線で始まるファイルの
同期ができないが、これは、一時ファイルが、._ で始まるファイルを
使うが、それが作成できないという理由による。
このオプションを false にすることでこの問題を回避できるが、 内部向けに作成された ._ ファイルが露見してしまうことで 未知の副作用を引き起こすかもしれない。
既定値は yes である。
OS X クライアントで、POSIX の改名動作を有効にするかどうか。 これがないと、クライアントが、対象ディレクトリ中 (再帰的に!) に オープンしているファイルがあると、ディレクトリは改名出来ない。
既定値は yes である。
SMB2 FIND レスポンスにおいてリソースフォークサイズを返す。
既定値は yes である。
SMB2 FIND レスポンスにおいて FinderInfo を返す。
既定値は yes である。
SMB2 FIND レスポンスにおいて、ユーザーにとって有効な アクセス許可の最大値を返す。これを求める処理には時間を要する。 no に設定した場合は、アクセス許可は最大とみなされる。
既定値は yes である。
MacOS クライアントが時折作成する、特殊な内容の 286 バイトの リソースフォークを削除するかを制御する。その内容は 「This resource fork intentionally left blank」という 文字列と、残りはほぼゼロで埋められている。 このデータは使われることがないため、おそらく削除しても問題ない。 このオプションを有効にすると、このモジュールは、リソースフォーク ストリームを切り捨て、 0 バイトにする。
既定値はnoである。
空の、AppleDouble ファイルを削除するかを制御する。空とは AppleDouble ファイル中のリソースフォークエントリのサイズが 0 か、 MacOS が作成するある特殊な内容の 286 バイトの リソースフォークの場合である。
既定値はnoである。
クライアントによる AAPL ネゴシエート 後に、ディスク上のファイル識別子の問い合わせに対してゼロを返すか どうかを指定する。
Mac アプリケーションや Mac SMB クライアントコードは、 ディスク上のファイル識別子が HFS+ カタログノード識別子(HFS+ Catalog Node Identifier; CNID)として機能することを想定している。 Samba は、ファイルの i ノード番号に由来する File-ID を生成するが、 これは、ファイルの作成と削除を通して再利用されるので、 Mac クライアントでは使用できない。 ファイル識別子としてゼロが返ると、Mac クライアントはサーバーから 返るファイル識別子を信用しなくなり、使わなくなる。
既定値は yes である。
._ AppleDouble sidecar ファイルをネイティブストリーム (vfs_streams_xattr を使用している場合は xattrs) に変換しようと するかどうか。この変換の主な使用例は、macOSクライアントが これらの AppleDouble sidecar ファイルを作成した ストリームサポートのないサーバ設定からの透過的な移行である。
既定値はyesである。
Apple クライアントは、AFP_AfpInfo ストリームを使用して、構造化された ファイルメタデータを保存する。ストリームに保存されるマーシャリング されたデータの一部として、最初の8バイトにはいくつかのヘッダー情報が 含まれる。Apple の SMB サーバーと Samba は、このヘッダーバイトを 検証して、このストリームに対するクライアントの書き込み要求を処理 する。検証が失敗した場合は、書き込みを失敗させる。この検証は 一般的には正しいが、データ移行のシナリオによっては、クライアントが サードパーティの SMB サーバーから、何らかの理由でヘッダー情報が 破損している Samba サーバーにデータを移行しようとする場合がある。 このようなシナリオでの移行とヘッダーの修正を可能にするには、この オプションをnoに設定して、検証を一時的に無効に できる。
既定値はyesである。
[share]
vfs objects = catia fruit streams_xattr
fruit:resource = file
fruit:metadata = netatalk
fruit:locking = netatalk
fruit:encoding = native