Tot*_*tor 5 linux mount unmounting bind-mount
/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最初托管在根 ( /) 文件系统上/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
Run Code Online (Sandbox Code Playgroud)
/mnt/temp/dir安装了两次,可能一次在根 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
Run Code Online (Sandbox Code Playgroud)
更有趣的是,这里是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,(...)
Run Code Online (Sandbox Code Playgroud)
看,开头的两个数字是不同的。
(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)
Run Code Online (Sandbox Code Playgroud)
他们也有不同的父级 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,(...)
Run Code Online (Sandbox Code Playgroud)
如果我尝试umount /mnt/temp/dir,我会收到 2 条错误消息:
umount.nfs: /mnt/temp/dir: device is busy
umount.nfs: /mnt/temp/dir: device is busy
Run Code Online (Sandbox Code Playgroud)
我怎么能umount“坏”一个(安装 ID 29)?
甚至umount(2)系统调用也采用参数路径,而不是“安装 ID”。
这未经测试,但它至少会绕过 \xe2\x80\x9cdevice is busy\xe2\x80\x9d 问题。
\n\n将安装点移动到其他位置。这样,两个挂载点之间就不会再出现混淆。
\n\nmkdir /foo\nmount --move /mnt/temp/dir /foo\nRun Code Online (Sandbox Code Playgroud)\n