Como descubro o que está impedindo que uma montagem de ligação seja desmontada?

2

Eu tenho um problema com um ponto de montagem sendo muito ocupado para desmontar. Normalmente, lsof ou fuser me diria qual processo está usando, mas isso é uma montagem de ligação, portanto lsof e fuser mostram o que está usando tanto o ponto de montagem original quanto o ponto de montagem de ligação.

Ex:

Monte os sistemas de arquivos:

$ sudo mkdir /mnt/mount /mnt/bind
$ sudo mount /dev/sdb1 /mnt/mount
$ sudo mount -o bind /mnt/mount /mnt/bind

Iniciar um processo que mantenha / mnt / mount ocupado demais para desmontar

$ sudo dd if=/dev/zero of=/mnt/mount/testfile bs=1 oflag=dsync

Verifique o que o fusor diz

$ sudo fuser -m /mnt/mount
/mnt/mount:           4022
$ sudo fuser -m /mnt/bind
/mnt/bind:            4022

Verifique o que o lsof diz

$ sudo lsof +D /mnt/mount
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dd      4022 root    1w   REG   8,17    28545   12 /mnt/mount/testfile

$ sudo lsof +D /mnt/bind
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dd      4022 root    1w   REG   8,17    40682   12 /mnt/bind/testfile

Tente desmontar os dois

$ sudo umount -v *
umount: /mnt/bind (/mnt/mount) unmounted
umount: /mnt/mount: target is busy

Se você seguir as mesmas etapas, mas informar ao dd para gravar o arquivo em / mnt / bind / testfile, a desmontagem / mnt / mount será bem-sucedida, mas a desmontagem / mnt / bind falhará.

É evidente que faz diferença qual ponto de montagem o processo (dd neste caso) está usando, mas lsof e fuser não se diferenciam. Existe algo que faz?

    
por Tal 28.11.2014 / 21:45

1 resposta

1

Graças a Wurtel, isso ficou evidente:

Enquanto o fusor e o lsof, conforme usados na minha pergunta, mostram o mesmo processo usando ambos os pontos de montagem, após um desses comandos informar o PID, executando:

lsof -p $PID

revela exatamente qual ponto de montagem está sendo usado. Um pouco de grepping e você está pronto.

    
por 01.12.2014 / 17:55