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 que acessam o ponto de montagem, mas gostaria de entender o que está acontecendo neste caso simples. De acordo com a lsof
saída, algo usa o ponto de montagem como diretório de trabalho atual (cwd)?
Eu não quero usar desmontagem preguiçosa.
Você costumava
rbind
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!Sem o primeiro comando, você corre o risco de desmontar todas as submontagens no source , devido à propagação da montagem. Nesse caso, isso significa todas as submontagens de
/dev
, o que teria efeitos ruins em seu sistema em execução ;-).Basicamente, a propagação de montaria é uma armadilha enorme esperando que você caia nela :-). Parece que teria sido melhor se as montagens de ligação o desabilitassem por padrão.
kdevtmpfs
é o thread do kernel que mantém o devtmpfs. Não impede a desmontagem do devtmpfs. Isso ocorre porque o thread do kernel é executado em uma montagem separada (como uma montagem de ligação). Você não pode ver aquela montagem original; ele está em um namespace de montagem separado. Se você quiser tentar descobrir por quekdevtmpfs
aparece emlsof
, eu não sei, talvez considere isso uma pergunta separada.