Como atualizar o conteúdo do arquivo remoto

1

Eu tenho um sistema de desenvolvimento Ubuntu 14.04 LTS, que compartilha algumas pastas via Samba (samba 2: 4.3.9 + dfsg amd64). Eu montei esse compartilhamento em um sistema Ubuntu diferente ( mount -t cifs -o uid=$UID,gid=$(id -g),domain=DEVHOST,username=guest //DEVHOST/share /mnt/share ). Tudo está bem, principalmente. Mas às vezes, quando edito o arquivo no sistema de desenvolvimento (via Vim), as alterações não são refletidas no cliente, ou seja, o cliente vê o conteúdo antigo do arquivo por algum tempo.

ll mostra que a data de modificação do arquivo não foi atualizada. No entanto, um arquivo recém-criado no mesmo diretório é mostrado. Mas ainda assim o conteúdo do arquivo do arquivo existente não é atualizado. Com less , vejo bytes nulos adicionais ( ^@ ) no final do arquivo, tantos quanto o tamanho do arquivo aumentou na edição.

Acho que vejo um cache obsoleto. Como faço para instruir o cliente a recarregar o arquivo do servidor Samba remoto? Na área de trabalho, eu tentaria atualizar via F5 no Nautilus, mas estou logado no cliente via SSH.

Nota: Este não é um problema permanente; depois de uma reinicialização do cliente, as coisas funcionam bem novamente (por algum tempo pelo menos). Só estou querendo saber se existe uma solução melhor do que desmontar / remontar forçosamente ou até mesmo reinicializar o cliente. Quaisquer sugestões que podem ser a causa raiz são bem-vindas.

    
por Ingo Karkat 16.09.2016 / 15:10

1 resposta

1

Any hints what could be the root cause are welcome.

Eu tive um problema parecido com isso uma vez. Acontece que um host não tem um relógio preciso. A ativação de ntp em todos os hosts corrigiu o problema.

How do I instruct the client to reload the file from the remote Samba server?

Seu arquivo é recarregado & atualizado executando env stat $FILE ? Eu suspeito que não.

O arquivo é atualizado no cliente ao liberar qualquer bloqueio oportunista (bloqueio) no arquivo?
De man mount.cifs :

The CIFS protocol mandates (in effect) that the client should not
cache file data unless it holds an opportunistic lock (aka oplock) 
or a lease. Both of these entities allow the client to guarantee         
certain types of exclusive access to a file so that it can access its   
contents without needing to continually interact with the server.

Eu vi problemas de sincronização entre minha caixa do windows7 e o Google Drive até sair da minha cópia do gvim (simplesmente fechar o buffer não desbloqueou o arquivo e atualizou o Google Drive). Se você editar o arquivo com o vim no DEVHOST e depois fechar o vim, o problema persistirá no cliente?

Como mencionado nos comentários de @StephenHarris, edite o comando mount acima e tente adicionar -o cache=none

De man mount.cifs :

cache=
    Cache mode. See the section below on CACHE COHERENCY for details. 
    Allowed values are:
    ·   none: do not cache file data at all
    ·   strict: follow the CIFS/SMB2 protocol strictly
    ·   loose: allow loose caching semantics
    The default in kernels prior to 3.7 was "loose". 
    As of kernel 3.7 the default is "strict".
por 21.09.2016 / 23:58

Tags