Comportamento estranho do samba e do gvfs - ~ metade dos diretórios/arquivos parece estar "ausente" aleatoriamente

Comportamento estranho do samba e do gvfs - ~ metade dos diretórios/arquivos parece estar "ausente" aleatoriamente

A situação:Servidor com Gentoo Linux e Samba. Existem cerca de 15 PCs com Windows, um MacBook Pro e um laptop Samsung com Ubuntu. Não há domínio, apenas um grupo de trabalho e o servidor é usado apenas para compartilhamentos Samba. No Ubuntu eu uso gvfs para montar compartilhamentos de samba.

E o problema:Um dia, cerca de metade dos diretórios desapareceram, mas apenas durante a visualização neste laptop Ubuntu. Se eu fizer ssh para o servidor, posso ver os arquivos/diretórios ausentes e também posso ver as coisas que faltam nos computadores Win ou Mac.

O temporário:Quando eu renomeio alguns dos diretórios ausentes, mesmo que seja um símbolo, os diretórios ausentes reaparecem... mesmo sem recarregar/atualizar o compartilhamento montado no gvfs. Se eu renomear instantaneamente de volta para os diretórios/nomes de arquivos anteriores, todos os diretórios/arquivos ausentes anteriormente desaparecerão instantaneamente novamente.

Portanto, como esse problema reapareceu cerca de um mês depois, preciso de alguns conselhos sobre onde começar a verificar.

Responder1

Posso ter enfrentado um problema semelhante, mas apenas faltando um único arquivo. Eu suspeito que o auxiliar de montagem do Linux samba seja problemático.

Você poderia executar os seguintes testes em seu cliente?

cd [diretório com subdiretórios ausentes]

ls -al | grep [nome ausente] -> nada encontrado (readdir está quebrado)
ls -al [nome ausente] -> lista o elemento (estatística funcionando) - use -d quando [nome ausente] for um diretório

Para descobrir se o kernel está escondendo esses arquivos de você:

quantidade de compartilhamento SMB
inicie "tcpdump -p -i [seu nic] -s0 -w net.dump host [seu host samba]"
monte o compartilhamento
execute o teste "ls -al | grep [nome ausente]"
pare o tcpdump
Verifique se o nome do arquivo está no tcpdump, mas não é mostrado no dirlisting. Portanto:
strings --encoding=b net.dump | grep [nome ausente]
strings --encoding=l net.dump | grep [nome ausente]

Se o nome for incluído pelo menos uma vez, isso indicaria que o servidor samba está enviando a listagem inteira, mas o Linux descarta algumas entradas.

informação relacionada