Skip to content
Go back

Linux 下使用 Rclone 将本地文件复制到 Cludflare R2 存储桶中

| 0 Views Edit page

前言

项目 S3 存储桶要从国内迁移到国外,首次的文件量有点大,用 Rclone 传输下。


方案概述

  1. 安装 Rclone
  2. 获取 Cloudflare R2 存储桶的 Access Key 和 Secret Key
  3. 将本地文件传输至 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

Rclone 版本

二、获取 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_id
  • secret_access_key
  • endpoint

选择 R2 存储桶,然后在右侧选择管理 R2 API 令牌:
管理 R2 API 令牌

创建 API 令牌,然后复制 Access KeySecret Key
创建 API 令牌
填入信息

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

获取密钥信息

三、将本地文件传输至 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 控制台查看存储桶内的文件:
文件上传成功


参考资料:


Edit page