Como excluir arquivos .fuse_hidden *?

34

Eu tenho um pequeno servidor Linux (Debian Squeeze) que executa um servidor Samba configurado para compartilhar algumas pastas com algumas máquinas Windows. Ao tentar excluir um dos diretórios do Windows, recebi o erro "Não é possível excluir a pasta".

Tentei excluir o diretório do console do linux. Recebi um erro semelhante:

# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty

Listei o conteúdo do diretório e encontrei um arquivo chamado .fuse_hidden seguido por um número hexadecimal (000ryc100000185).

# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185

Tentei excluir o arquivo .fuse_hidden, mas um novo arquivo foi criado instantaneamente (observe a alteração do número hexadecimal).

# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186

Eu também tentei usar o Midnight Commander para excluir o arquivo sem sucesso.

Outras soluções que encontrei até agora envolvem a GUI e só tenho console.

Todas as sugestões são apreciadas.

Lando
fonte
3
O daemon de fusível parece estar ativo. Pare antes de excluir o arquivo.
#
Enquanto isso, mudei meu comentário.
13--13
Esse foi o meu primeiro pensamento, mas não consegui encontrar um serviço do Fuse para parar; reiniciei o Samba, resolvido o problema, o arquivo desapareceu. Obrigado.
Lando
rm dir-name -rf?
Hauke ​​Laging

Respostas:

52

Isso é semelhante ao que acontece quando você exclui um arquivo que outro sistema abriu em uma montagem NFS. O problema é que o arquivo foi removido do sistema de arquivos enquanto sua "contagem de links" era> 1, o que significa que outros processos ainda o mantêm aberto.

  • Efetue login no sistema em que o arquivo reside fisicamente. (sem montagem em rede)
  • Execute lsof dir-name/.fuse_hidden000bd8c100000185para descobrir quais processos estão mantendo o identificador de arquivo aberto.
  • Encerre esses processos se fizer sentido ou decida quais etapas você pode executar para liberar "graciosamente" o identificador de arquivo aberto sem encerrar o processo.

Normalmente, quando você exclui um arquivo em seu sistema de arquivos local que outro processo abriu, o sistema operacional atende à sua solicitação e a remove da árvore de diretórios, mas o inode para o qual a árvore aponta ainda é considerado em uso pelo sistema operacional. Sempre que um arquivo é aberto, sua "contagem de links" é incrementada em um, e o espaço é liberado apenas quando a contagem de links chega a zero.

Quando você se deparar com um problema dessa natureza, significa que o sistema operacional decidiu, por qualquer motivo, não remover esse arquivo da árvore de diretórios: geralmente porque ele tem motivos para acreditar que ainda precisa ser acessado por coisas que não podem utilize o número do inode direto. Pode parecer inicialmente compatível, mas nos bastidores o sistema operacional o renomeia para ter um prefixo de ponto oculto, para que ainda seja acessível com alguma forma de endereçamento do caminho do sistema de arquivos. O espaço ainda será liberado quando a contagem de links chegar a zero, mas esse objeto permanecerá no diretório até que os links acabem.

Andrew B
fonte
Eu acho que tinha a ver com algum serviço ainda usando o arquivo (neste caso, Samba), eu tinha esquecido lsof.
Lando
Leve-me ao problema. lsofme ajudou a identificar qual processo ainda estava lendo o arquivo e então eu era capaz de remover tudo!
ThanksForAllTheFish
Estou com o problema, isso lsofe fusernão trago nenhum processo para esse arquivo, alguma sugestão?
Mxmlnkn
0

Obrigado pelas sugestões, mas nada funcionou para mim. Mas encontrei uma solução: mudei o SSD externo para um PC executando o Windows. Usando o File Explorer (com "Itens ocultos" marcado), naveguei até o .Trashesdiretório para excluir o .fuser_hiddenarquivo.

Espero que isto ajude!

RobertC
fonte