Union
union
后端可以将多个远程存储组合在一起,形成一个统一的视图。
在使用 rclone config
进行初始设置时,你需要以空格分隔的列表形式指定上游远程存储。上游远程存储可以是本地路径,也可以是其他远程存储。
可以在远程存储名称末尾添加 :ro
、:nc
和 :writeback
属性,将远程存储标记为只读、禁止创建或写回,例如 remote:directory/subdirectory:ro
或 remote: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:dir1
、remote2:dir2
和 remote3:dir3
顶级目录
rclone lsd remote:
列出 remote1:dir1
、remote2:dir2
和 remote3: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
开头的策略(epff、eplfs、eplus、epmfs、eprand)都是 路径保留
策略。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
- 类型:字符串
- 是否必需:否
元数据
底层远程存储支持的任何元数据都会被读取和写入。
有关更多信息,请参阅 元数据 文档。