sudo mount --bind可将源目录实时镜像到目标路径,两者共享同一数据、不复制不依赖网络;需root权限,源与目标目录必须预先存在;支持-o ro只读、--rbind递归绑定;持久化需写入/etc/fstab,格式为“源 目标 none bind,选项 0 0”;卸载须用umount,禁用rm -rf。

直接用 sudo mount --bind 命令就能完成,核心是让两个路径实时共享同一份数据,不复制、不依赖网络,也不改变源目录本身。
基础操作:临时映射一个目录
这是最常用也最简单的用法。注意两点:源目录和目标目录都必须已存在;命令需 root 权限。
- 先创建目标目录(如果不存在):
sudo mkdir -p /mnt/app-logs - 执行绑定:
sudo mount --bind /data/app-logs /mnt/app-logs - 验证是否生效:
findmnt -t none | grep app-logs或直接ls /mnt/app-logs看内容是否与源一致
控制访问权限:只读或递归挂载
默认绑定是可读写的,但你可以通过选项限制行为,适合安全隔离或服务降权场景。
- 加
-o ro实现强制只读:sudo mount --bind -o ro /data/configs /srv/app/configs,之后任何写操作都会报 Read-only file system - 加
--rbind(或-o rbind)支持递归绑定,即源目录下已挂载的子文件系统(如 tmpfs、proc)也会被映射过去 - 注意:
ro只作用于该挂载点,不影响源目录其他用途;卸载重挂即可切回可写
持久化配置:重启后仍生效
临时挂载在系统重启后会丢失,要长期使用就得写进 /etc/fstab。
- 编辑 fstab:
sudo nano /etc/fstab - 添加一行(格式为
源路径 目标路径 none bind,选项 0 0):/data/app-logs /mnt/app-logs none bind,rw 0 0
若需只读:/data/configs /srv/app/configs none bind,ro 0 0 - 测试配置是否正确:
sudo mount -a,无报错即表示生效
卸载与注意事项
卸载必须用 umount,不能删目录或用 rm -rf,否则可能误删源数据。
- 卸载命令:
sudo umount /mnt/app-logs(目标路径即可) - 若提示 target is busy,说明有进程正在访问该路径,可用
lsof +D /mnt/app-logs查看并终止相关进程 - 绑定不跨命名空间:默认只在当前 mount namespace 生效,容器或新用户会话中不可见,除非显式设置传播属性(如
shared)











