diretório Undeletable

5

Tudo que eu tentei (sempre com privilégios de superusuário) falhou:

# rm -rf /path/to/undeletable
rm: cannot remove ‘/path/to/undeletable’: Is a directory
# rmdir /path/to/undeletable
rmdir: failed to remove ‘/path/to/undeletable’: Device or resource busy
# lsof +D /path/to/undeletable
lsof: WARNING: can't stat(/path/to/undeletable): Permission denied
lsof 4.86
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ''-h'' option to get more help information.

Quando eu tento qualquer uma das opções acima sem privilégios de superusuário, os resultados são basicamente os mesmos. A única diferença é que a mensagem inicial de AVISO do comando lsof tem Input/output error em vez de Permission denied . (Essa pequena diferença já é intrigante o bastante, mas, seja o que for ...)

Como posso destruir esse diretório?

    
por kjo 26.07.2015 / 23:01

1 resposta

8
# rm -rf /path/to/undeletable
rm: cannot remove ‘/path/to/undeletable’: Is a directory

rm chamadas stat(2) para verificar se /path/to/undeletable é um diretório (a ser excluído por rmdir(2) ) ou um arquivo (a ser excluído por unlink(2) . Como a chamada stat falha (nós Veremos porque em um minuto), rm decide usar unlink , o que explica a mensagem de erro.

# rmdir /path/to/undeletable
rmdir: failed to remove ‘/path/to/undeletable’: Device or resource busy

"Dispositivo ou recurso ocupado", não "Diretório não vazio". Portanto, o problema é que o diretório é usado por algo, não que contenha arquivos. O mais óbvio "usado por alguma coisa" é que é um ponto de montagem.

# lsof +D /path/to/undeletable
lsof: WARNING: can't stat(/path/to/undeletable): Permission denied

Isso confirma que stat no diretório falhou. Por que root teria falta de permissão? Essa é uma limitação do FUSE: a menos que seja montado com a opção allow_other , os sistemas de arquivos FUSE só podem ser acessados por processos com o mesmo ID de usuário que o processo que fornece o driver FUSE. Até o root é atingido por isso.

Portanto, você tem um sistema de arquivos FUSE montado por um usuário não-root. O que você quer fazer?

  • O mais provável é que você esteja apenas incomodado com esse diretório e queira desmontá-lo. Raiz pode fazer isso.

    umount /path/to/undeletable
    
  • Se você quiser se livrar do ponto de montagem, mas manter a montagem, mova-o com mount --move . (Somente Linux)

    mkdir /elsewhere/undeletable
    chown bob /elsewhere/undeletable
    mount --move /path/to/undeletable /elsewhere/undeletable
    mail bob -s 'I moved your mount point'
    
  • Se você quiser excluir os arquivos desse sistema de arquivos, use su ou qualquer outro método para alternar para esse usuário e exclua os arquivos.

    su bob -c 'rm -rf /path/to/undeletable'
    
  • Se você deseja excluir os arquivos ocultos pelo ponto de montagem sem interromper a montagem, crie outra visualização sem o ponto de montagem e exclua os arquivos de lá. (Somente Linux)

    mount --bind /path/to /mnt
    rm -rf /mnt/undeletable/* /mnt/undeletable/.[!.]* /mnt/undeletable/..?*
    umount /mnt
    
por 26.07.2015 / 23:38