我可以将OS X资源分支存储在Samba共享位置,而不是在dotbar文件中吗?

OS X资源分支是附加到常规文件的备用数据stream。 它们可能包含文件的自定义图标,彩色标签,关键字或由用户或应用程序设置的任何其他元数据。

它们本地支持OS X的HFS +文件系统,但是每当OS X挂载另一个文件系统时,无论本地(FAT32)还是远程(NFS,SMB),它们都存储在所谓的“dotbar”文件中:资源分支为常规文件name.ext存储在另一个常规但隐藏的文件._name.ext 。 (它们不能与.DS_Store文件混淆,它们存储目录的视图设置,例如图标与列视图或其窗口的位置。)

dotbar ._文件的问题在于,它们是目标文件系统中的实际常规文件,具有与原始文件相同的扩展名,因此以多种方式造成严重破坏。 例如,Ant和Maven会将._MyClass.java作为另一个Java文件进行编译。

我发现可以将OS Xconfiguration为在SMB命名stream中存储资源分支,并且可以将Sambaconfiguration为将命名stream存储在POSIX扩展属性中,或者也可以将其存储在 别处的软件仓库目录中 。

这两个解决scheme将解决dotbar文件污染目标文件系统的问题,但我不能得到任何工作。

XATTR

首先我试着用xattr:

 vfs objects = streams_xattr kernel oplocks = no 

后面的选项是由于这个错误 。 我告诉OS X使用它,通过在共享的根目录中进行,在安装之前:

 touch .com.apple.smb.streams.on 

但是当我试图用Finder复制文件时,我得到这个错误:

Finder无法完成操作,因为“hello.java”中的某些数据无法读取或写入。
(错误代码-36)

仓库

然后我试着用仓库:

 vfs objects = streams_depot 

.com.apple.smb.streams.on留在共享的根目录中。 试图用Finder复制相同的文件,我得到了另一个错误:

由于发生意外错误,操作无法完成
(错误代码-50)

我如何使OS X与这两个选项中的任何一个一起工作? 我的目的是从共享目录中得到那些讨厌的。

我试图简单否决dotbar文件:

 veto files = /._*/ delete veto files = yes 

但是,这会导致一些应用程序失败,例如从OS X通过安装的SMB共享运行时的Mercurial 。

我使用OS X 10.9.5作为客户端; 从Debian Wheezy作为服务器的Samba 3.6.6。

编辑:这是我的configuration请求:

 [global] security = user invalid users = root workgroup = COMPANY_NAME encrypt passwords = true panic action = /usr/share/samba/panic-action %d syslog = yes syslog only = yes # PERFORMANCE TUNING socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 SO_KEEPALIVE read raw = true write raw = true use sendfile = true min receivefile size = 16384 aio read size = 16384 aio write size = 16384 max xmit = 131072 getwd cache = true # DEFAULT OPTIONS FOR ALL SHARES writeable = true force group = company_group create mask = 664 security mask = 664 force create mode = 664 force security mode = 664 directory mask = 2775 directory security mask = 2775 force directory mode = 2775 force directory security mode = 2775 # solve problem where OS X clients remove mode 0100 map archive = no [homes] browseable = no 

看起来您可能可以使用vfs_streams_xattr VFS模块堆叠的新vfs_fruit模块执行此操作。

例如,看这个邮件列表线程 。 您需要一个支持扩展属性的基础文件系统,并且必须在启用它的情况下装载它。

但是 ,根据Samba维基的说法,这是Samba 4.2的一个新function,所以你需要升级。 (截至目前,Debian Sid [实验]还没有4.2。)

如果你不喜欢抛弃Debian软件包并构build新版本的Samba(或者升级到Jessie并等待4.2出现在jessie-backports中),那么你可以隐藏客户端的点文件。

例如,您可以将两个不同的共享指向同一个目录,其中一个隐藏._files。 也许不是最佳的,但可能是可行的。

我不知道是否可以使用本地Mac设置,但是您可以使用像Asepsis这样的工具来解决这个问题。 它会将所有的Mac粪便移动到他们自己的文件夹。