在 Linux 中,mount 绑定(bind mount) 指的是把一个已经挂载的目录或文件,再挂载到另一个位置,使得两个路径指向同一份文件系统内容。
可以简单理解为:
给同一个目录/文件再创建一个“访问入口”。
普通 mount 是把一个设备/文件系统挂载到某个目录。
而 bind mount 是把一个已经存在的目录或文件,挂载到另一个目录。
mount --bind /源目录 /目标目录
之后:
/源目录 和 /目标目录mkdir /mnt/test1
mkdir /mnt/test2
mount --bind /mnt/test1 /mnt/test2
现在:
echo hello > /mnt/test1/a.txt
cat /mnt/test2/a.txt
# 输出 hello
取消绑定:
umount /mnt/test2
touch /mnt/test1/x
ls /mnt/test2/x # 一定存在
mount --bind /data /mnt
mount -o remount,ro /mnt
可让 /mnt 只读,而 /data 仍可写(取决于内核版本和挂载方式)。
mount --rbind /src /dst
⚠️ 注意:
rbind 可能把 /proc、/sys、/dev 也一起绑进去。
| 对比项 | bind mount | 符号链接 |
|---|---|---|
| 本质 | 内核级挂载 | 文件系统对象 |
| 跨文件系统 | ✅ | ✅ |
| 权限控制 | ✅ | ❌ |
| 容器/chroot | ✅ 常用 | ❌ 不推荐 |
| 可被 umount | ✅ | ❌ |
mount --bind /proc /chroot/proc
mount --bind /dev /chroot/dev
mount --bind /data/projects /var/www/html
mount --bind /conf /etc/nginx/conf.d
mount -o remount,ro /etc/nginx/conf.d
/etc/fstab 中使用/data/projects /var/www/html none bind 0 0
或递归:
/data /mnt/data none rbind 0 0
Linux 的 mount 绑定(bind mount)就是:把一个已挂载的目录或文件,再挂载到另一个位置,让两个路径访问同一份真实数据。
如果你愿意,我也可以结合 Docker bind mount / volume、systemd mount 单元 或 内核实现原理 再深入讲。