我可以将OS X资源派生存储在Samba共享中的任何其他地方,而不是点文件中吗?


15

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扩展属性中,或者存储在其他地方的仓库目录中

两种解决方案都可以解决点状文件污染目标文件系统的问题,但是我都无法使用。

 
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与这两个选项之一兼容?我的目的是让那些讨厌的人._摆脱共享目录。

我尝试简单地否决点文件:

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

但这会导致某些应用程序失败,例如,通过OS X在已安装的SMB共享上运行时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

您是否尝试将unix extensions指令更改为[global]会话以查看是否解决了您的情况?您可以使用testparm命令的输出更新问题吗?
fgbreel

@fgbreel向我的问题添加了配置。我没有尝试更改unix扩展名,因为默认情况下它是启用的(而且我有点需要映射符号链接和内容。)您认为我应该禁用它吗?
Tobia 2015年

是的,没有道理:(
fgbreel

Answers:


2

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

参见,例如,该邮件列表线程。您需要一个支持扩展属性的基础文件系统,并且必须在启用它们的情况下对其进行挂载。

但是,根据Samba Wiki的说法,这是Samba 4.2中的一项新功能,因此您需要进行升级。(截至目前,甚至Debian Sid [experimental]还没有4.2。)

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

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


0

我不知道使用本机Mac首选项是否可行,但是可以使用Asepsis之类的工具来解决该问题。它将所有Mac粪便移动到它们自己的文件夹中。


我最后一次检查,无菌仅删除.DS_Store文件,而不是“dotbar” ._*文件,这会导致网络共享最多的问题
托比亚

@Tobia:你提出了一个好观点。在那种情况下,我也找到了BlueHarvest,但它不是免费的。看起来BlueHarvest使用实时监视,而Asepsis使用被动重定向(通过修补系统文件)。
布莱克·约翰逊

谢谢。但是我将在Samba方面等待解决方案,因为我认为这只是配置问题。
Tobia'Apr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.