Se eu tiver um cliente Windows que leia um arquivo em um compartilhamento Linux smb em um intervalo <= 10 segundos, o cliente Windows mostrará informações incorretas (armazenadas em cache?) Desse arquivo.
Eu reproduzi isso em vários sistemas.
Exemplo de etapas para reproduzir:
1) configure o compartilhamento linux samba - neste exemplo, usando o Debian e instalando o samba. exemplo:
sudo mkdir /test
sudo chmod 777 /test
Além do smb.conf:
[test]
read only = no
locking = no
path = /test/
guest ok = yes
2) Mapeie este diretório como uma unidade em um cliente Windows (este teste usará L :)
3) crie um arquivo com algum texto no servidor samba
nano /test/test.txt
ORIGINAL
4) crie um arquivo em lote simples na máquina Windows para visualizar o arquivo a cada 5 segundos:
copy con test.bat
@echo off
cls
:1
type L:\test.txt
timeout 5
goto 1
5) execute o arquivo em lote, ele deve mostrar ORIGINAL a cada 5 segundos.
6) no servidor linux, altere o conteúdo do arquivo
nano /test/test.txt
CHANGED
7) veja o arquivo em lotes em execução no Windows, ele ainda dirá "ORIGINAL" a cada cinco segundos, e não "ALTERADO" como o arquivo real possui.
8) encerre o arquivo em lotes e aguarde ~ 15 segundos, OU altere o tempo limite para algo> 10 segundos e ele será atualizado corretamente.
Espero ter explicado e descrito como testar isso suficientemente.
Alguém pode reproduzir esse comportamento e / ou sugerir como corrigir isso?
.
.
.
NOTAS:
Cliente Linux> Host SMB Linux mostra o conteúdo adequado do arquivo.
Cliente Windows> Host SMB do Windows mostra o conteúdo adequado do arquivo.
É especificamente Windows SM> Linux SMB Host que não mostra o conteúdo adequado do arquivo em um intervalo de atualização de <= 10 segundos.
Todos os sabores do Windows que eu testei (Win7, Win10, Server2016) exibem o mesmo comportamento.
Também testei protocolos diferentes no meu compartilhamento de samba 'NT1, SMB2, SMB3' e eles não alteram o comportamento.
NOTA: Acredito que esse é provavelmente um problema do Windows, mas não recebo nenhuma resposta no technet ou no superusuário em uma semana. Isso deve ser bastante fácil de testar, alguém pode confirmar esse comportamento ou declarar o contrário?
fonte
Respostas:
Os valores padrão para as configurações relevantes são:
oplocks = yes
kernel oplocks = no
(Veja a documentação do samba smb.conf )
Você pode desativar os bloqueios, conforme outra resposta .
Alternativamente, se você estiver executando um Linux O / S com um kernel moderno (2.4 ou mais recente), você pode deixar
oplocks = yes
e em vez adicionar uma linha parasmb.conf
habilitar o oplocks do kernel. Conforme a seção de oplocks (S) do kernel na documentação:Quando
oplocks
ekernel oplocks
ambos estão ativados, você deve obter um bom desempenho (do cache) e invalidação do cache quando os arquivos forem atualizados.Para habilitar os bloqueios do kernel, adicione esta linha ao seu arquivo de configuração do Samba:
fonte
oplocks
deve ser desativado. Na segunda parte, a citação diz habilitá-los junto comkernel oplocks
. Seria correto sugerir que seu exemplo final deveria ter não apenaskernel oplocks = yes
mas tambémoplocks = yes
?oplocks = yes
ekernel oplocks = no
. Portanto, não há necessidade de adicionaroplocks = yes
; só precisamos especificar okernel oplocks
valor.Eu resolvi isso colocando
no meu smb.conf em minhas configurações de compartilhamento.
https://www.samba.org/samba/docs/old/Samba3-HOWTO/locking.html#id2615926
fonte