我能否将 OS X 资源分支存储在 Samba 共享中的 dotbar 文件以外的任何位置?

我能否将 OS X 资源分支存储在 Samba 共享中的 dotbar 文件以外的任何位置?

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

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

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

我看到OS X 可以配置为将资源分支存储在 SMB 命名流中并且可以将 Samba 配置为将命名流存储在 POSIX 扩展属性中或者,在其他地方的仓库目录中

这两种解决方案都可以解决 dotbar 文件污染目标文件系统的问题,但我无法让它们发挥作用。

 
属性

首先我尝试使用 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

但这会导致某些应用程序失败,例如通过挂载的 SMB 共享从 OS X 运行 Mercurial

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

编辑:这是我的要求的配置:

[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

答案1

看起来你可能能够用新的vfs_水果模块,堆叠与vfs_streams_xattrVFS 模块。

例如,参见此邮件列表主题。您需要一个支持扩展属性的底层文件系统,并且必须在启用这些属性的情况下挂载它。

然而,根据Samba 维基,这是 Samba 4.2 中的新功能,因此您需要升级。(截至目前,甚至 Debian Sid [实验性] 也没有 4.2。)

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

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

答案2

我不知道是否可以使用原生 Mac 偏好设置,但你可以使用类似无菌来帮助解决这个问题。它会将所有 Mac 垃圾移至其自己的文件夹中。

相关内容