Cloudflare R2 + rclone 备份教程(新手版)
本文记录了在 linux 环境下,利用 rclone 备份vps目录至Cloudflare R2的部署参考教程。
Cloudflare R2 + rclone 备份教程(新手版)
-
注册 Cloudflare → 创建 R2 Bucket
-
获取 Access Key / Secret Key / Endpoint
-
配置 rclone 连接 R2
-
测试同步 / 写脚本同步多目录
-
设置 Cron 定时自动备份
1️⃣ 注册 Cloudflare 并启用 R2
注册 Cloudflare 账号:https://dash.cloudflare.com/sign-up
登录 Cloudflare 控制面板
在左侧菜单找到 R2(存储和数据库-R2对象存储) → Create Bucket
填写 Bucket Name(例如 backup)
选择区域(Region),如:亚太(apac)、西欧(weur)、西美(wnam)
点击 Create Bucket
注意:R2 的出站流量免费,但存储和操作有少量费用。(每月前10GB流量免费)
2️⃣ 获取 Access Key / Secret Key / Endpoint
在 Cloudflare R2 控制面板,进入 API Keys / Access Keys (右下方api token点击manage)
创建新的 Access Key
系统会生成 Access Key ID 和 Secret Access Key
一定要记录 Secret Key,之后无法再次查看
获取 Endpoint
格式一般是:
<account_id>.r2.cloudflarestorage.com
例如:
1234567890abcdef.r2.cloudflarestorage.com
3️⃣ 安装 rclone
安装 rclone
sudo -v ; curl https://rclone.org/install.sh | sudo bash
或下载二进制软件解压至/opt/rclone(推荐)
验证安装
rclone version
4️⃣ 配置 rclone 连接 Cloudflare R2
运行 rclone 配置命令:
rclone config
依次选择:
n) New remote
name> r2
Storage> s3
S3 provider> Cloudflare
access_key_id> [你的 Access Key ID]
secret_access_key> [你的 Secret Key]
region> auto # 对应你的 bucket 地区
endpoint> <account_id>.r2.cloudflarestorage.com
其他选项可按默认(按 Enter)
配置完成后,可测试:
rclone lsd r2:
应该能看到你的 Bucket 列表
5️⃣ 同步本地目录到 R2
示例:把 /etc 目录同步到 R2 Bucket 的 apac/etc 子目录:
rclone sync /etc r2:apac/etc --progress
说明:
sync:保持远程目录与本地目录一致(会删除远程多余文件)
copy:只上传新文件,不删除远程
–progress:显示进度
可用参数优化:
–transfers 4 # 并发上传文件数 –checkers 8 # 并发检查 –s3-chunk-size 128M # 分块上传大文件,提高稳定性 –update # 只覆盖更新过的文件,减少 API 调用
6️⃣ 多目录同步示例脚本(增量 + 日志)
保存为 /usr/local/bin/r2.sh:
#!/bin/bash
RCLONE_BIN="/opt/rclone/rclone"
CONFIG_FILE="/opt/rclone/r2.conf"
REMOTE="r2"
REMOTE_SUBDIR="apac" # 指定 R2 上的子目录 apac weur wnam
LOG_DIR="/var/log/rclone-backup"
DIRS_TO_BACKUP=(
"/etc"
"/home"
)
CHUNK_SIZE="64M"
TRANSFERS=4
CHECKERS=8
TIMESTAMP=$(date +"%F_%H-%M-%S")
LOG_FILE="$LOG_DIR/backup_$TIMESTAMP.log"
mkdir -p "$LOG_DIR"
echo "======================================" | tee -a "$LOG_FILE"
echo "备份开始时间: $(date)" | tee -a "$LOG_FILE"
for DIR in "${DIRS_TO_BACKUP[@]}"; do
BASENAME=$(basename "$DIR")
# 目标路径 = 子目录 + 文件夹名
REMOTE_PATH="$REMOTE:$REMOTE_SUBDIR/$BASENAME"
echo "开始备份 $DIR -> $REMOTE_PATH" | tee -a "$LOG_FILE"
$RCLONE_BIN sync "$DIR" "$REMOTE_PATH" \
--config="$CONFIG_FILE" \
--progress \
--transfers $TRANSFERS \
--checkers $CHECKERS \
--s3-chunk-size $CHUNK_SIZE \
--log-file="$LOG_FILE" \
--log-level INFO \
--update \
--create-empty-src-dirs
done
echo "备份结束时间: $(date)" | tee -a "$LOG_FILE"
echo "======================================" | tee -a "$LOG_FILE"
# 删除30天前的日志
find "$LOG_DIR" -type f -name "backup_*.log" -mtime +30 -exec rm -f {} \;
给权限并测试:
chmod +x /usr/local/bin/r2.sh
/usr/local/bin/r2.sh
[root@hk bin]# bash r2.sh
======================================
备份开始时间: Mon Nov 17 13:56:26 CST 2025
开始备份 /etc -> r2:apac/etc
Transferred: 26.105 MiB / 30.648 MiB, 85%, 55.791 KiB/s, ETA 1m23s
Transferred: 30.648 MiB / 30.648 MiB, 100%, 50.387 KiB/s, ETA 0s
Checks: 0 / 0, -, Listed 2436
Transferred: 1820 / 1820, 100%
Elapsed time: 3m40.8s
备份结束时间: Mon Nov 17 14:00:08 CST 2025
======================================
日志文件会保存在 /var/log/rclone-backup/
7️⃣ 自动定时备份(Cron)
编辑 root 用户的 crontab:
sudo crontab -e
添加每天凌晨 2 点自动备份:
0 2 * * * /usr/local/bin/r2.sh
脚本 + cron + rclone 配置完成后,每天自动增量备份到 R2,支持多目录、日志管理、减少 API 调用。
小贴士:
大文件用 –s3-chunk-size
增量备份用 –update