Linux カーネル上の大きな macOS 拡張属性で Samba の vfs fruit を動作させるにはどうすればよいですか?

Linux カーネル上の大きな macOS 拡張属性で Samba の vfs fruit を動作させるにはどうすればよいですか?

大きな拡張属性 (テストでは 1 つの属性値が 68 MB を超える) をサポートする APFS ファイルシステムを備えた macOS クライアント (12.6.7) があります。

私は、ZFS ファイル システムと Samba バージョン 4.15.13-Ubuntu を搭載した Ubuntu Server 22.04.2 LTS を搭載した NAS サーバーを持っています。

ZFS には xattr=sa が設定されています。そのため、NAS で拡張属性が有効になっています。

Samba を次のように実行するように設定しましたvfs fruit:

ea support = yes
vfs objects = catia fruit streams_xattr
fruit:resource = stream
fruit:metadata = stream

この構成により、より小さな拡張属性とリソース フォーク (64 KB 未満) を NAS 共有に書き込むことができました。

しかし、拡張属性とリソースフォークが大きい場合 (64 KB を超える) は機能しませんでした。

多くのスレッド、マニュアルページ、コードを調べた後、私はこの小さな注記zfs のマニュアルページ:

xattr = オン | オフ | sa

デフォルト値 on は、ディレクトリ ベースの拡張属性を有効にします。このスタイルの拡張属性では、ファイルに設定できる属性のサイズや数に実質的な制限はありません。ただし、Linux では、getxattr(2) および setxattr(2) システム コールによって最大サイズが 64K に制限されます。

Linux 上に「実質的な制限がない」ZFS があるのは素晴らしいことです。実際には、Linux カーネル (実際的なもの) が拡張属性のサイズを制限するだけです。

わかりました。ZFS 側でも Linux 側でも修正できません。

次のステップはサンバ具体的には。

拡張属性のサイズ制限のため、拡張属性用の代替ストレージが必要でした。リソース フォークの場合は、ファイルに書き込む設定があります。

fruit:resource = file

これを有効にすると、大きなリソースフォークを共有に書き込むことができます。

しかし、fruit には、他のメタデータ (拡張属性など) をコンパニオン ファイルに書き込むオプションはありません。

fruit:metadata = [ ストリーム | netatalk ]

  • netatalk (デフォルト) - Netatalk 互換の xattr を使用する
  • ストリーム - ストリームをVFSスタック内の次のモジュールに渡す

streamstreams_xattr が拡張属性に書き込もうとするため、動作しません。

netatalkは機能しません。これは、fruit がそれを netatalk 互換の名前付き拡張属性に書き込もうとするためです。

ファイルにメタデータを書き込むオプションがないのはなぜですか?

これにより、Samba は、提供される基盤となるファイルシステムからより独立するようになります (拡張属性がまったくない場合でも)。

私の現在の解決策は以下を使用することです:

ea support = no

これにより、macOSクライアントはAppleDoubleファイルリソース フォークと拡張属性用。

これにより、クライアントからのリソース フォークと拡張属性が保持されます。

もちろん、これは Windows クライアントとは互換性がありません。現時点では問題ありませんが、このボックスの使用方法には大きな制限があります。

また、vfs fruitが必要なのでea support = yes、使用できません。 fruit について読んだところによると、これは NAS のパフォーマンスを低下させるということであり、Time Machine のセットアップも簡単ではありません。他の影響については知りません。 fruit は FULLSYNC 機能を実装しているようです ( を参照fruit:time machine)。レガシーAppleドキュメント停電時に Time Machine のクリーンなバックアップを作成するために必要であるようです。

ストリームをデータベースに書き込むことも考えましたが、このvfsオブジェクトに何か問題が発生した場合の修正が非常に難しくなります(詳細については見る)。「このモジュールは本番環境では使用しないでください」に注意してください。

Samba を動作させるために拡張属性の制限がない OS に切り替えるという選択肢はありません...少なくとも今のところは。

Samba 共有 (および vfs fruit) の拡張属性を無効にせずに、Linux システムで macOS リソース フォークと拡張属性を完全にサポートする別のオプションはありますか?

関連情報