umount: o alvo está ocupado

8

Montei /deve imediatamente tentei desmontar:

$ sudo mount -o rbind /dev m
$ sudo umount m
umount: /tmp/m: target is busy.
$ sudo lsof m
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
kdevtmpfs  55 root  cwd    DIR    0,6     4420    2 m
kdevtmpfs  55 root  rtd    DIR    0,6     4420    2 m

Eu li que fuserpode matar processos acessando o ponto de montagem, mas eu gostaria de entender o que está acontecendo neste caso simples. De acordo com a lsofsaída, algo usa o ponto de montagem como diretório de trabalho atual (cwd)?

Eu não quero usar desmontar preguiçoso.

Robert
fonte

Respostas:

11

Você costumava rbindmontar um sistema de arquivos e submounts. Para desmontar um sistema de arquivos, você deve desmontar seus submounts primeiro (e o mesmo para os submounts, recursivamente). Mas tome cuidado!

mount --make-rslave m
umount -R m

Sem o primeiro comando, você corre o risco de desmontar todas as submontagens na origem , devido à propagação da montagem. Nesse caso, isso significa todas as submontagens de /dev, o que teria efeitos negativos no sistema em execução ;-).

Basicamente, a propagação de montagem é uma enorme armadilha esperando que você caia nela :-). Parece que seria melhor se as montagens de ligação o desativassem por padrão.


kdevtmpfsé o thread do kernel que mantém o devtmpfs. Não impede a desmontagem de devtmpfs. Isso ocorre porque o thread do kernel é executado em uma montagem separada (como uma montagem de ligação). Você não pode ver a montagem original; está em um espaço para nome de montagem separado. Se você quiser tentar descobrir por que kdevtmpfsaparece lsof, eu não sei, talvez considere isso uma pergunta separada.

sourcejedi
fonte