B2

B2 是 Backblaze 的云存储系统

路径指定为 remote:bucket(对于 lsd 命令,可使用 remote:)。你也可以指定子目录,例如 remote:bucket/path/to/dir

配置

以下是一个配置 B2 的示例。首先运行:

rclone config

这将引导你完成一个交互式设置过程。进行身份验证时,你需要提供账户 ID(一个短的十六进制数字)和主应用密钥(一个长的十六进制数字),或者使用应用密钥,这是推荐的方法。有关生成和使用应用密钥的更多详细信息,请参阅下文。

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

/home/local/directory 同步到远程存储桶,并删除存储桶中多余的文件。

rclone sync --interactive /home/local/directory remote:bucket

应用密钥

B2 支持多个针对 B2 存储桶不同访问权限的应用密钥

你也可以在 rclone 中使用这些密钥;你需要使用 rclone 1.43 或更高版本。

按照 Backblaze 的文档创建具有所需权限的应用密钥,并将 applicationKeyId 作为 account,将 Application Key 本身作为 key

请注意,你必须将 applicationKeyId 作为 account,不能使用主账户 ID。如果你尝试使用主账户 ID,B2 将返回 401 错误。

–fast-list

此远程存储支持 --fast-list,它允许你以使用更多内存为代价来减少事务次数。有关更多详细信息,请参阅 rclone 文档

修改时间

修改时间作为元数据存储在对象上,键为 X-Bz-Info-src_last_modified_millis,以 Backblaze 标准自 1970 年 1 月 1 日起的毫秒数表示。其他工具应该能够将其用作修改时间。

修改时间在同步过程中会被使用,并且完全受支持。请注意,如果需要更新对象的修改时间,将会创建该对象的一个新版本。

受限文件名字符

除了默认受限字符集之外,以下字符也会被替换:

字符 替换字符
\ 0x5C

无效的 UTF-8 字节也会被替换,因为它们不能用于 JSON 字符串。

请注意,在 2020 年 5 月,Backblaze 开始允许文件名中使用反斜杠字符。rclone 没有更改其编码方式,因为这可能会导致同步时重新传输文件。如果你希望 rclone 不替换反斜杠,请参阅下面的 --b2-encoding 标志,并从字符串中移除 BackSlash。这可以在配置中设置。

SHA1 校验和

文件的 SHA1 校验和会在上传和下载时进行检查,并将在同步过程中使用。

大文件(大于 --b2-upload-cutoff 限制)以分块方式上传时,会按照 Backblaze 的建议,将其 SHA1 存储在对象上,键为 X-Bz-Info-large_file_sha1

要使大文件以带有 SHA1 校验和的方式上传,源端需要支持 SHA1 校验和。本地磁盘支持 SHA1 校验和,因此从本地磁盘传输的大文件将带有 SHA1 校验和。有关哪些远程存储支持 SHA1 校验和的详细信息,请参阅概述

不支持 SHA1 校验和的源端,特别是 crypt,将在上传大文件时不使用 SHA1 校验和。这个问题可能会在未来得到修复(请参阅 #1767)。

小于 --b2-upload-cutoff 的文件无论源端如何,始终会有 SHA1 校验和。

传输

Backblaze 建议同时进行大量传输以获得最大速度。在我配备 SSD 的笔记本电脑上进行的测试中,最佳设置约为 --transfers 32,不过可以使用更高的数值来获得轻微的速度提升。适合你的最佳数值可能会因你的硬件、文件大小、你希望给计算机施加的负载因素而有所不同。不过,默认的 --transfers 4 对于 Backblaze B2 来说肯定太低了。

请注意,上传大文件(默认大于 200 MiB)时,默认会使用 96 MiB 的 RAM 缓冲区。任何时候最多可以同时使用 --transfers 个这样的缓冲区,因此这设定了所使用内存的上限。

版本

B2 的默认设置是保留文件的旧版本。这意味着当 rclone 上传文件的新版本时,会创建该文件的一个新版本。同样,当你删除文件时,旧版本会被标记为隐藏,但仍然可用。

B2 是否保留文件的旧版本可以在每个存储桶的基础上进行调整,你可以使用 B2 控制面板中的“生命周期设置”,或者在创建存储桶时使用 –b2-lifecycle 标志,或者在创建后使用 rclone backend lifecycle 命令。

你可以使用 --b2-hard-delete 标志选择对文件进行“硬删除”,这将在删除文件时永久移除文件,而不是将其隐藏。

如果文件存在旧版本,可以使用 --b2-versions 标志查看。

也可以使用 --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 命令。你也可以提供一个路径,这样只会删除该路径下的旧版本,例如 rclone backend cleanup-hidden remote:bucket/path/to/stuff

当你使用 purge 命令删除存储桶时,当前版本和旧版本都会被删除,然后存储桶也会被删除。

然而,使用 delete 命令会使文件的当前版本变为隐藏的旧版本。

以下是一个会话示例,展示了如何列出和检索旧版本,然后进行旧版本的清理。

使用 --b2-versions 标志显示当前版本和所有版本。

$ 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 标记的行为可能不可预测。

数据使用情况

了解在不同场景下向服务器发送了多少请求是很有用的。

所有复制命令都会发送以下 4 个请求:

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

对于远程路径中的每 1000 个文件,b2_list_file_names 请求将发送一次,该请求会提供所列出文件的校验和和修改时间。从 1.33 版本开始,问题 #818 会导致在将 B2 与 Crypt 一起使用时发送额外的请求。当复制操作不需要上传任何文件时,将不再发送更多请求。

上传无需分块的文件时,每次文件上传将发送 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

版本

可以使用 --b2-versions 标志查看文件版本。当设置该标志后,rclone 将显示并处理文件的旧版本。例如:

不使用 --b2-versions 进行列表查看

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

And with

$ 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 时,不允许进行文件写入操作,因此你不能上传或删除文件。

B2 与 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

you can then use the authorization token (the part of the url from the ?Authorization= on) on any file path under that directory. For example:

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

标准选项

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

–b2-account

账户 ID 或应用密钥 ID。

属性:

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

–b2-key

应用密钥。

属性:

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

–b2-hard-delete

删除远程文件时永久删除,否则隐藏文件。

属性:

  • 配置项:hard_delete
  • 环境变量:RCLONE_B2_HARD_DELETE
  • 类型:布尔值
  • 默认值:false

高级选项

以下是 Backblaze B2 特有的高级选项。

–b2-endpoint

服务的端点。

通常留空。

属性:

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

–b2-test-mode

用于调试的 X-Bz-Test-Mode 头的标志字符串。

这仅用于调试目的。将其设置为以下字符串之一会使 B2 返回特定错误:

  • “fail_some_uploads”
  • “expire_some_account_authorization_tokens”
  • “force_cap_exceeded”

这些将设置在 “X-Bz-Test-Mode” 头中,该头在 B2 集成清单 中有文档说明。

属性:

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

–b2-versions

在目录列表中包含旧版本。

请注意,使用此选项时不允许进行文件写入操作,因此您不能上传或删除文件。

属性:

  • 配置项:versions
  • 环境变量:RCLONE_B2_VERSIONS
  • 类型:布尔值
  • 默认值:false

–b2-version-at

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

请注意,使用此选项时不允许进行文件写入操作,因此您不能上传或删除文件。

属性:

  • 配置项:version_at
  • 环境变量:RCLONE_B2_VERSION_AT
  • 类型:时间
  • 默认值:关闭

–b2-upload-cutoff

切换到分块上传的阈值。

大于此大小的文件将以 “–b2-chunk-size” 为块进行上传。

此值不应设置得大于 4.657 GiB(即 5 GB)。

属性:

  • 配置项:upload_cutoff
  • 环境变量:RCLONE_B2_UPLOAD_CUTOFF
  • 类型:大小后缀
  • 默认值:200Mi

–b2-copy-cutoff

切换到多部分复制的阈值。

任何需要进行服务器端复制且大于此大小的文件将以该大小为块进行复制。

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

属性:

  • 配置项:copy_cutoff
  • 环境变量:RCLONE_B2_COPY_CUTOFF
  • 类型:大小后缀
  • 默认值:4Gi

–b2-chunk-size

上传块大小。

上传大文件时,将文件分块为此大小。

块必须能存入内存。这些块会在内存中缓冲,并且一次最多可能有 “–transfers” 个块在处理中。

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

属性:

  • 配置项:chunk_size
  • 环境变量:RCLONE_B2_CHUNK_SIZE
  • 类型:大小后缀
  • 默认值:96Mi

–b2-upload-concurrency

多部分上传的并发数。

这是同一文件同时上传的块数。

请注意,块会存储在内存中,并且内存中一次最多可能存储 “–transfers” * “–b2-upload-concurrency” 个块。

属性:

  • 配置项:upload_concurrency
  • 环境变量:RCLONE_B2_UPLOAD_CONCURRENCY
  • 类型:整数
  • 默认值:4

–b2-disable-checksum

禁用大文件(大于上传阈值)的校验和。

通常,rclone 会在上传前计算输入的 SHA1 校验和,以便将其添加到对象的元数据中。这对数据完整性检查很有用,但可能会导致大文件上传开始前出现长时间延迟。

属性:

  • 配置项:disable_checksum
  • 环境变量:RCLONE_B2_DISABLE_CHECKSUM
  • 类型:布尔值
  • 默认值:false

–b2-download-url

自定义下载端点。

通常将其设置为 Cloudflare CDN URL,因为 Backblaze 为通过 Cloudflare 网络下载的数据提供免费出口流量。rclone 通过发送 “Authorization” 头来处理私有存储桶。如果自定义端点重写了用于身份验证的请求,例如在 Cloudflare Workers 中,则需要正确处理此头。

如果您想使用 Backblaze 提供的端点,请留空。

此处提供的 URL 应包含协议,且不应有尾随斜杠或指定 /file/bucket 子路径,因为 rclone 将使用 “{download_url}/file/{bucket_name}/{path}” 请求文件。

示例:

https://mysubdomain.mydomain.tld (无尾随的 “/”、“file” 或 “bucket”)

属性:

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

–b2-download-auth-duration

公共链接授权令牌的过期时间,单位为秒或后缀为 ms|s|m|h|d。

此选项与 “rclone link” 结合使用,用于使文件可被公开访问,并设置下载授权令牌的过期时间。

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

属性:

  • 配置项:download_auth_duration
  • 环境变量:RCLONE_B2_DOWNLOAD_AUTH_DURATION
  • 类型:持续时间
  • 默认值:1w

–b2-memory-pool-flush-time

内部内存缓冲区池刷新的频率。(不再使用)

属性:

  • 配置项:memory_pool_flush_time
  • 环境变量:RCLONE_B2_MEMORY_POOL_FLUSH_TIME
  • 类型:持续时间
  • 默认值:1m0s

–b2-memory-pool-use-mmap

内部内存池是否使用 mmap 缓冲区。(不再使用)

属性:

  • 配置项:memory_pool_use_mmap
  • 环境变量:RCLONE_B2_MEMORY_POOL_USE_MMAP
  • 类型:布尔值
  • 默认值:false

–b2-lifecycle

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

在创建存储桶时,此参数用于为整个存储桶创建生命周期规则。

如果生命周期为 0(默认值),则不会创建生命周期规则,因此将应用 B2 的默认行为。即删除和覆盖文件时创建文件版本,并永久保留这些版本。

如果生命周期大于 0,则会创建一个规则,设置文件在被删除或覆盖后多久会被永久删除。这在 B2 文档中称为 daysFromHidingToDeleting。

此参数的最小值为 1 天。

你也可以在配置中启用 hard_delete,这意味着删除操作不会创建版本,但覆盖操作仍会创建版本。

请参阅:rclone backend lifecycle,了解在创建存储桶后设置生命周期的方法。

属性:

  • 配置项:lifecycle
  • 环境变量:RCLONE_B2_LIFECYCLE
  • 类型:整数
  • 默认值:0

–b2-encoding

后端的编码方式。

有关更多信息,请参阅 概述中的编码部分

属性:

  • 配置项:encoding
  • 环境变量:RCLONE_B2_ENCODING
  • 类型:编码方式
  • 默认值:Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot

–b2-description

远程存储的描述。

属性:

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

后端命令

以下是 B2 后端特有的命令。

使用以下命令运行它们:

rclone backend command remote:

以下帮助信息将解释每个命令需要哪些参数。

有关如何传递选项和参数的更多信息,请参阅 backend 命令。

这些命令可以通过 rc 命令 backend/command 在运行的后端上执行。

lifecycle

读取或设置存储桶的生命周期

rclone backend lifecycle remote: [选项] [<参数>+]

此命令可用于读取或设置存储桶的生命周期。

使用示例:

显示当前的生命周期规则:

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

请参阅:https://www.backblaze.com/docs/cloud-storage-lifecycle-rules

选项:

  • "daysFromHidingToDeleting":文件被隐藏此天数后将被删除。0 表示关闭此功能。
  • "daysFromStartingToCancelingUnfinishedLargeFiles":在此天数后取消任何未完成的大文件版本。
  • "daysFromUploadingToHiding":文件上传此天数后将被隐藏。

清理未完成的大文件上传

rclone backend cleanup remote: [选项] [<参数>+]

此命令将移除超过 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 的其他部分相同,例如 2h7d7w 等。

选项:

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

清理隐藏的旧版本文件

rclone backend cleanup-hidden remote: [选项] [<参数>+]

此命令将移除文件的所有旧隐藏版本。

请注意,你可以使用 --interactive(简写为 -i)或 --dry-run 选项来查看该命令的执行效果。

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

限制

B2 后端不支持 rclone about 命令。不具备此功能的后端无法确定 rclone 挂载的可用空间,也不能在 rclone 联合远程存储中使用 mfs(最大可用空间)策略。

请参阅 不支持 rclone about 的后端列表rclone about