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