A maneira de verificar é fuser -vm /mnt/dir
, que deve ser executada como root. Ele informará quais processos estão acessando o ponto de montagem.
Uma alternativa é lsof /mnt/dir
, que mostrará cada arquivo aberto na montagem. Novamente, é melhor executar como root.
Você pode executar qualquer um deles como não raiz, mas a saída será limitada aos seus processos - os de outros usuários simplesmente não serão mostrados silenciosamente, mesmo que impeçam a desmontagem do sistema de arquivos.
Exemplo:
Watt:~# fuser -vm /mnt/Zia/src
USER PID ACCESS COMMAND
/mnt/Zia/src: root kernel mount /mnt/Zia/src
anthony 24909 ..c.. bash
anthony 25041 F.c.. gvim
O campo "acesso" informa como está sendo acessado. Nesse caso, o kernel o usa em forma de montagem (duh, mas desmontar só funcionará com isso). bash
possui-o como o diretório de trabalho atual (terá que ser cd
um diretório diferente antes da desmontagem) e o gvim possui o diretório atual e um arquivo aberto (será necessário fechar o gvim).
Watt:~# lsof /mnt/Zia/src
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 24909 anthony cwd DIR 0,26 12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim 25041 anthony cwd DIR 0,26 12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim 25041 anthony 6u REG 0,26 16384 3526219 /mnt/Zia/src/perl/.utf8.c.swp (zia.vpn.home:/home/anthony/src)
Nesta saída, você pode ver os diretórios atuais do bash e do gvim (como tipo DIR
). Você também pode ver qual arquivo o gvim abriu para gravação.
Como forçar o problema:
fuser
possui uma -k
opção que enviará um sinal (padrão SIGKILL
:) para cada processo usando a montagem. Essa é uma maneira bastante vigorosa de impedir que a montagem fique ocupada. (E, claro, tenha cuidado com o que você SIGKILL
!)
umount
tem uma -l
opção para executar uma desmontagem lenta. A montagem será removida do espaço para nome do sistema de arquivos (para que você não a veja /mnt/Zia/src
mais no exemplo), mas ela permanecerá montada, para que os programas que a acessem possam continuar a fazê-lo. Quando o último programa acessando ele sai, a desmontagem realmente ocorre.
Há uma causa final corrigível de falha na desmontagem, e esse é um servidor NFS inoperante. Aqui você pode usar umount -f
, mas corre o risco de perder dados, se o fizer. (O cliente pode ter gravações em cache que ainda não foram confirmadas pelo servidor e essas gravações serão descartadas. No entanto, os aplicativos já foram informados de que a gravação foi bem-sucedida.)