☁️ Cloudflare R2 + Rclone 配置与使用指南

📦 什么是 Cloudflare R2

Cloudflare R2 是 Cloudflare 提供的对象存储服务,兼容 S3 API。

核心优势

  • 零出口费用:不收取数据传输费(和 AWS S3 比是巨大优势)
  • 全球分发:依托 Cloudflare 全球网络
  • S3 兼容:可用 S3 客户端工具

🪣 创建 R2 存储桶

  1. 登录 Cloudflare Dashboard
  2. 进入 R2Create Bucket
  3. 设置存储桶名称(如 library
  4. 完成创建

🔑 创建 API Token

在 R2 页面 → Manage R2 API TokensCreate API Token

两种权限对比

权限类型权限范围效果
对象读和写仅限指定存储桶rclone ls r2-library: ❌ 报错 403
对象读和写仅限指定存储桶rclone ls r2-library:library ✅ 正常
管理员读和写全部存储桶rclone ls r2-library: ✅ 正常

关键区别rclone ls r2-library: 需要 ListBuckets 权限(管理员级别),而 rclone ls r2-library:library 只需要该存储桶的对象读写权限。

最佳实践

推荐使用对象读和写 + 限定存储桶名,权限最小化,安全性更好!

# ✅ 正确用法
rclone ls r2-library:library
rclone copy ./file.txt r2-library:library/
rclone sync ./folder r2-library:library/folder

⚙️ Rclone 配置步骤

1. 安装 rclone

# Windows (用 scoop)
scoop install rclone
 
# macOS
brew install rclone
 
# Linux
sudo apt install rclone

2. 配置远程(交互式方法)

在终端中运行:

rclone config

按照以下步骤操作:

1️⃣ 创建新 remote

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n          ← 输入 n 并按回车

2️⃣ 输入名称

Enter name for new remote.
name> r2-library    ← 取个名字,比如 "r2-library"

3️⃣ 选择存储类型

Storage> s3        ← 输入 s3 并按回车(Cloudflare R2 兼容 S3 API)

4️⃣ 选择提供商

provider> Cloudflare    ← 直接输入 Cloudflare
或者从列表中选择对应的数字(可能因版本不同而变化)

5️⃣ 身份认证方式

env_auth> 1        ← 选择 1,在下一步手动输入凭证

6️⃣ 输入 Access Key ID

access_key_id> YOUR_ACCESS_KEY_ID    ← 粘贴你在 Cloudflare 获取的 Access Key ID

7️⃣ 输入 Secret Access Key

secret_access_key> YOUR_SECRET_ACCESS_KEY    ← 粘贴你的 Secret Access Key

8️⃣ 选择区域

region> auto      ← 直接输入 auto,R2 会自动选择最近的数据中心

9️⃣ 输入 Endpoint

endpoint> https://<你的账户ID>.r2.cloudflarestorage.com

⚠️ 重要https://<你的账户ID>.r2.cloudflarestorage.com 需要替换为你在 Cloudflare R2 面板中看到的实际 Endpoint。 例如:https://abc123def456.r2.cloudflarestorage.com

你的 Account ID 在 Cloudflare Dashboard 右下角可找到。

🔟 Bucket 对象锁定配置

Option bucket_object_lock_enabled.
Enable Object Lock when creating new buckets.
Enter a boolean value (true or false). Press Enter for the default (false).
bucket_object_lock_enabled>    ← 直接按回车跳过(默认 false)

1️⃣1️⃣ 高级配置

Edit advanced config?
y) Yes
n) No (default)
y/n> n            ← 直接按回车跳过

1️⃣2️⃣ 确认配置

Configuration complete.
Options:
- type: s3
- provider: Cloudflare
- access_key_id: YOUR_ACCESS_KEY
- secret_access_key: YOUR_SECRET_ACCESS_KEY
- region: auto
- endpoint: https://abc123.r2.cloudflarestorage.com
- acl: private

Keep this "r2-library" remote?
y) Yes this is OK (default)    ← 按回车确认
e) Edit this remote
d) Delete this remote
y/e/d> y

1️⃣3️⃣ 退出配置

Current remotes:

Name                 Type
====                 ====
r2-library           s3

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

3. 测试连接

# 列出指定存储桶内容
rclone ls r2-library:library
 
# 查看树状结构
rclone tree r2-library:library

📋 Rclone 常用命令速查

📁 文件浏览

rclone ls r2-library:library            # 列出文件和目录
rclone lsl r2-library:library           # 列出文件详情(大小、时间)
rclone tree r2-library:library          # 树状结构显示
rclone size r2-library:library          # 查看存储桶大小和文件数
rclone about r2-library:                # 查看磁盘使用情况

⬆️ 上传文件

rclone copy ./photo.jpg r2-library:library/photos/          # 上传单个文件
rclone copy ./本地文件夹 r2-library:library/远程文件夹/      # 上传整个目录
rclone copy -P ./大文件.zip r2-library:library/backup/      # 显示进度

⬇️ 下载文件

rclone copy r2-library:library/photo.jpg ./下载/            # 下载单个文件
rclone copy r2-library:library/photos/ ./本地照片/          # 下载整个目录

🔄 同步

# 本地 → 远程(远程多余文件会删除)
rclone sync ./本地文件夹 r2-library:library/远程文件夹/
 
# 远程 → 本地
rclone sync r2-library:library/远程文件夹/ ./本地文件夹/

🗑️ 删除操作

rclone delete r2-library:library/旧文件.txt      # 删除单个文件
rclone rmdir r2-library:library/空目录/           # 删除空目录
rclone purge r2-library:library/某个目录/         # 删除非空目录(慎用!)

🔍 常用选项

选项作用
-P / --progress显示传输进度
--dry-run安全模式,只看不做
-u / --update只更新新文件或修改过的文件
--exclude "*.tmp"排除某些文件
--transfers 4多文件并行传输数
--checkers 8并行检查文件数

🧪 安全演练

# 先看删什么(不会真的删)
rclone delete --dry-run r2-library:library/垃圾文件.txt
 
# 先看同步什么(不会真的同步)
rclone sync --dry-run ./本地/ r2-library:library/远程/

🚀 日常备份一条龙

rclone sync -P --transfers 4 ./我的项目/ r2-library:library/我的项目-备份/

🆘 更多帮助

rclone help              # 所有命令列表
rclone help copy         # 查看某个命令的详细说明
rclone help flags        # 查看所有可用选项

💡 关键经验总结

  1. Token 权限要匹配命令范围

    • rclone ls r2-library: → 需要管理员权限(ListBuckets)
    • rclone ls r2-library:library → 只需要对象读写权限
  2. 权限最小化原则:尽量用对象读和写+指定存储桶,而非管理员权限

  3. 先 dry-run 再动手:删除/同步前加 --dry-run 确认

  4. Endpoint 不要写错:格式是 https://<AccountID>.r2.cloudflarestorage.com