Os garfos de recursos do OS X são fluxos alternativos de dados anexados a arquivos regulares. Eles podem conter o ícone personalizado do arquivo, rótulo colorido, palavras-chave ou qualquer outro metadado definido pelo usuário ou pelos aplicativos.
Eles são suportados nativamente pelo sistema de arquivos HFS + do OS X, mas sempre que o OS X monta outro sistema de arquivos, local (FAT32) ou remoto (NFS, SMB), eles são armazenados nos chamados arquivos "dotbar": a bifurcação de recursos para o arquivo comum name.ext
é armazenado em outro arquivo regular, mas oculto ._name.ext
. (Eles não devem ser confundidos com .DS_Store
arquivos, que armazenam as configurações de exibição de um diretório, como ícone versus exibição de coluna ou a posição de sua janela.)
O problema com os ._
arquivos dotbar é que eles são arquivos regulares reais, no sistema de arquivos de destino, com a mesma extensão que o arquivo original, causando estragos de várias maneiras. Por exemplo, Ant e Maven verão ._MyClass.java
ainda outro arquivo Java para compilar.
Vejo que o OS X pode ser configurado para armazenar bifurcações de recursos em fluxos nomeados para SMB e que o Samba pode ser configurado para armazenar fluxos nomeados em atributos estendidos do POSIX ou, alternativamente, em um diretório de depósito em outro lugar .
Ambas as soluções resolveriam o problema dos arquivos dotbar que poluem o sistema de arquivos de destino, mas também não consigo trabalhar.
Xattr
Primeiro eu tentei com o xattr:
vfs objects = streams_xattr
kernel oplocks = no
A última opção é devido a esse bug . Eu disse ao OS X para usá-lo, fazendo isso na raiz do compartilhamento, antes de montá-lo:
touch .com.apple.smb.streams.on
Mas quando tentei copiar um arquivo com o Finder, recebi este erro:
O Finder não pode concluir a operação porque alguns dados em "hello.java" não podem ser lidos ou gravados.
(Código de erro -36)
depósito
Então eu tentei com depósito:
vfs objects = streams_depot
saindo .com.apple.smb.streams.on
na raiz do compartilhamento. Tentando copiar o mesmo arquivo com o Finder, recebi outro erro:
A operação não pode ser concluída porque ocorreu um erro inesperado
(código de erro -50)
Como posso fazer o OS X funcionar com uma dessas duas opções? Meu objetivo é tirá-los ._
dos diretórios compartilhados.
Tentei simplesmente vetar arquivos dotbar:
veto files = /._*/
delete veto files = yes
Mas isso faz com que alguns aplicativos falhem, por exemplo, o Mercurial quando executado no OS X em um compartilhamento SMB montado .
Estou usando o OS X 10.9.5 como cliente; Samba 3.6.6 do Debian Wheezy como servidor.
Edit: aqui está a minha configuração, conforme solicitado:
[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
diretiva na[global]
sessão para ver se resolve o seu caso? Você pode atualizar sua pergunta com a saída dotestparm
comando?