前言
项目 S3 存储桶要从国内迁移到国外,首次的文件量有点大,用 Rclone 传输下。
方案概述
- 安装 Rclone
- 获取 Cloudflare R2 存储桶的 Access Key 和 Secret Key
- 将本地文件传输至 Cloudflare R2 存储桶
操作步骤
一、安装 Rclone
官方文档:Install
我这里是 Ubuntu 系统,采用官方推荐的下载最新版本可执行文件的方式:
# 下载
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
# 拷贝可执行文件到 /usr/bin 目录并设置权限
sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone
# 安装手册页
sudo mkdir -p /usr/local/share/man/man1
sudo cp rclone.1 /usr/local/share/man/man1/
sudo mandb
然后通过 rclone version 命令查看是否安装成功:
rclone version

二、获取 Cloudflare R2 存储桶的 Access Key 和 Secret Key
我这里就稍作演示,详细可以参照我的另一片文章:二、获取配置信息
我们可以看下 Rclone 需要的配置信息:
[r2demo]
type = s3
provider = Cloudflare
access_key_id = abc123
secret_access_key = xyz456
endpoint = https://<accountid>.r2.cloudflarestorage.com
acl = private
因此我们需要从 Cloudflare R2 控制台获取:
access_key_idsecret_access_keyendpoint
选择 R2 存储桶,然后在右侧选择管理 R2 API 令牌:

创建 API 令牌,然后复制 Access Key 和 Secret Key:


这里权限按需求填写,我拿来举例子因此选了只读权限,后续挂载到本地的话可能需要写入权限。

三、将本地文件传输至 Cloudflare R2 存储桶
官方文档:rclone | Cloudflare R2 docs
详细的 Rclone 配置说明:Cloudflare R2
找到配置文件路径,然后编辑配置文件:
# 找到配置文件路径
rclone config file
# 编辑配置文件
vim /root/.config/rclone/rclone.conf
然后编辑配置文件,添加 Cloudflare R2 的配置信息(这里不需要设置存储桶):
# 这个是配置文件的名称,可以自定义
[r2demo]
type = s3
provider = Cloudflare
# 访问密钥 ID
access_key_id = abc123
# 机密访问密钥
secret_access_key = xyz456
# 管辖权的终结点
endpoint = https://<accountid>.r2.cloudflarestorage.com
acl = private
保存配置文件,然后列出指定存储桶内项目确认下是否配置成功:
rclone tree r2demo:your_bucket_name

注意这里一定要填写你的存储桶名称,不然会出现以下错误:
NOTICE: Failed to tree: operation error S3: ListBuckets, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied
没有问题的话就可以开始传输文件了:
# 将 /root/test 目录下的所有文件传输到 Cloudflare R2 存储桶中
rclone copy /root/test r2demo:your_bucket_name/ -P --s3-no-check-bucket

注意:使用 Rclone 操作 Cloudflare R2 存储桶时,总是会进行一次
CreateBucket操作,如果没有权限会报错:2024/10/20 16:01:54 ERROR : rclone-current-linux-amd64.zip: Failed to copy: failed to prepare upload: operation error S3: CreateBucket, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied 2024/10/20 16:01:54 ERROR : Attempt 1/3 failed with 1 errors and: failed to prepare upload: operation error S3: CreateBucket, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied 2024/10/20 16:01:54 ERROR : rclone-current-linux-amd64.zip: Failed to copy: failed to prepare upload: operation error S3: CreateBucket, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied 2024/10/20 16:01:54 ERROR : Attempt 2/3 failed with 1 errors and: failed to prepare upload: operation error S3: CreateBucket, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied 2024/10/20 16:01:55 ERROR : rclone-current-linux-amd64.zip: Failed to copy: failed to prepare upload: operation error S3: CreateBucket, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied 2024/10/20 16:01:55 ERROR : Attempt 3/3 failed with 1 errors and: failed to prepare upload: operation error S3: CreateBucket, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied 2024/10/20 16:01:55 NOTICE: Failed to copy: failed to prepare upload: operation error S3: CreateBucket, https response error StatusCode: 403, RequestID: , HostID: , api error AccessDenied: Access Denied你可以将
--s3-no-check-bucket参数添加到命令中,这样就不会检查存储桶是否存在,直接上传文件。
回到 Cloudflare R2 控制台查看存储桶内的文件:

参考资料: