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.
rm dir-name -rf
?Respostas:
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.
lsof dir-name/.fuse_hidden000bd8c100000185
para descobrir quais processos estão mantendo o identificador de arquivo aberto.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.
fonte
lsof
me ajudou a identificar qual processo ainda estava lendo o arquivo e então eu era capaz de remover tudo!lsof
efuser
não trago nenhum processo para esse arquivo, alguma sugestão?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
.Trashes
diretório para excluir o.fuser_hidden
arquivo.Espero que isto ajude!
fonte