我有一个符号链接:
/test
指向一个目录:
/source
我想执行绑定挂载以将 /new 挂载到 /test 上
mount -o bind /new /test
但是这会将 /new 绑定到 /source 上(/test 指向 /source - 显示来自 /new 的文件,但不是我想要的)。如何停止按照符号链接挂载并将其挂载到 /test。
答案1
由于 /test 不是真实目录,因此此方法无效。
取消链接,将其创建为真实目录,然后执行绑定挂载。
答案2
可以使用新的 Linux 内核挂载 API 通过符号链接创建绑定挂载。以下是示例:
unshare -m
mount -t tmpfs tmpfs /tmp
cd /tmp
echo TEST1 > test1
echo TEST2 > test2
ln -s test1 symlink1
ln -s test2 symlink2
cat symlink1
# TEST1
cat symlink2
# TEST2
bindmount-v2 symlink1 symlink2
# Mounting symlink1 into symlink2
cat symlink2
# TEST1
cat /proc/self/mountinfo | grep symlink
# 2221 2323 0:120 /symlink1 /tmp/symlink2 rw,relatime - tmpfs tmpfs rw,inode64
这使用简单的 C 程序bindmount-v2
,源代码https://github.com/Snorch/linux-helpers/blob/master/bindmount-v2.c
我不知道有任何尝试将其添加到安装实用程序。
仅支持 v5.12+ 内核。AT_SYMLINK_NOFOLLOW 是在符号链接之上创建绑定挂载的关键部分。如果您删除 mount_setattr 相关的块(这对您的情况可能并不重要),您可以在 v5.2+ 内核上执行相同操作。
注意:符号链接不能与目录绑定安装。