合并挂载点的两种方案(Union File System/Rclone Union)

在 VPS 上将两个挂载点(A 和 B)合并为一个虚拟目录,最专业且高效的方法是使用 Union File System(联合文件系统)

通俗地说,这就像是在两个文件夹上盖了一层“透明玻璃”,你通过这层玻璃看到的是两个文件夹内容的合集。

以下是两种最推荐的方案:


方案一:使用 MergerFS(最推荐,简单且强大)

mergerfs 是目前 Linux 社区最流行的合并目录工具,它基于 FUSE,配置非常灵活,特别适合处理像 WebDAV 挂载点这种非物理磁盘。

1. 安装 mergerfs

在 Debian/Ubuntu 上:

sudo apt update && sudo apt install mergerfs

2. 手动合并

假设你的挂载点是 /mnt/dav_a/mnt/dav_b,你想合并到 /mnt/webdav_total

# 创建合并后的目标文件夹
mkdir -p /mnt/webdav_total

# 执行合并
mergerfs -o allow_other,use_ino,cache.files=off /mnt/dav_a:/mnt/dav_b /mnt/webdav_total

  • /mnt/dav_a:/mnt/dav_b:用冒号分隔你需要合并的多个源路径。
  • allow_other:允许非 root 用户访问。

3. 设置开机自启

编辑 /etc/fstab 文件,在末尾添加一行:

/mnt/dav_a:/mnt/dav_b  /mnt/webdav_total  mergerfs  defaults,allow_other,use_ino,category.create=mfs,minfreespace=1G,fsname=mergerfs  0  0


方案二:使用 Rclone Union(如果你本身就在用 Rclone 挂载)

如果你之前的 WebDAV 就是通过 rclone mount 挂载的,那么直接在 Rclone 内部配置一个 union 类型的远程节点是最优雅的。

1. 配置 Union

运行 rclone config,选择 New remote,名字起为 combined_dav

  • Storage: 选择 Union
  • Upstreams: 输入你的两个 WebDAV 远程名称(或者本地挂载路径),例如:remote_a: remote_b: 或者 /mnt/dav_a /mnt/dav_b
  • Action Policy: 选择 epmfs (或者默认即可)。

2. 挂载合并后的节点

rclone mount combined_dav: /mnt/webdav_total --copy-links --allow-other --vfs-cache-mode writes &


方案对比:我该选哪个?

特性 MergerFS Rclone Union
适用场景 已经挂载好的本地文件夹/挂载点 原生使用 Rclone 管理的远程存储
性能 极高,系统级 FUSE 取决于 Rclone 配置
灵活性 非常高(可以指定写入规则) 适合纯云端文件的逻辑合并
安装难度 极易 需熟悉 Rclone 命令

:light_bulb: 小贴士(避坑指南):

  1. 重名文件:如果 A 和 B 文件夹里都有一个同名文件 1.mp4,合并后你通常只能看到 A 里的那个(取决于合并顺序)。
  2. 写入权限:合并目录默认会将新文件写入到剩余空间最多的那个挂载点(MergerFS 的 mfs 策略),或者按照你定义的顺序写入。
  3. 依赖关系:请务必确保 WebDAV A 和 B 先挂载成功,再执行 MergerFS 合并命令。如果是开机自启,建议在 fstab 中处理好顺序。