Aqui eu tenho um servidor Samba (Debian 5.0) que está configurado para hospedar perfis do Windows XP.
Os clientes se conectam a este servidor e trabalham em seus perfis diretamente no compartilhamento samba (o perfil não é copiado localmente).
De vez em quando, um cliente pode não desligar corretamente e, portanto, o Windows não libera os bloqueios de arquivo. Ao olhar para a tabela de bloqueio do samba, podemos ver que muitos arquivos ainda estão bloqueados, mesmo que o cliente não esteja mais conectado. No nosso caso, isso parece ocorrer com os arquivos de bloqueio criados pelo Mozilla Thunderbird e Firefox. Aqui está um exemplo da tabela de bloqueio do samba:
# smbstatus -L | grep DENY_ALL | head -n5
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
--------------------------------------------------------------------------------------------------
15494 10345 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user1 app.profile/user1.thunderbird/parent.lock Mon Nov 22 07:12:45 2010
18040 10454 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user2 app.profile/user2.thunderbird/parent.lock Mon Nov 22 11:20:45 2010
26466 10056 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user3 app.profile/user3.firefox/parent.lock Mon Nov 22 08:48:23 2010
Podemos ver que os arquivos foram abertos pelo Windows e impuseram um bloqueio DENY_ALL.
Agora, quando um cliente se reconecta a esse compartilhamento e tenta abrir esses arquivos, o samba diz que está bloqueado e nega acesso.
Existe alguma maneira de contornar essa situação ou estou perdendo alguma coisa?
Edit: Nós gostaríamos de evitar a desativação bloqueios de arquivos no servidor samba, porque não são boas razões para ter aqueles habilitados.
fonte
Dê uma olhada em:
e veja se isso resolverá o seu problema ou não.
Na
smb.conf
página do manual:Edit :
Eu apenas pensei em outra solução possível. Você pode fazer algo assim no compartilhamento em questão.
Isso apenas impediria bloqueios em arquivos .lock.
fonte
Algumas pessoas muito inteligentes do Samba decidiram remover essa opção e não há substituto para ela.
Até agora, para compatibilidade com PMEs, pois esse é realmente o comportamento padrão de vitória.
A menos que um usuário seja versado na linha de comando do linux e como eliminar arquivos / processos abertos, você deve reiniciar o SMBD ou o próprio servidor para limpar isso.
Maravilhosamente feito, Samba.org.
fonte
reset on zero vc
opção ainda está listada no manual e também é exibida portestparm
. Então, ele está de volta ou realmente não havia sido removido.Eu estava com um problema semelhante, um cliente travou ao copiar um arquivo grande e o arquivo foi bloqueado após a reinicialização. Felizmente, isso não acontece com muita frequência, mas ainda assim é muito chato ter que matar o processo de samba.
reset on zero vc
parecia ser apenas a solução, mas supostamente foi removida do Samba4, embora a Versão 4.7.6 no Fedora (27) ainda a possua (possivelmente corrigida pelo RH). De qualquer forma, não ajudará muito, como a página de manual agora diz que só funciona com SMB1 (que não deve mais ser usado) e não faz nada nas conexões SMB2 e SMB3, a única maneira de lidar com isso é mencionada em o tópico vinculado por Micheal . Eu não sei a lógica por trás da remoção e o que há de tão ruimreset on zero vc
, Consideraria usar o tempo limite do tcp para esse fim mais como um hack. De qualquer forma, algo razoável poderia ser, por exemplo,Isso interromperá a conexão cerca de 40 segundos (30 + 3 * 3) após a última comunicação, o que geralmente é mais do que suficiente para perceber uma falha e reiniciar (dado que a pilha tcp do servidor é inteligente o suficiente para fechar a conexão quando o cliente rejeita seus pacotes keepalive após a reinicialização).
Observe que isso aumenta a carga na sua rede, mas duvido que seja perceptível mesmo com muitos clientes.
fonte
deadtime = 10
seria clara, mas com os bloqueios de arquivo persistentes nas conexões SMB3_11 para sempre, isso não terá efeito, pois o tempo morto não será verificado enquanto os bloqueios de arquivo de um PID ainda existirem. Extremamente frustrante.deadtime
não faz nada se seus clientes tiverem arquivos abertos, então a pergunta seria: quais arquivos eles mantêm abertos. Mas essa é provavelmente uma questão totalmente diferente da discutida aqui, então você deve abrir uma nova pergunta para isso. Minhasocket options
sugestão ajuda apenas com conexões que não estão fechadas corretamente (porque os clientes travam, uma interrupção na rede etc.), mas provavelmente não se seus clientes WX se conectarem ao servidor sem nenhuma ação adicional ou usando algum tipo de sessão anônima (o quenobody.nogroup
sugere )12345 someuser somegroup...
em uma entrada, em seguida, 80012345 nobody nogroup ...
entradas, mas apenas um punhado de bloqueios de arquivos (não 800). Muito estranho. Afeta três dos meus sites clientes agora.Você pode desativar os bloqueios por compartilhamento com o seguinte:
O tipo de bloqueio padrão é Nível1. Os bloqueios de nível 2 são ativados por compartilhamento no arquivo smb.conf. Como alternativa, você pode desativar os bloqueios por arquivo no compartilhamento:
Se você estiver enfrentando problemas com os bloqueios, como é aparente nas entradas de log do Samba, convém jogar com segurança e desativar os bloqueios e os bloqueios de nível 2.
Desativando bloqueios do kernel Os oplocks do kernel são um parâmetro smb.conf que notifica o Samba (se o kernel UNIX tiver a capacidade de enviar uma interrupção no bloqueio do cliente Windows) quando um processo UNIX estiver tentando abrir o arquivo em cache. Esse parâmetro aborda o compartilhamento de arquivos entre o UNIX e o Windows com os oplocks ativados no servidor Samba: o processo UNIX pode abrir o arquivo bloqueado (em cache) pelo cliente Windows e o processo smbd não envia uma interrupção de bloqueio, o que expõe o arquivo a o risco de corrupção de dados. Se o kernel do UNIX tiver a capacidade de enviar uma interrupção de bloqueio, o parâmetro kernel oplocks permitirá que o Samba envie a interrupção de bloqueio. Os oplocks do kernel são ativados por servidor no arquivo smb.conf.
O padrão é não.
Fonte
fonte