Você pode investigar o que pode estar acontecendo executando o sshfs com a opção -o debug
. Ele imprime muitas informações sobre as operações básicas do sistema de arquivos feitas por um comando touch test
. Uma operação de exemplo é:
unique: 209, opcode: LOOKUP (1), nodeid: 1, insize: 45, pid: 10641
LOOKUP /test
getattr /test
NODEID: 44
unique: 209, success, outsize: 144
A parte relevante é que uma chamada getattr
foi feita e terminou em sucesso.
Quando você toca com sucesso em um arquivo inexistente, as operações que vemos são (removendo os detalhes):
getattr /test
unique: 190, error: -2 (No such file or directory), outsize: 16
create flags: 0x8841 /test 0100644 umask=0022
fgetattr[140469187119648] /test
flush[140469187119648]
utime /test 1507647885 1507647885
getattr /test
flush[140469187119648]
release[140469187119648] flags: 0x8801
Nós vemos o teste getattr para o arquivo falhar, o que é normal, pois não existe, então vamos criar o arquivo.
Se o arquivo for removido agora no servidor e fizermos o toque novamente no cliente, veremos uma sequência diferente:
getattr /test
unique: 215, success, outsize: 144
open flags: 0x8801 /test
unique: 216, error: -2 (No such file or directory), outsize: 16
Agora, o getattr diz que o arquivo ainda existe, então touch
passa para open()
do arquivo, mas isso resulta em sua mensagem de erro: o arquivo realmente não existe.
Portanto, tudo parece ser um problema do cache do cliente de quais arquivos estão sendo lentos demais para acompanhar as mudanças no controle remoto. A resposta mais simples é montar seu controle remoto com um tempo limite menor para a chamada getattr
, ou seja, a chamada do sistema stat()
. Isso deve funcionar para você
sshfs -o cache_stat_timeout=0 ...