问题

问题

设想

  • NFS 共享安装在/mnt/temp/dir(其他共享安装在子目录中),
  • umount在那里的一切,但据说,它不能很好地工作(也许我umount /mnt/temp/dir不是像首先那样卸载“嵌套”共享/mnt/temp/dir/subdir*),
  • 我愿意mount -o bind /data/temp /mnt/temp
  • 我愿意mount /mnt/temp/dir
  • 我这样做mount /mnt/temp/dir/subdir1...而且效果很好。

注意:/mnt/temp最初托管在 root ( /) 文件系统上/dev/sda6,并且/data是来自 的另一个文件系统/dev/sda8

问题

我无法删除/mnt/temp/dir根文件系统上的目录:

# mount -o bind / /test/root
# rmdir /test/root/mnt/temp/dir
rmdir: failed to remove `dir': Device or resource busy

一些解释

/mnt/temp/dir已安装两次,可能一次在 root fs 上,一次在/datafs 上。

这是cat /proc/mounts

nfsserver:/some/share/ /mnt/temp/dir nfs rw,relatime(...) 0 0
nfsserver:/some/share/ /mnt/temp/dir nfs rw,relatime,(...) 0 0

更有趣的是cat /proc/1/mountinfo

29 20 0:18 / /mnt/temp/dir rw,relatime - nfs nfsserver:/some/share/ rw,(...)
33 31 0:18 / /mnt/temp/dir rw,relatime - nfs nfsserver:/some/share/ rw,(...)

看,开头的两个数字是不同的

内核文档说对于这两个字段:

(1) mount ID:  unique identifier of the mount (may be reused after umount)
(2) parent ID:  ID of parent (or of self for the top of the mount tree)

它们还有不同的父级 20 和 31(根 fs 和/datafs),请参阅:

20 1 8:6 / / rw,relatime - ext4 /dev/sda6 rw,(...)
31 20 8:8 /temp /mnt/temp rw,relatime - ext4 /dev/sda8 rw,(...)

如果我尝试这样做umount /mnt/temp/dir,我会收到两条错误消息:

umount.nfs: /mnt/temp/dir: device is busy
umount.nfs: /mnt/temp/dir: device is busy

问题

我怎样才能成为umount“坏”的(安装 ID 29)?

甚至umount(2)系统调用也采用路径作为参数,而不是“安装 ID”。

答案1

这尚未经过测试,但它至少可以绕过“设备正忙”问题。

将安装点移动到其他位置。这样,两个挂载点之间就不会再出现混淆。

mkdir /foo
mount --move /mnt/temp/dir /foo

相关内容