目录

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