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
命令的输出更新问题吗?