名前

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 = filefruit:metadata = netatalk

OS X は、NTFS の不正な文字を、SMB 要求中で、Unicode のプライベート領域にマップする。 fruit:encoding = native を設定することにより、 すべてのマップされた文字は ネイティブな ASCII 文字に変換される。

最後に、共有アクセスモードは、 fruit:locking = netatalk を設定することにより、Netatalk AFP 共有モードに対して チェックすることもできる。

このモジュールは、このマニュアルページで言及されている もの以外に対してはスタックできない。

グローバルオプション

以下に示すオプションは smb.conf のグローバルセクションに 定義しなければならず、共有ごとに設定しても無効である。

fruit:aapl = yes | no

グローバルオプション。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

fruit:nfs_aces = yes | no

NFS ACE 経由での、ディレクトリエントリの UNIX モードを問合せ/変更する 機能を有効にするかどうかの指定で、既定値は yes

fruit:copyfile = yes | no

OS X 固有の、すべての付属するメタデータと一緒にファイル全体 コピーを要求する copychunk ioctl を有効にするかの指定。

注意: copyfile 要求は、サーバーがコピーを行っている間は クライアントに対してブロックされることに注意。

既定値は no である。

fruit:zero_file_id = yes | no

クライアントによる AAPL ネゴシエート 後に、ディスク上のファイル識別子の問い合わせに対してゼロを返すか どうかを指定する。

Mac アプリケーションや Mac SMB クライアントコードは、 ディスク上のファイル識別子が HFS+ カタログノード識別子(HFS+ Catalog Node Identifier; CNID)として機能することを想定している。 Samba は、store dos attributesオプションが 有効になっている場合、ファイルの初期作成時刻を元にしたファイルIDを 提供する。 ファイル識別子としてゼロが返ると、Mac クライアントはサーバーから 返るファイル識別子を信用しなくなり、使わなくなる。

既定値は yes である。

fruit:model = MacSamba

このオプションは、AAPL 内でのモデル文字と、 ファインダーウィンドウ内での、Samba サーバアイコンの表現方法を 決める。

既定値はMacSambaである。

オプション

以下に示すオプションは smb.conf 内のグローバルセクションと 各共有ごとのいずれにおいても設定できる。

fruit:resource = [ file | xattr | stream ]

どこに 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 モジュールとともに利用しないこと。

fruit:time machine = [ yes | no ]

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

fruit:time machine max size = SIZE [K|M|G|T|P]

Time Machine に便利である: レポートされるディスクサイズを 制限するため、Time Machine が、バックアップ時に、実ディスク 領域すべてを使ってしまうことを防ぐ。オプションには、数字と、それに続く 単位を指定する。.

重要: これは、Time Machin の スパースバンドル イメージの内容のみを勘定に入れた概算である。 そのため、このオプションを使う時には、 勘定に入らないという理由により、このボリュームには 他のコンテンツを格納してはいけない。

計算は、スパースバンドル の Info.plist XML ファイルの バンドサイズを読み、band ファイルの数を数える、bands/ を読み、それぞれの結果をを乗算することで行われる。

fruit:metadata = [ stream | netatalk ]

OS X メタデータストリームが格納される場所を指定する:

  • netatalk (既定値) - Netatalk 互換の xattr を使う

  • stream - VFS スタックの次のモジュールにストリームを渡す

fruit:locking = [ netatalk | none ]

  • none (既定値) - cross protocol locking を使わない

  • netatalk - Netatalk で cross protocol locking を使う

fruit:encoding = [ native | private ]

ファイルシステムに格納される、OS X クライアントで一般的に 使われる、不正な NTFS ASCII 文字セットを制御:

重要: 既知のことであるが、これは fruit:metadata=streamfruit:resource=stream とともに用いた場合、 完全には動作しない。

  • private (規定値) - OS X クライアントによってエンコードされた形で文字を格納: Unicode プライベート領域にマップされる

  • native - そのままの ASCII 値として文字を格納。 重要:このオプションは、例 で説明している ように、VFS モジュールスタック中で vfs_catia を必要とする。

fruit:veto_appledouble = yes | no

参考: このオプションは、 fruit:resourcefile (既定値) に設定されている 場合にのみ適用される。

fruit:resourcefile に設定された場合、 vfs_fruit は ._ AppleDouble ファイルを生成する。 このオプションは、クライアントからファイルに対するアクセスを 防ぐために、._ AppleDouble を見えなくする (veto) かを制御する。

._ ファイルをアクセス不可にすると、いくつかのアプリケーションで 誤動作を引き起こすことがある。たとえば、Mac クライアントから Mac ZIP アーカイブのを展開すると、アーカイブ中に ._ ファイルが 含まれているために失敗する。 rsync も同様に、下線で始まるファイルの 同期ができないが、これは、一時ファイルが、._ で始まるファイルを 使うが、それが作成できないという理由による。

このオプションを false にすることでこの問題を回避できるが、 内部向けに作成された ._ ファイルが露見してしまうことで 未知の副作用を引き起こすかもしれない。

既定値は yes である。

fruit:posix_rename = yes | no

OS X クライアントで、POSIX の改名動作を有効にするかどうか。 これがないと、クライアントが、対象ディレクトリ中 (再帰的に!) に オープンしているファイルがあると、ディレクトリは改名出来ない。

既定値は yes である。

readdir_attr:aapl_rsize = yes | no

SMB2 FIND レスポンスにおいてリソースフォークサイズを返す。

既定値は yes である。

readdir_attr:aapl_finder_info = yes | no

SMB2 FIND レスポンスにおいて FinderInfo を返す。

既定値は yes である。

readdir_attr:aapl_max_access = yes | no

SMB2 FIND レスポンスにおいて、ユーザーにとって有効な アクセス許可の最大値を返す。これを求める処理には時間を要する。 no に設定した場合は、アクセス許可は最大とみなされる。

既定値は yes である。

fruit:wipe_intentionally_left_blank_rfork = yes | no

MacOS クライアントが時折作成する、特殊な内容の 286 バイトの リソースフォークを削除するかを制御する。その内容は This resource fork intentionally left blankという 文字列と、残りはほぼゼロで埋められている。 このデータは使われることがないため、おそらく削除しても問題ない。 このオプションを有効にすると、このモジュールは、リソースフォーク ストリームを切り捨て、 0 バイトにする。

既定値はnoである。

fruit:delete_empty_adfiles = yes | no

空の、AppleDouble ファイルを削除するかを制御する。空とは AppleDouble ファイル中のリソースフォークエントリのサイズが 0 か、 MacOS が作成するある特殊な内容の 286 バイトの リソースフォークの場合である。

既定値はnoである。

        [share]
	vfs objects = catia fruit streams_xattr
	fruit:resource = file
	fruit:metadata = netatalk
	fruit:locking = netatalk
	fruit:encoding = native

著者

オリジナルの Samba ソフトウェアと関連するユーティリティは、Andrew Tridgell によって作成された。現在 Samba は Samba Team に よって、Linuxカーネルの開発と同様のオープンソースプロジェクト として開発が行なわれている。

日本語訳

このマニュアルページは Samba 4.11.0 - 4.14.5 に対応する。

このドキュメントの Samba 4.8.0 - 4.14.5 対応の翻訳は

  • 太田俊哉 (ribbon@samba.gr.jp)

によって行なわれた。