news 2026/9/9 13:23:04

如何用 rclone union 后端把多个网盘合并成一个统一视图并选择写入策略?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 rclone union 后端把多个网盘合并成一个统一视图并选择写入策略?

如何用 rclone union 后端把多个网盘合并成一个统一视图并选择写入策略?

【免费下载链接】rclone"rsync for cloud storage" - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Azure Blob, Azure Files, Yandex Files项目地址: https://gitcode.com/GitHub_Trending/rc/rclone

当你同时持有几个网盘(或本地目录),希望用一个 remote 名称就能列出、读取和写入这些远端的内容时,rclone 的union后端(v1.44 引入)可以把多个上游远端合并成一个统一视图。完成本任务后,你可以:用一条rclone lsd remote:命令列出所有上游的顶层目录,用一条rclone copy命令把新文件写入指定的上游,并且通过action_policycreate_policysearch_policy三个策略项决定"写入落到哪个上游"。本文的操作路径来自 union 后端文档。

用 rclone config 配置 union remote

先确认所有要合并的上游远端都已经配置完成,然后运行交互式配置:

rclone config

在菜单中选择n) New remote,输入名称后在Type of storage to configure中填入union。文档给出的交互过程节选如下("epall"、"epmfs"、"ff" 分别为三项策略的默认值,直接回车即采用):

Type of storage to configure. Choose a number from below, or type in your own value [snip] XX / Union merges the contents of several remotes \ "union" [snip] Storage> union List of space separated upstreams. Can be 'upstreama:test/dir upstreamb:', '\"upstreama:test/space:ro dir\" upstreamb:', etc. Enter a string value. Press Enter for the default (""). upstreams> remote1:dir1 remote2:dir2 remote3:dir3 Policy to choose upstream on ACTION class. Enter a string value. Press Enter for the default ("epall"). action_policy> Policy to choose upstream on CREATE class. Enter a string value. Press Enter for the default ("epmfs"). create_policy> Policy to choose upstream on SEARCH class. Enter a string value. Press Enter for the default ("ff"). search_policy> Cache time of usage and free space (in seconds). This option is only useful when a path preserving policy is used. Enter a signed integer. Press Enter for the default ("120"). cache_time>

其中:

  • upstreams是空格分隔的上游列表,可以写本地路径,也可以写已配置的远端,例如remote1:dir1 remote2:dir2 remote3:dir3
  • 上游路径中可以直接带子目录,例如mydrive:private/backup。此时对 union remote 的操作会映射到该子目录:rclone mkdir backup:desktoprclone mkdir mydrive:private/backup/desktop完全等价。
  • 上游路径中的..段没有特殊处理,按普通路径段透传,例如backup:../desktop等同于mydrive:private/backup/../desktop
  • 带空格的上游需要整体加引号,文档示例格式为"upstreama:test/space:ro dir" upstreamb:

用 :ro、:nc、:writeback 标记上游的写入行为

每个上游末尾可以追加标签来控制写入行为,这直接影响后续策略的过滤规则:

标签含义
:ro只读:文件只从这里读取,从不写入
:nc不创建:不在此创建新的文件或目录
:writeback在其它远端找到的文件会写回这里(见后文 writeback 小节)

例如remote:directory/subdirectory:ro表示该上游只读。过滤规则在 union 文档 中明确给出:

  • search 类策略不做任何过滤;
  • action 类策略会过滤掉标记为:ro的远端;
  • create 类策略会过滤掉标记为:ro:nc的远端;
  • 如果所有远端都被过滤掉,操作会返回错误。

选择写入策略:action / create / search 三类

union 后端把所有操作分成三类,每一类各自分配一个策略,策略决定执行该操作时选用哪个上游:

类别说明覆盖的操作
action写入已存在的文件move、rmdir、rmdirs、delete、purge,以及 copy、sync 作为目标且文件已存在时
create创建不存在的文件copy、sync 作为目标且文件不存在时
search读取和列出文件ls、lsd、lsl、cat、md5sum、sha1sum,以及 copy、sync 作为源时
N/A不适用策略size、about

策略分两种基本类型:以ep开头的是path preserving(existing path),只考虑"相对路径已经存在"的上游;非 path preserving 策略会在目标上游中按需创建路径。

可选策略及文档中的描述如下:

策略描述
allsearch 与 action 同类别等同 epall;create 类别作用于所有上游
epallsearch:按配置顺序取相对路径存在的第一项;action:作用于所有找到的;create:作用于相对路径存在的所有上游
epff按上游响应时间,取相对路径存在的第一项
eplfs在相对路径存在的上游中选剩余空间最少者
eplus在相对路径存在的上游中已用空间最少者
eplno在相对路径存在的上游中对象数量最少者
epmfs在相对路径存在的上游中剩余空间最多者(create_policy 默认值)
eprand调用 epall 后随机返回一个上游
ffsearch/action 同 epff;create 取按响应时间先返回的上游(search_policy 默认值)
lfs / lus / lno / mfs分别按"剩余空间最少 / 已用空间最少 / 对象数最少 / 剩余空间最多"选择上游
newest选 mtime 最大的文件或目录
rand调用 all 后随机返回一个上游

配置项、环境变量和默认值(来自 union 文档的标准选项):

配置项环境变量默认值
upstreamsRCLONE_UNION_UPSTREAMS必填
action_policyRCLONE_UNION_ACTION_POLICYepall
create_policyRCLONE_UNION_CREATE_POLICYepmfs
search_policyRCLONE_UNION_SEARCH_POLICYff
cache_timeRCLONE_UNION_CACHE_TIME120(秒,仅在使用 path preserving 策略时有效)
min_free_space(高级)RCLONE_UNION_MIN_FREE_SPACE1Gi,剩余空间低于该值的远端不参与 lfs/eplfs 策略

使用基于配额的策略前先确认上游支持对应字段

lfs、eplfs、mfs、epmfs、lus、eplus、lno、eplno 这些策略依赖配额信息,只在你的上游支持相应字段时才应使用:

策略所需字段
lfs、eplfsFree
mfs、epmfsFree
lus、eplusUsed
lno、eplnoObjects

检查方式是对每个上游运行rclone about remote: [flags],看输出中是否存在所需字段。rclone about 文档 展示了典型输出(文档示例,数值因远端而异):

Total: 17 GiB Used: 7.444 GiB Free: 1.315 GiB Trashed: 100.000 MiB Other: 8.241 GiB

字段说明中Free是本用户可用空间,Used是已用空间,Objects是对象总数;并非所有后端都打印所有字段,后端未提供的信息不会包含在输出里。另外 overview 文档 明确说明:没有 about 能力的后端无法确定剩余空间,因此不能作为 union remote 中使用mfs(most free space)策略的成员。若你的上游属于这类后端,应选择ffepallnewestrand等不依赖配额的策略。

验证统一视图是否生效

配置完成后,按文档给出的命令逐个验证:

列出remote1:dir1remote2:dir2remote3:dir3三个上游的顶层目录:

rclone lsd remote:

列出三个上游的所有文件:

rclone ls remote:

把另一个本地目录复制进 union,文档示例为:

rclone copy C:\source remote:source

文档说明这条复制会落到remote3:dir3。这里不要把它理解为"永远落到最后一个上游"——写入目标是create策略决定的,示例环境下策略行为正好选中remote3:dir3;如果你修改了create_policy,落点会按策略规则变化。

如果你给某个上游加了子目录前缀(如mydrive:private/backup),可以用mkdir验证路径映射:执行rclone mkdir backup:desktop,然后在mydrive下确认private/backup/desktop已创建,两者应当一致。

可选分支:用 :writeback 搭一个简单的缓存

:writeback标签加在一个上游上,可以构造简单的缓存系统。union 文档 给出的配置示例:

[union] type = union action_policy = all create_policy = all search_policy = ff upstreams = /local:writeback remote:dir

其行为:

  • 读取文件时,如果文件在remote:dir而不在/local,rclone 会先把整个文件复制到/local,再返回/local中该文件的引用。复制使用等同rclone copy的方式,配置了--multi-thread-streams时会使用它,所有复制都会记录 INFO 级别日志;
  • 写入文件时,会同时写入remote:dir/local
  • upstreams可以加任意多个远端,但:writeback标签只能有一个;
  • rclone 除了把文件写回之外不会管理:writeback远端,过期清理、控制大小需要你自行处理。

限制与边界

  • sizeabout两个操作在 union 下标记为 N/A,不参与任何策略。
  • 策略行为受标签过滤约束:action 排除:ro,create 排除:ro:nc;全部被过滤时操作返回错误。
  • 上游 metadata 方面,union 支持底层远端所支持的任意 metadata 的读写(见 union 文档 Metadata 一节)。
  • cache_time只对 path preserving 策略有效,默认 120 秒,用于缓存用量与剩余空间查询结果。

完成上述配置与验证后,你就可以把remote:当作单一远端使用,写入落点由三类策略分别控制;后续如需调整,只需改action_policy/create_policy/search_policy三个配置项或对应的RCLONE_UNION_*环境变量。

【免费下载链接】rclone"rsync for cloud storage" - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Azure Blob, Azure Files, Yandex Files项目地址: https://gitcode.com/GitHub_Trending/rc/rclone

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 13:20:36

从1234567到写出旋律:简谱入门与数字音频合成实践

这串数字在我电脑的文件夹里躺了十几年。有人看到"1234567"只当它是普通计数,可在音乐人眼里,它就是旋律最原始的编码:Do、Re、Mi、Fa、Sol、La、Si。这篇文章我想把这串数字拆开,讲讲它背后的简谱体系、音高物理、节奏…

作者头像 李华
网站建设 2026/9/9 13:19:20

Gradle增量构建从原理到实战:告别全量构建,提升多模块编译效率

先问一句:你所在的项目是不是也这样——改了一行日志代码,等整个项目编译、打包跑完,水都接回来喝完了,结果还没跑完。如果你在一个多模块的 Gradle 项目里待过,这种场景应该不陌生。Gradle 的增量构建,就是…

作者头像 李华
网站建设 2026/9/9 13:18:31

数据结构C语言版速成复习指南:补考期末考研通用框架

数据结构(C语言版)这门课,是计算机专业里挂科率最高、补考压力最大的几门课之一。很多学生不是不努力,而是教材讲得偏理论,代码示例又不够系统,等反应过来已经到了期中。这篇内容就是给零基础、要补考、要期…

作者头像 李华
网站建设 2026/9/9 13:18:15

科沃斯T90 Pro vs X12 Pro:避障、清洁与基站维护选购指南

扫地机器人这个品类,已经过了“能扫就行”的阶段。现在选机型,本质是在选一套导航算法、清洁执行结构和基站维护成本的组合。这次我们直接聚焦两款热度很高的机型:科沃斯 T90 Pro 和科沃斯 X12 Pro。从型号定位看,前者更接近全能型…

作者头像 李华
网站建设 2026/9/9 13:18:13

TPshop 3.5.0源码部署踩坑与二次开发实战全解析

简介:TPshop 3.5.0是一套面向中小企业的开源电商系统,基于PHP的ThinkPHP框架构建,特别适合有PHP基础的开发者学习架构、做二次开发,或直接用于搭建自主运营的在线商城。整个资源包共含2000个文件,压缩后大小约75.69MB。…

作者头像 李华
网站建设 2026/9/9 13:18:10

Java集合框架核心解析:数据结构、选型策略与实战避坑指南

day10 集合框架 前两天还在折腾流程控制和面向对象,到了第十天,终于碰上了Java里真正每天都在用的东西——集合框架。很多人学到这儿会觉得“不过就是几个容器,能放东西就行”,但真到了写代码和面试的时候才发现,Array…

作者头像 李华