번들 마운트 제거를 방해하는 요인이 무엇인지 어떻게 알 수 있나요?

번들 마운트 제거를 방해하는 요인이 무엇인지 어떻게 알 수 있나요?

내가 겪고 있는 문제는 마운트 지점이 너무 바빠서 제거할 수 없다는 것입니다. 일반적으로 lsof 또는 Fuser는 어떤 프로세스가 이를 사용하고 있는지 알려주지만 이는 바인드 마운트이므로 lsof 및 Fuser는 어떤 프로세스가 원래 마운트 지점과 바인드 마운트 지점을 사용하고 있는지 보여줍니다.

전임자:

파일 시스템을 마운트합니다.

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

/mnt/mount를 너무 바빠서 마운트 해제할 수 없게 만드는 프로세스를 시작합니다.

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

퓨저의 내용을 확인하세요.

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

lsof가 말하는 내용을 확인하세요.

$ 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

둘 다 제거해 보세요.

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

동일한 단계를 따르지만 dd에게 파일을 /mnt/bind/testfile에 쓰라고 지시하면 /mnt/mount 마운트 해제는 성공하지만 /mnt/bind 마운트 해제는 실패합니다.

분명히 프로세스에서 사용하는 마운트 지점(이 경우 dd)은 다르지만 lsof와 fusionr에는 차이가 없습니다. 이것을 할 수 있는 것이 있나요?

답변1

wurtel 덕분에 이는 분명해졌습니다.

내 질문에 사용된 fusionr와 lsof는 두 마운트 지점을 모두 사용하는 동일한 프로세스를 보여주지만, 이 명령 중 하나가 PID를 알려준 후 다음을 실행합니다.

lsof -p $PID

어떤 마운트 지점이 사용되고 있는지 보여줍니다. grep을 조금만 하면 끝입니다.

관련 정보