umount: цель занята

8

Я установил /devи сразу попытался размонтировать:

$ 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

Я читал, что fuserможет уничтожить процессы, имеющие доступ к точке монтирования, но я хотел бы понять, что происходит в этом простом случае. Согласно lsofвыводу что-то использует точку монтирования в качестве текущего рабочего каталога (cwd)?

Я не хочу использовать ленивый размонтировать.

Роберт
источник

Ответы:

11

Вы использовали rbindдля монтирования файловой системы и подмонтирования. Чтобы размонтировать файловую систему, вы должны сначала размонтировать ее подмонтирования (и то же самое для их подмонтирования, рекурсивно). Но будь осторожен!

mount --make-rslave m
umount -R m

Без первой команды вы рискуете отключить все дополнительные монтирования в источнике из-за распространения монтирования. В этом случае это означает все дополнительные элементы /dev, которые будут иметь плохие последствия для вашей работающей системы ;-).

По сути, распространение маунтов - это огромная яма-ловушка, которая ждет, когда вы попадете в нее :-). Кажется, было бы лучше, если бы bind mounts отключил его по умолчанию.


kdevtmpfsэто поток ядра, который поддерживает devtmpfs. Это не мешает размонтировать devtmpfs. Это связано с тем, что поток ядра работает на отдельном монтировании (например, монтирование bind). Вы не можете видеть это оригинальное крепление; он находится в отдельном пространстве имен монтирования. Если вы хотите попытаться понять, почему kdevtmpfsпоявляется lsof, я не знаю, может быть, это отдельный вопрос.

sourcejedi
источник