bind mount 是什么
bind mount 把一个已经存在的目录挂载到另一个路径上,让同一份数据通过两个入口被访问。容器把宿主机目录挂进容器、chroot 环境补齐 /proc 与设备节点、日志需要多路径访问时都会用到。它只改变挂载视图,不复制数据,因此不会额外占用磁盘空间。
基本信息
| 用途 | 把同一目录挂载到多个路径 |
|---|---|
| 语法 | mount --bind 源目录 目标目录 |
| 持久化 | 在 /etc/fstab 中写 bind 选项 |
| 相关命令 | findmnt 查看绑定关系、umount 解除绑定 |
典型使用场景
- 容器或 chroot 环境里把宿主机目录暴露到指定路径
- 应用只认固定路径时,把真实数据目录绑定过去
- 日志分散在不同分区时统一到同一路径查看
- 迁移期间让新旧路径同时可访问,便于灰度
- 只读暴露配置目录,防止应用误改
- 沙箱环境里限制可见的目录范围
临时绑定与持久化
临时绑定与持久化
sudo mkdir -p /srv/appdata # 目标挂载点必须先存在
sudo mount --bind /data/app /srv/appdata
findmnt /srv/appdata # 确认绑定关系
sudo mount -o remount,ro,bind /srv/appdata # 只读 bind 的正确写法
sudo mount --rbind /data /srv/alldata # 递归绑定,包含子挂载
sudo umount /srv/appdata # 卸载的是目标侧
/data/app /srv/appdata none bind 0 0 # fstab 持久化写法
sudo mount -a # 应用 fstab 配置写法与含义
| 写法 | 含义 | 常见问题 |
|---|---|---|
| mount --bind | 普通绑定 | 源目录后来新增的挂载不会跟随 |
| mount --rbind | 递归绑定 | 包含源下已有的子挂载 |
| bind,ro | 只读绑定 | 需配合 remount,单独写 ro 不生效 |
| fstab 中的 bind 项 | 开机自动绑定 | 要确保源与目标都存在 |
| umount 目标路径 | 解除绑定 | 卸载源路径会失败或误卸真实挂载 |
绑定之后,源目录如果又新增了挂载(例如下面挂了新分区),默认不会自动出现在绑定点上;确实需要跟随变化就改用 --rbind。
想说只读必须用 bind,ro 组合,或者先绑定再 remount,ro:单独写 ro 不会生效,容易产生「以为只读其实可写」的错觉。
卸载绑定点要卸载目标路径;对源路径执行 umount 会失败,某些场景下还会误卸真实挂载,操作前先用 findmnt 看清挂载关系。