@react-hookz/web 存储解决方案完全指南:LocalStorage、SessionStorage 与 Cookie 管理
如何用 rclone union 后端把多个网盘合并成一个统一视图并选择写入策略?
当你同时持有几个网盘(或本地目录),希望用一个 remote 名称就能列出、读取和写入这些远端的内容时,rclone 的 union 后端(v1.44 引入)可以把多个上游远端合并成一个统一视图。完成本任务后,你可以:用一条 rclone lsd remote: 命令列出所有上游的顶层目录,用一条 rclone copy 命令把新文件写入指定的上游,并且通过 action_policy、create_policy、search_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:desktop与rclone 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 策略会在目标上游中按需创建路径。
可选策略及文档中的描述如下:
| 策略 | 描述 |
|---|---|
| all | search 与 action 同类别等同 epall;create 类别作用于所有上游 |
| epall | search:按配置顺序取相对路径存在的第一项;action:作用于所有找到的;create:作用于相对路径存在的所有上游 |
| epff | 按上游响应时间,取相对路径存在的第一项 |
| eplfs | 在相对路径存在的上游中选剩余空间最少者 |
| eplus | 在相对路径存在的上游中已用空间最少者 |
| eplno | 在相对路径存在的上游中对象数量最少者 |
| epmfs | 在相对路径存在的上游中剩余空间最多者(create_policy 默认值) |
| eprand | 调用 epall 后随机返回一个上游 |
| ff | search/action 同 epff;create 取按响应时间先返回的上游(search_policy 默认值) |
| lfs / lus / lno / mfs | 分别按"剩余空间最少 / 已用空间最少 / 对象数最少 / 剩余空间最多"选择上游 |
| newest | 选 mtime 最大的文件或目录 |
| rand | 调用 all 后随机返回一个上游 |
配置项、环境变量和默认值(来自 union 文档的标准选项):
| 配置项 | 环境变量 | 默认值 |
|---|---|---|
upstreams | RCLONE_UNION_UPSTREAMS | 必填 |
action_policy | RCLONE_UNION_ACTION_POLICY | epall |
create_policy | RCLONE_UNION_CREATE_POLICY | epmfs |
search_policy | RCLONE_UNION_SEARCH_POLICY | ff |
cache_time | RCLONE_UNION_CACHE_TIME | 120(秒,仅在使用 path preserving 策略时有效) |
min_free_space(高级) | RCLONE_UNION_MIN_FREE_SPACE | 1Gi,剩余空间低于该值的远端不参与 lfs/eplfs 策略 |
使用基于配额的策略前先确认上游支持对应字段
lfs、eplfs、mfs、epmfs、lus、eplus、lno、eplno 这些策略依赖配额信息,只在你的上游支持相应字段时才应使用:
| 策略 | 所需字段 |
|---|---|
| lfs、eplfs | Free |
| mfs、epmfs | Free |
| lus、eplus | Used |
| lno、eplno | Objects |
检查方式是对每个上游运行 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)策略的成员。若你的上游属于这类后端,应选择 ff、epall、newest、rand 等不依赖配额的策略。
验证统一视图是否生效
配置完成后,按文档给出的命令逐个验证:
列出 remote1:dir1、remote2:dir2、remote3: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远端,过期清理、控制大小需要你自行处理。
限制与边界
size、about两个操作在 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_* 环境变量。
更多推荐



所有评论(0)