首页
/ rclone B2 后端深度解析:Backblaze B2 的配置、版本管理、SSE-C 加密与 backend 命令实战

rclone B2 后端深度解析:Backblaze B2 的配置、版本管理、SSE-C 加密与 backend 命令实战

2026-09-06 12:09:37作者:廉彬冶Miranda

本文以 rclone 官方 B2 后端文档为核心,系统讲解 rclone 对接 Backblaze B2 的完整实践:交互式配置流程、Application Key 鉴权(含 401 陷阱)、--b2-versions / --b2-version-at 版本管理、SSE-C 客户侧加密、分块上传与 SHA1 校验机制,以及 rclone backend lifecycle / cleanup / cleanup-hidden 三个后端专属命令的用法。同时结合仓库内 backend/b2/b2.gobackend/b2/upload.go 的源码,说明各配置项背后的实际实现,读完后你可以独立完成 B2 远程端的创建、同步、版本回看与生命周期治理,并理解每个参数在 API 调用层的作用。

路径约定

B2 是 Backblaze 的云端对象存储系统。rclone 中 B2 远程端的路径规范为 remote:bucketlsd 命令可直接用 remote: 列出所有桶),也可以带子目录,例如 remote:bucket/path/to/dir

从源码结构看,B2 属于典型的 BucketBased 后端:backend/b2/b2.goNewFs 通过 f.features 声明了 BucketBased: true, BucketBasedRootOK: true,路径解析则委托给公共库 lib/bucketbucket.Split,把根路径拆成 bucketdirectory 两部分(setRoot 函数)。这也意味着 B2 的根(remote:)本身是合法的,可以直接列出全部桶。

配置流程

运行 rclone config 进入交互式配置向导:

rclone config

向导会引导你完成创建。鉴权需要二选一:Account ID(短十六进制串)+ Master Application Key(长十六进制串),或者直接使用 Application Key(官方推荐方式,详见下文)。

No remotes found, make a new one?
n) New remote
q) Quit config
n/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
[snip]
XX / Backblaze B2
   \ "b2"
[snip]
Storage> b2
Account ID or Application Key ID
account> 123456789abc
Application Key
key> 0123456789abcdef0123456789abcdef0123456789
Endpoint for the service - leave blank normally.
endpoint>
Remote config
Configuration complete.
Options:
- type: b2
- account: 123456789abc
- key: 0123456789abcdef0123456789abcdef0123456789
- endpoint:
Keep this "remote" remote?
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

该远程端名为 remote,创建后即可这样使用——查看所有桶、创建桶、列出桶内容、把本地目录同步到远程桶(删除桶内多余文件):

rclone lsd remote:
rclone mkdir remote:bucket
rclone ls remote:bucket
rclone sync --interactive /home/local/directory remote:bucket

Application Key

B2 支持针对不同桶访问权限的多种 Application Key。rclone 需要 1.43 或更高版本 才能配合这类受限 Key 使用。

按照 Backblaze 文档创建一个具有所需权限的 Application Key 后,把 applicationKeyId 填进 rclone 的 account 项,把 Application Key 本身填进 key 项。注意:account 必须填 applicationKeyId 而不是主 Account ID,用主 Account ID 搭配 Application Key 时 B2 会返回 401 错误。

这一点在源码中有直接印证:backend/b2/b2.goauthorizeAccount 用 Basic Auth(UserName: account, Password: key)调用 /b2api/v4/b2_authorize_account 换取 API URL 与令牌;随后 NewFs 会检查返回的 Allowed.Buckets 白名单——若 Key 被限制在特定桶上,而当前远程端指向的桶不在其中,就会直接报错 you must use bucket(s) ... with this application key(见 NewFs 中 610–633 行附近的校验逻辑)。另外 401 会被 shouldRetry 识别为"令牌过期"信号,触发重新授权后自动重试。

基础能力:fast-list 与修改时间

--fast-list

B2 后端支持 --fast-list:用更少的 API 事务换取更多内存占用(一次性递归拉取整棵目录树)。对应实现即 backend/b2/b2.go 中的 ListR——它以 recurse=true 调用内部 list,不再逐目录分页。参见 rclone fast-list 说明

修改时间

修改时间作为对象元数据存储,键为 X-Bz-Info-src_last_modified_millis,值是自 1970-01-01 起的毫秒数(Backblaze 标准写法)。其他工具也能用这个字段读取修改时间。

修改时间完整参与同步判断。注意:更新某个对象的修改时间会创建该对象的一个新版本(B2 不支持原地改元数据)。

源码佐证:

  • 常量 timeKey = "src_last_modified_millis" 与上传头 timeHeader = "X-Bz-Info-src_last_modified_millis" 定义在 backend/b2/b2.go
  • 上传时由 timeString(modTime) 把毫秒时间戳写进请求头(Update 函数);
  • SetModTime 的实现是"把对象拷贝到自身并替换 Info 元数据"(info.Info[timeKey] = timeString(modTime) 后调用 f.copy),这正是"改时间会新增一个版本"的来源;
  • 解析侧 parseTimeStringHelper 按十进制毫秒字符串还原为 UTC 时间。

文件名限制字符

默认限制字符集 之外,B2 额外替换反斜杠:

字符 替换为
\ 0x5C (全角反斜杠)

无效 UTF-8 字节同样会被替换,因为它们无法出现在 JSON 字符串中。

注意:2020 年 5 月起 Backblaze 已允许文件名包含 \,但 rclone 保持了原有编码不变,以免已有同步任务因编码差异而重新传输全部文件。如果你希望 rclone 不再替换 \,请在配置中修改 --b2-encoding,从编码字符串里去掉 BackSlash

源码中默认编码声明为 encoder.Display | encoder.EncodeBackSlash | encoder.EncodeInvalidUtf8backend/b2/b2.go),生成的文档默认值为 Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot,两者一致。

SHA1 校验和

上传与下载都会校验文件 SHA1,并参与同步比对(Hashes() 返回 hash.Set(hash.SHA1))。

  • 大于 --b2-upload-cutoff 的大文件按块上传时,SHA1 会按 Backblaze 建议以元数据 X-Bz-Info-large_file_sha1 形式存储在对象上;
  • 大文件要带 SHA1,源端必须支持 SHA1。本地磁盘支持,因此本地磁盘的大文件传输天然带 SHA1;
  • 不支持 SHA1 的源(尤其是 crypt)上传的大文件将没有 SHA1 校验和,未来可能修复(上游 issue #1767);
  • 小于 --b2-upload-cutoff 的文件无论源端是否支持,总是有 SHA1。

源码印证:

  • 单文件上传路径(Update)中,若源端没有现成 SHA1,rclone 会用 hashAppendingReader(定义在 backend/b2/upload.go)在数据流末尾追加十六进制 SHA1 摘要,并把请求头 X-Bz-Content-Sha1 设为 hex_digits_at_end,这正是 B2 API 约定的"摘要在末尾"模式;
  • 分块上传路径(newLargeUpload)中,只有当 !opt.DisableCheckSum || doCopy 且源端能给出 SHA1 时,才写入 request.Info[sha1Key](即 X-Bz-Info-large_file_sha1)——--b2-disable-checksum 选项正是从这里生效;
  • 下载侧,openFile.Closeio.TeeReader 边读边累积 SHA1,读完整个文件后同时比对长度与 SHA1,不一致则报 corrupted on transfer

传输调优:并发与内存

Backblaze 建议并行执行大量传输以获得最大速度。作者在配备 SSD 的笔记本上测试,最优设置约为 --transfers 32(更高数值可能略有提升,视硬件、文件大小与负载意愿而定);默认的 --transfers 4 对 B2 明显偏低。

注意:上传大于 200 MiB 的大文件默认使用 96 MiB 的 RAM 缓冲,任意时刻最多 --transfers 个这样的缓冲在用,这就构成了内存占用的上限。

这些数字都能在源码常量中找到:

minChunkSize        = 5 * fs.Mebi
defaultChunkSize    = 96 * fs.Mebi
defaultUploadCutoff = 200 * fs.Mebi
largeFileCopyCutoff = 4 * fs.Gibi // 5E9 is the max

(见 backend/b2/b2.go

另外从源码结构看,B2 后端还有两个值得了解的传输细节:

  • 上传 URL 缓存getUploadURL / returnUploadURL 维护按 bucketID 索引的 UploadURL 队列,用完后归还复用,减少 b2_get_upload_url 调用次数;
  • 限流重试:内置 pacer(最小退避 10 ms、最大 5 min、指数衰减),对 429/503 会读取 Retry-After 响应头决定重试间隔,401 则自动重新授权后再试。

版本(Versions)管理

B2 默认保留文件的历史版本:rclone 上传新内容会生成新版本;删除文件时旧版本被"隐藏"(hidden)而非物理移除,仍然可用。

每个桶是否保留旧版本,可以通过 B2 控制台的生命周期设置调整,也可以在创建桶时用 --b2-lifecycle 参数指定,或在建桶后用 rclone backend lifecycle 命令设置。

以下是版本管理的完整操作面:

  • 硬删除--b2-hard-delete 让删除操作永久移除文件,而不是隐藏;
  • 查看旧版本--b2-versions 让列表显示历史版本,并可用 delete 删除其中任意版本;
  • 时间旅行视图--b2-version-at 显示桶在某个时间点的快照——其后删除的文件会显示,其后创建的文件会被隐藏;
  • 清理旧版本rclone cleanup remote:bucket 删除所有旧版本(保留当前版本),也可以带路径只清理子树,如 rclone cleanup remote:bucket/path/to/stuff。注意 cleanup 会顺带删除超过一天的未完成的分块上传;若要精确控制过期时间,可运行 rclone backend cleanup b2:bucket -o max-age=1h,只删除一小时前的未完成大文件上传,保留旧版本;
  • 只删旧版本rclone backend cleanup-hidden remote:bucket 删除所有旧(隐藏)版本,保留当前文件与未完成上传,同样支持带路径;
  • purge 与 delete 的区别purge 桶时当前版本与旧版本一起删除,再删除桶本身;而 delete 只是把当前版本变成隐藏的旧版本。

一个完整的会话示例——列出版本、取回旧版本、清理旧版本:

$ rclone -q ls b2:cleanup-test
        9 one.txt

$ rclone -q --b2-versions ls b2:cleanup-test
        9 one.txt
        8 one-v2016-07-04-141032-000.txt
       16 one-v2016-07-04-141003-000.txt
       15 one-v2016-07-02-155621-000.txt

取回一个旧版本:

$ rclone -q --b2-versions copy b2:cleanup-test/one-v2016-07-04-141003-000.txt /tmp

$ ls -l /tmp/one-v2016-07-04-141003-000.txt
-rw-rw-r-- 1 ncw ncw 16 Jul  2 17:46 /tmp/one-v2016-07-04-141003-000.txt

清理所有旧版本并确认:

$ rclone -q cleanup b2:cleanup-test

$ rclone -q ls b2:cleanup-test
        9 one.txt

$ rclone -q --b2-versions ls b2:cleanup-test
        9 one.txt

版本命名的注意事项

使用 --b2-versions 时,rclone 依赖文件名来区分对象是"版本"还是普通文件:版本名是在文件名与扩展名之间插入时间戳生成的,例如:

        9 file.txt
        8 file-v2023-07-17-161032-000.txt
       16 file-v2023-06-15-141003-000.txt

如果桶里恰好存在与版本命名规则相同的真实文件,--b2-versions 的行为可能不可预测。

--b2-versions 模式详解

--b2-versions 打开后,rclone 会显示并操作历史版本。未开启时:

$ rclone -q ls b2:cleanup-test
        9 one.txt

开启后:

$ rclone -q --b2-versions ls b2:cleanup-test
        9 one.txt
        8 one-v2016-07-04-141032-000.txt
       16 one-v2016-07-04-141003-000.txt
       15 one-v2016-07-02-155621-000.txt

当前版本不变,旧版本可见。版本后缀是对象上传到服务器的 UTC 时间(精确到毫秒)。使用 --b2-versions 时禁止一切文件写操作,既不能上传也不能删除(普通写),但删除版本是允许的——源码中 Update / OpenChunkWriter 会返回 errNotWithVersionscan't modify files in --b2-versions mode),而 Object.Remove 在 versions 模式下走 deleteByID 删除具体版本。

从源码看,版本列表来自 B2 的 /b2_list_file_versions API:backend/b2/b2.golist 函数在 hidden || f.opt.VersionAt.IsSet() 时切换该端点;itemToDirEntryobject.UploadTimestamp.AddVersion(remote) 为同名旧对象生成带时间戳的展示名(同一名称的最新版保留原名,其余追加 -vYYYY-MM-DD-HHMMSS-SSS),并跳过 Action == "hide" 的隐藏标记对象。常量 maxVersions = 100 限制了 versions 模式下单名最多搜索的版本数;--b2-version-at 则过滤掉 UploadTimestamp 晚于指定时间的版本,并对同名对象只保留该时刻最新的一份。

数据用量(API 请求计数)

了解不同场景下向 B2 发送了多少请求很有用,因为 B2 按 API 调用计费:

所有 copy 类命令至少发送以下 4 个请求:

/b2api/v4/b2_authorize_account
/b2api/v1/b2_create_bucket
/b2api/v1/b2_list_buckets
/b2api/v1/b2_list_file_names

b2_list_file_names 每 1000 个文件发送一次,返回文件的校验和与修改时间。自 1.33 起,B2 配合 Crypt 使用时存在导致额外请求的已知问题(issue #818)。若本次 copy 无需上传任何文件,则不再发送更多请求。

单文件上传(无需分块)每文件 2 个请求:

/b2api/v1/b2_get_upload_url
/b2api/v1/b2_upload_file/

需要分块的大文件上传:2 个控制请求(开始/结束)外加每块 2 个请求:

/b2api/v1/b2_start_large_file
/b2api/v1/b2_get_upload_part_url
/b2api/v1/b2_upload_part/
/b2api/v1/b2_finish_large_file

这些路径与源码中的 rest.Opts{Path: ...} 调用一一对应(authorizeAccountmakeBucketlistBucketsToFnlistgetUploadURLUpdatebackend/b2/upload.go 中的 newLargeUpload / getUploadURL / WriteChunk / Close)。

rclone link 与私有桶分享

rclone 支持为私有 B2 桶生成文件分享链接。针对单个文件:

./rclone link B2:bucket/path/to/file.txt
https://f002.backblazeb2.com/file/bucket/path/to/file.txt?Authorization=xxxxxxxx

对目录执行则得到目录级链接:

./rclone link B2:bucket/path
https://f002.backblazeb2.com/file/bucket/path?Authorization=xxxxxxxx

授权令牌(URL 中 ?Authorization= 之后的部分)可用于该目录下任意文件路径,例如:

https://f002.backblazeb2.com/file/bucket/path/to/file1?Authorization=xxxxxxxx
https://f002.backblazeb2.com/file/bucket/path/file2?Authorization=xxxxxxxx
https://f002.backblazeb2.com/file/bucket/path/folder/file3?Authorization=xxxxxxxx

源码中的 PublicLink / getDownloadAuthorizationbackend/b2/b2.go)给出了两个实用约束:

  • 生成分享链接要求当前 Key 具备 shareFiles 权限(hasPermission("shareFiles")),否则会报 sharing a file link requires the shareFiles permission——用受限 Application Key 时要确认勾选了该能力;
  • 令牌有效期由 --b2-download-auth-duration 控制,范围 1 秒到一周(604800 秒),默认一周;桶类型为 allPrivatesnapshot 时才会在链接后附加 ?Authorization=,公有桶则直接返回裸链接。

标准选项

以下是 b2(Backblaze B2)特有的标准选项。

--b2-account

Account ID 或 Application Key ID。

属性:

  • Config: account
  • Env Var: RCLONE_B2_ACCOUNT
  • Type: string
  • Required: true

--b2-key

Application Key。

属性:

  • Config: key
  • Env Var: RCLONE_B2_KEY
  • Type: string
  • Required: true

--b2-hard-delete

远程删除时永久删除文件,否则为隐藏(保留版本)。

属性:

  • Config: hard_delete
  • Env Var: RCLONE_B2_HARD_DELETE
  • Type: bool
  • Default: false

源码中该选项直接决定 Object.RemovedeleteByID/b2_delete_file_version,永久删除指定版本)还是 hide/b2_hide_file,生成隐藏版本)。

高级选项

以下是 b2 的高级选项。

--b2-endpoint

服务 Endpoint,通常留空。

属性:

  • Config: endpoint
  • Env Var: RCLONE_B2_ENDPOINT
  • Type: string
  • Required: false

留空时源码使用默认值 https://api.backblazeb2.combackend/b2/b2.godefaultEndpoint)。

--b2-test-mode

调试用 X-Bz-Test-Mode 请求头标志字符串。

仅用于调试。设置为以下字符串之一会让 b2 返回特定错误:

  • "fail_some_uploads"
  • "expire_some_account_authorization_tokens"
  • "force_cap_exceeded"

这些值会写入 "X-Bz-Test-Mode" 请求头(Backblaze 集成清单文档中有所记载)。

属性:

  • Config: test_mode
  • Env Var: RCLONE_B2_TEST_MODE
  • Type: string
  • Required: false

--b2-versions

在目录列表中纳入旧版本。

注意:启用后不允许任何文件写操作,不能上传或删除文件。

属性:

  • Config: versions
  • Env Var: RCLONE_B2_VERSIONS
  • Type: bool
  • Default: false

--b2-version-at

按指定时间点显示文件版本。

注意:启用后不允许任何文件写操作,不能上传或删除文件。

属性:

  • Config: version_at
  • Env Var: RCLONE_B2_VERSION_AT
  • Type: Time
  • Default: off

--b2-upload-cutoff

切换到分块上传的阈值。大于此大小的文件按 --b2-chunk-size 分块上传。

该值不应大于 4.657 GiB(== 5 GB)。

属性:

  • Config: upload_cutoff
  • Env Var: RCLONE_B2_UPLOAD_CUTOFF
  • Type: SizeSuffix
  • Default: 200Mi

--b2-copy-cutoff

切换到 multipart 服务端复制的阈值。大于此大小且需要服务端复制的文件,将按此大小分块复制。

最小值为 0,最大值为 4.6 GiB。

属性:

  • Config: copy_cutoff
  • Env Var: RCLONE_B2_COPY_CUTOFF
  • Type: SizeSuffix
  • Default: 4Gi

--b2-chunk-size

上传分块大小。上传大文件时把文件切成该大小。

必须能装入内存。这些分块缓存在内存中,最多可能有 --transfers 个分块同时进行。

最小值为 5,000,000 字节。

属性:

  • Config: chunk_size
  • Env Var: RCLONE_B2_CHUNK_SIZE
  • Type: SizeSuffix
  • Default: 96Mi

--b2-upload-concurrency

multipart 上传的并发度,即同一文件内并行上传的分块数。

注意分块存放在内存中,最多可能有 --transfers * --b2-upload-concurrency 个分块同时驻留内存。

属性:

  • Config: upload_concurrency
  • Env Var: RCLONE_B2_UPLOAD_CONCURRENCY
  • Type: int
  • Default: 4

--b2-disable-checksum

对大于 upload cutoff 的大文件禁用 SHA1 校验和。

通常 rclone 会在上传前计算输入流的 SHA1 并写入对象元数据,这有利于数据完整性检查,但会让大文件的上传启动产生较长延迟。

属性:

  • Config: disable_checksum
  • Env Var: RCLONE_B2_DISABLE_CHECKSUM
  • Type: bool
  • Default: false

--b2-download-url

自定义下载 Endpoint。

通常设置为 Cloudflare CDN URL,因为通过 Cloudflare 网络下载的数据 Backblaze 提供免费出口流量。rclone 处理私有桶的方式是发送 "Authorization" 头;如果自定义 Endpoint 会重写认证请求(例如 Cloudflare Workers),该请求头需要被正确处理。留空则使用 Backblaze 提供的下载 Endpoint。

提供的 URL 应包含协议,且不应以斜杠结尾、也不应包含 /file/bucket 子路径——rclone 会按 {download_url}/file/{bucket_name}/{path} 请求文件。

示例:

https://mysubdomain.mydomain.tld
(结尾不带 "/",不含 "file" 与 "bucket")

属性:

  • Config: download_url
  • Env Var: RCLONE_B2_DOWNLOAD_URL
  • Type: string
  • Required: false

源码中 getOrHead 处理了两种边角情况:Cloudflare 会剥掉 Content-Length 头,此时回退使用列表阶段读到的长度;某些代理返回 S3 风格头而非原生 B2 头(无 file ID),此时回退使用列表阶段得到的对象 ID(见 backend/b2/b2.go 的注释与代码)。

--b2-download-auth-duration

rclone link 生成的公开链接授权令牌的过期时间,单位为秒或带 ms|s|m|h|d 后缀的时长。

最小值 1 秒,最大值一周。

属性:

  • Config: download_auth_duration
  • Env Var: RCLONE_B2_DOWNLOAD_AUTH_DURATION
  • Type: Duration
  • Default: 1w

--b2-lifecycle

创建桶时设置已删除文件的保留天数。

建桶时该参数用于为整个桶创建一条生命周期规则:

  • 为 0(默认)时不创建规则,采用 B2 默认行为——删除与覆盖都会生成版本并无限期保留;
  • 大于 0 时创建单条规则,设定文件被删除或覆盖后多少天被永久删除(即 b2 文档中的 daysFromHidingToDeleting),最小为 1 天。

同时也可以在配置中启用 hard_delete,使删除操作不再产生版本(但覆盖仍会产生版本)。

创建桶之后再修改请使用 rclone backend lifecycle 命令(见下文)。

属性:

  • Config: lifecycle
  • Env Var: RCLONE_B2_LIFECYCLE
  • Type: int
  • Default: 0

源码中 makeBucketf.opt.Lifecycle > 0 时向 /b2_create_bucket 请求附带 LifecycleRulesDaysFromHidingToDeleting 即该值)。

--b2-encoding

后端文件名编码,参见 overview 编码章节

属性:

  • Config: encoding
  • Env Var: RCLONE_B2_ENCODING
  • Type: Encoding
  • Default: Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot

--b2-sse-customer-algorithm

使用 SSE-C 时,存储该对象所用的服务器端加密算法。

属性:

  • Config: sse_customer_algorithm
  • Env Var: RCLONE_B2_SSE_CUSTOMER_ALGORITHM
  • Type: string
  • Required: false
  • 示例:
    • "" — None
    • "AES256" — Advanced Encryption Standard(256 位密钥长度)

--b2-sse-customer-key

使用 SSE-C 时,提供 UTF-8 兼容字符串编码的对称加密密钥用于加解密数据。

也可以改用 --sse-customer-key-base64

属性:

  • Config: sse_customer_key
  • Env Var: RCLONE_B2_SSE_CUSTOMER_KEY
  • Type: string
  • Required: false
  • 示例:"" — None

--b2-sse-customer-key-base64

使用 SSE-C 时,提供 Base64 编码的对称加密密钥用于加解密数据。

也可以改用 --sse-customer-key

属性:

  • Config: sse_customer_key_base64
  • Env Var: RCLONE_B2_SSE_CUSTOMER_KEY_BASE64
  • Type: string
  • Required: false
  • 示例:"" — None

--b2-sse-customer-key-md5

使用 SSE-C 时可选提供密钥的 MD5 校验值。

留空时 rclone 会根据 sse_customer_key 自动计算。

属性:

  • Config: sse_customer_key_md5
  • Env Var: RCLONE_B2_SSE_CUSTOMER_KEY_MD5
  • Type: string
  • Required: false
  • 示例:"" — None

--b2-description

远程端描述。

属性:

  • Config: description
  • Env Var: RCLONE_B2_DESCRIPTION
  • Type: string
  • Required: false

SSE-C 的源码行为

SSE-C(Customer 提供密钥的服务器端加密)在 B2 后端的处理逻辑集中在 NewFsbackend/b2/b2.go):

  • sse_customer_keysse_customer_key_base64 不可同时设置,否则报错 b2: can't use both sse_customer_key and sse_customer_key_base64 at the same time
  • 二者给一个即可:给了 Base64 就解码,给了原文就自动 Base64 编码,统一存为 SSECustomerKeyBase64
  • 未提供 MD5 时自动用 md5.Sum 计算并 Base64 编码;
  • 之后在上传、下载(getOrHead 附加 X-Bz-Server-Side-Encryption-Customer-* 三个头)以及服务端复制(copy 中为源与目标都填入 ServerSideEncryption 配置)时都会带上这套头。

后端命令(backend commands)

B2 后端提供以下专属命令,统一通过

rclone backend COMMAND remote:

方式执行,帮助信息见 rclone backend 命令。这些命令也可以通过 rc 的 backend/command 在运行中的后端上执行。

lifecycle

读取或设置桶的生命周期规则。

rclone backend lifecycle remote: [options] [<arguments>+]

显示当前生命周期规则:

rclone backend lifecycle b2:bucket

输出类似如下(展示生命周期规则):

[
    {
        "daysFromHidingToDeleting": 1,
        "daysFromUploadingToHiding": null,
        "daysFromStartingToCancelingUnfinishedLargeFiles": null,
        "fileNamePrefix": ""
    }
]

若无规则(默认),返回 []

重置当前生命周期规则:

rclone backend lifecycle b2:bucket -o daysFromHidingToDeleting=30
rclone backend lifecycle b2:bucket -o daysFromUploadingToHiding=5 -o daysFromHidingToDeleting=1

执行后会打印新的生命周期规则(格式同上)。rclone 只允许为整个桶(fileNamePrefix = "")设置生命周期。

B2 无法彻底关闭版本管理,最接近的做法是把 daysFromHidingToDeleting 设为 1 天;同时在配置中启用 hard_delete 可让删除不再产生版本(覆盖仍会产生版本)。

rclone backend lifecycle b2:bucket -o daysFromHidingToDeleting=1

选项说明:

  • daysFromHidingToDeleting:文件隐藏多少天后删除。0 表示关闭。
  • daysFromStartingToCancelingUnfinishedLargeFiles:多少天后取消未完成的分块上传。
  • daysFromUploadingToHiding:文件上传后多少天被隐藏。

从源码结构看,lifecycleCommandbackend/b2/b2.go)在传了任意 -o 参数时调用 /b2_update_bucket 写回整条规则,然后统一返回 bucket.LifecycleRules——所以无论读写,命令输出都是该桶当前的规则数组。

cleanup

移除未完成的分块上传。

rclone backend cleanup remote: [options] [<arguments>+]

该命令删除 age 超过 max-age(默认 24 小时)的未完成大文件上传。

配合 --interactive/-i--dry-run 可以预演它将要做什么。

rclone backend cleanup b2:bucket/path/to/object
rclone backend cleanup -o max-age=7w b2:bucket/path/to/object

时长解析与 rclone 其余部分一致:2h、7d、7w 等。

选项:

  • max-age:要删除的上传的最大年龄。

cleanup-hidden

移除文件的旧版本。

rclone backend cleanup-hidden remote: [options] [<arguments>+]

该命令移除所有旧的隐藏版本。

同样支持 --interactive/-i--dry-run 预演。

rclone backend cleanup-hidden b2:bucket/path/to/dir

三个命令与源码函数的对应关系很直接(backend/b2/b2.goCommand 分发器):

命令 实现 行为
lifecycle lifecycleCommand 读/写桶生命周期规则
cleanup cleanupCommandcleanUp(false, true, maxAge) 只删"start"标记的未完成上传且超过 max-age 的条目
cleanup-hidden cleanupHiddenCommandcleanUp(true, false, 0) 只删隐藏(旧)版本,当前版本保留

底层的 purge(dir, oldOnly, deleteHidden, deleteUnfinished, maxAge) 是统一入口:rclone cleanup(即 Fs.CleanUp)等价于 oldOnly=true 且同时开启删隐藏与删未完成上传(默认 24 小时);rclone purge 则是 oldOnly=false,当前版本、旧版本一并删除后把桶删掉。删除操作按 --transfers 的并发度从 toBeDeleted 通道并行消费,并受 --interactive / --dry-run 保护(operations.SkipDestructive)。

限制(Limitations)

rclone about 不被 B2 后端支持——源码中 Fs 并未实现 About 接口。缺少该能力的后端无法为 rclone mount 计算剩余空间,也不能作为 rclone union 远程成员使用 mfs(most free space)策略。参见 不支持 rclone about 的后端列表rclone about 命令

小结

B2 后端把 Backblaze 的原生 REST API 完整映射到了 rclone 的文件系统抽象上:Basic Auth 换令牌的 authorize_account 流程、按 bucketID 索引的上传 URL 缓存、b2_list_file_names / b2_list_file_versions 双端点列表、hex_digits_at_end 风格的 SHA1 校验,以及隐藏版本与生命周期规则体系。日常使用记住三件事即可:

  1. 鉴权account 填主 Account ID 或 applicationKeyId,Application Key 必须与 applicationKeyId 配套,版本要求 ≥ 1.43;
  2. 吞吐--transfers 32 起步,注意 --transfers × --b2-chunk-size 的内存上限;
  3. 版本治理:用 --b2-versions / --b2-version-at 查看历史,用 rclone backend lifecycle 控制保留天数,用 cleanup / cleanup-hidden 精确清理旧版本与残留分块。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.16 K
2.78 K
kernelkernel
deepin linux kernel
C
34
18
docsdocs
暂无描述
Markdown
904
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
932
1.86 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
862
1.36 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.95 K
1.03 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.38 K
1.47 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
535
606
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
549
398
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Markdown
77
23