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
Run Code Online (Sandbox Code Playgroud)
后一种选择是由于这个错误。在安装之前,我告诉 OS X 使用它,在共享的根目录中执行此操作:
touch .com.apple.smb.streams.on
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 Finder 复制文件时,出现此错误:
Finder无法完成操作,因为“hello.java”中的某些数据无法读取或写入。
(错误代码 -36)
仓库
然后我尝试使用仓库:
vfs objects = streams_depot
Run Code Online (Sandbox Code Playgroud)
留.com.apple.smb.streams.on
在共享的根。尝试使用 Finder 复制同一文件时,出现另一个错误:
操作无法完成,因为发生了意外错误
(错误代码 -50)
如何让 OS X 使用这两个选项之一?我的目的是让那些讨厌的人._
离开共享目录。
我尝试简单地否决 dotbar 文件:
veto files = /._*/
delete veto files = yes
Run Code Online (Sandbox Code Playgroud)
但这会导致某些应用程序失败,例如Mercurial 在通过挂载的 SMB 共享从 OS X 运行时。
我使用 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
Run Code Online (Sandbox Code Playgroud)