设想
- 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 上,一次在/data
fs 上。
这是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 和/data
fs),请参阅:
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