Union

Union

union 后端可以将多个远程存储组合在一起,形成一个统一的视图。

在使用 rclone config 进行初始设置时,你需要以空格分隔的列表形式指定上游远程存储。上游远程存储可以是本地路径,也可以是其他远程存储。

可以在远程存储名称末尾添加 :ro:nc:writeback 属性,将远程存储标记为只读禁止创建写回,例如 remote:directory/subdirectory:roremote:directory/subdirectory:nc

  • :ro 表示只能从该远程存储读取文件,不能写入文件。
  • :nc 表示不会在该远程存储中创建新文件或目录。
  • :writeback 表示在其他远程存储中找到的文件将被写回到这里。有关更多信息,请参阅写回部分

上游远程存储中可以使用子文件夹。假设存在一个名为 backup 的联合远程存储,其关联的远程存储为 mydrive:private/backup。执行 rclone mkdir backup:desktop 与执行 rclone mkdir mydrive:private/backup/desktop 完全相同。

对于包含 .. 片段的路径,不会进行特殊处理。执行 rclone mkdir backup:../desktop 与执行 rclone mkdir mydrive:private/backup/../desktop 完全相同。

配置

以下是一个为本地文件夹创建名为 remote 的联合远程存储的示例。首先运行:

 rclone config

这将引导你完成一个交互式的设置过程:

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> remote
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>
Remote config
Configuration complete.
Options:
- type: union
- upstreams: remote1:dir1 remote2:dir2 remote3:dir3
Keep this "remote" remote?
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
remote               union

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

配置完成后,你可以像这样使用 rclone

列出 remote1:dir1remote2:dir2remote3:dir3 顶级目录

rclone lsd remote:

列出 remote1:dir1remote2:dir2remote3:dir3 中的所有文件

rclone ls remote:

将另一个本地目录复制到名为 source 的联合目录中,该目录将被放置在 remote3:dir3

rclone copy C:\source remote:source

行为 / 策略

联合后端的行为受到 trapexit/mergerfs 的启发。所有功能被分为 3 个类别:操作创建搜索。这些功能和类别可以分配一个策略,该策略决定在执行该行为时选择哪个文件或目录。任何策略都可以分配给一个功能或类别,尽管有些策略在实践中可能不太有用。例如:rand(随机)对于文件创建(创建)可能有用,但如果文件有多个副本,在用于 delete 时可能会导致非常奇怪的行为。

功能 / 类别分类

类别 描述 功能
操作 写入现有文件 move、rmdir、rmdirs、delete、purge 以及 copy、sync(当文件存在时作为目标)
创建 创建不存在的文件 copy、sync(当文件不存在时作为目标)
搜索 读取和列出文件 ls、lsd、lsl、cat、md5sum、sha1sum 以及 copy、sync(作为源)
size、about

路径保留

如下所述,策略有两种基本类型:路径保留非路径保留

所有以 ep 开头的策略(epffeplfseplusepmfseprand)都是 路径保留 策略。ep 代表 现有路径

路径保留策略只会考虑访问的相对路径已经存在的上游。

使用非路径保留策略时,必要时会在目标上游创建路径。

与配额相关的策略

一些策略依赖于配额信息。只有当你的上游支持相应的配额字段时,才应该使用这些策略。

策略 所需字段
lfs, eplfs 可用空间
mfs, epmfs 可用空间
lus, eplus 已使用空间
lno, eplno 对象数量

要检查你的上游是否支持该字段,请运行 rclone about remote: [flags] 并查看所需字段是否存在。

过滤器

策略基本上是搜索上游远程存储,并创建一个供功能操作的文件/路径列表。策略负责过滤和排序。策略类型定义了排序方式,但过滤大多是统一的,如下所述。

  • 所有 搜索 策略都不过滤。
  • 所有 操作 策略都会过滤掉标记为 只读 的远程存储。
  • 所有 创建 策略都会过滤掉标记为 只读禁止创建 的远程存储。

如果所有远程存储都被过滤掉,将返回一个错误。

策略描述

这些策略的定义受到 trapexit/mergerfs 的启发,但并不完全相同。由于远程文件系统的延迟要大得多,一些策略的定义可能会有所不同。

策略 描述
all 搜索类别:与 epall 相同。操作类别:与 epall 相同。创建类别:对所有上游执行操作。
epall(现有路径,全部) 搜索类别:按照配置的顺序,对找到的第一个相对路径存在的上游执行操作。操作类别:应用于所有找到的上游。创建类别:对相对路径存在的所有上游执行操作。
epff(现有路径,首次找到) 在上游回复时,对找到的第一个相对路径存在的上游执行操作。
eplfs(现有路径,可用空间最少) 在相对路径存在的所有上游中,选择可用空间最少的那个。
eplus(现有路径,已使用空间最少) 在相对路径存在的所有上游中,选择已使用空间最少的那个。
eplno(现有路径,对象数量最少) 在相对路径存在的所有上游中,选择对象数量最少的那个。
epmfs(现有路径,可用空间最多) 在相对路径存在的所有上游中,选择可用空间最多的那个。
eprand(现有路径,随机) 调用 epall 然后随机化。只返回一个上游。
ff(首次找到) 搜索类别:与 epff 相同。操作类别:与 epff 相同。创建类别:在上游回复时,对找到的第一个上游执行操作。
lfs(可用空间最少) 搜索类别:与 eplfs 相同。操作类别:与 eplfs 相同。创建类别:选择可用空间最少的上游。
lus(已使用空间最少) 搜索类别:与 eplus 相同。操作类别:与 eplus 相同。创建类别:选择已使用空间最少的上游。
lno(对象数量最少) 搜索类别:与 eplno 相同。操作类别:与 eplno 相同。创建类别:选择对象数量最少的上游。
mfs(可用空间最多) 搜索类别:与 epmfs 相同。操作类别:与 epmfs 相同。创建类别:选择可用空间最多的上游。
newest 选择修改时间最新的文件/目录。
rand(随机) 调用 all 然后随机化。只返回一个上游。

写回

上游远程存储上的 :writeback 标签可用于创建一个简单的缓存系统,如下所示:

[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 远程存储之外,不会对其进行任何管理。 因此,如果你需要过期旧文件或管理存储大小,则必须自己完成这些操作。

标准选项

以下是 union 后端(将多个上游文件系统的内容合并)特定的标准选项。

–union-upstreams

以空格分隔的上游远程存储列表。

可以是 upstreama:test/dir upstreamb:"upstreama:test/space:ro dir" upstreamb: 等形式。

属性:

  • 配置项:upstreams
  • 环境变量:RCLONE_UNION_UPSTREAMS
  • 类型:字符串
  • 是否必需:是

–union-action-policy

在 ACTION 类别中选择上游的策略。

属性:

  • 配置项:action_policy
  • 环境变量:RCLONE_UNION_ACTION_POLICY
  • 类型:字符串
  • 默认值:“epall”

–union-create-policy

在 CREATE 类别中选择上游的策略。

属性:

  • 配置项:create_policy
  • 环境变量:RCLONE_UNION_CREATE_POLICY
  • 类型:字符串
  • 默认值:“epmfs”

–union-search-policy

在 SEARCH 类别中选择上游的策略。

属性:

  • 配置项:search_policy
  • 环境变量:RCLONE_UNION_SEARCH_POLICY
  • 类型:字符串
  • 默认值:“ff”

–union-cache-time

使用情况和可用空间的缓存时间(以秒为单位)。

此选项仅在使用路径保留策略时有用。

属性:

  • 配置项:cache_time
  • 环境变量:RCLONE_UNION_CACHE_TIME
  • 类型:整数
  • 默认值:120

高级选项

以下是 union 后端(将多个上游文件系统的内容合并)特定的高级选项。

–union-min-free-space

lfs/eplfs 策略所需的最小可用空间。

如果某个远程存储的可用空间小于此值,则在 lfs 或 eplfs 策略中不会考虑使用该远程存储。

属性:

  • 配置项:min_free_space
  • 环境变量:RCLONE_UNION_MIN_FREE_SPACE
  • 类型:SizeSuffix
  • 默认值:1Gi

–union-description

远程存储的描述。

属性:

  • 配置项:description
  • 环境变量:RCLONE_UNION_DESCRIPTION
  • 类型:字符串
  • 是否必需:否

元数据

底层远程存储支持的任何元数据都会被读取和写入。

有关更多信息,请参阅 元数据 文档。