Как я могу понять, что мешает монтированию привязки отключиться?

У меня проблема с тем, что точка монтирования слишком занята, чтобы отключиться. Обычно 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, то unmounting / mnt / mount будет успешным, но отключение / mnt / bind завершится с ошибкой.

Ясно, что имеет значение, в котором монтируется процесс (dd в этом случае), но lsof и fuser не различаются. Есть что-то, что делает?

Благодаря wurtel это стало очевидным:

Хотя оба фьюзера и lsof, используемые в моем вопросе, оба показывают один и тот же процесс, используя обе точки монтирования, после того, как любая из этих команд сообщит вам PID, запустив:

 lsof -p $PID 

точно показывает, какая точка монтирования используется. Немного grepping, и вы настроены.