umount: o destino está ocupado

8

Eu montei /dev e 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 fuser pode matar processos acessando o ponto de montagem, mas eu gostaria de entender o que está acontecendo neste caso simples. De acordo com a saída lsof , algo usa o ponto de montagem como o diretório de trabalho atual (cwd)?

Eu não quero usar a desmontagem lenta.

    
por robert 24.08.2018 / 10:02

1 resposta

11

Você usou rbind para montar um sistema de arquivos e submontagens. Para desmontar um sistema de arquivos, você deve primeiro desmontar suas submontagens (e o mesmo para suas submontagens, 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 fonte , devido à propagação de montagem. Nesse caso, isso significa todas as submontagens de /dev , o que teria efeitos ruins em seu sistema em execução; -).

Basicamente montar propagação é uma enorme armadilha esperando por você para cair dentro :-). Parece que teria sido melhor se o bind fosse desativado por padrão.

kdevtmpfs é o encadeamento do kernel que mantém o devtmpfs. Não impede a desmontagem do devtmpfs. Isso ocorre porque o segmento do kernel é executado em uma montagem separada (como uma montagem de ligação). Você não pode ver essa montagem original; está em um namespace de montagem separado. Se você quiser tentar descobrir por que kdevtmpfs aparece em lsof , não sei, talvez considere uma questão separada.

    
por 24.08.2018 / 10:15

Tags