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.

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.