내가 겪고 있는 문제는 마운트 지점이 너무 바빠서 제거할 수 없다는 것입니다. 일반적으로 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을 조금만 하면 끝입니다.