服务器的数据有多脆弱,只有丢过一次才知道。系统盘坏、误删文件、勒索病毒加密,任何一件事都能让你几年的积累瞬间归零。这篇不讲大道理,直接把 rclone + OneDrive 这套免费备份方案从零配到自动运行,每一步命令都给你~

写在开始

你服务器上的一个目录(比如 /home/user/data),每天凌晨自动增量上传到你的微软 OneDrive 网盘。增量意味着:第一次全量传,之后只传新增和修改的文件,省流量省时间。整个流程跑在 cron 或 systemd 定时器里,配好之后你什么都不用做。

rclone 是个开源的命令行工具,支持几十种云存储,OneDrive 只是其中之一。它把 OneDrive 抽象成一个"remote"(远程存储),你用类似 lscopy 的命令操作云盘,就像操作本地文件夹。


准备工作

说明
服务器系统Linux(Debian / Ubuntu / CentOS / 树莓派 OS 均可)
微软账号一个能登录 OneDrive 的微软账号(个人版或商业版均可)
网络服务器能访问外网(微软 API 域名正常)
💡 本文以 OneDrive 个人版为例,商业版(Office 365 企业版)流程相同,只在授权时选 drive_type 不同。

安装 rclone

1.1 官方脚本安装(推荐,版本最新)

curl https://rclone.org/install.sh | sudo bash

装完验证:

rclone version

正常输出类似:

rclone v1.68.2
- os/version: debian 12 (64 bit)
- os/kernel: 6.1.0-... (aarch64)
- go/version: go1.22.5

1.2 或系统包管理器安装(版本可能较旧)

sudo apt update && sudo apt install -y rclone     # Debian/Ubuntu
sudo yum install -y rclone                        # CentOS/RHEL
⚠️ 建议用官方脚本。apt 源里的 rclone 可能落后一年以上,OneDrive 某些新参数会缺失。

创建 OneDrive remote

rclone 里一个 remote 就是一套"存储位置 + 授权凭证"。

2.1 进入配置向导

rclone config

2.2 按向导走(交互过程)

n) New remote         ← 输入 n 回车,新建远程存储
name> onedrive        ← 起个名字,本文统一用 onedrive

选择存储类型,输入 onedrive 回车:

Storage> onedrive

client_id / client_secret 直接回车跳过(用 rclone 官方内置的):

client_id>           ← 直接回车(使用 rclone 默认 client_id)
client_secret>       ← 直接回车

授权地区(国内服务器选 China,其他默认即可):

Region>              ← 一般直接回车选默认,或按提示选择

关键一步——服务器没有浏览器,选 headless(无头)授权:

Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> n               ← 输入 n 回车(无头模式)

向导会给出一个授权链接:

For this to work, you will need rclone available on a machine that has a web browser available.

Execute the following on the machine with the web browser (same rclone version recommended):

    rclone authorize "onedrive"

Then paste the result.

2.3 在有浏览器的设备上完成授权(手机电脑都行)

在你自己有浏览器的电脑/手机上执行:

rclone authorize "onedrive"

(手机/电脑上没装 rclone 的话,直接复制上一步给的 https://... 授权 URL 到浏览器打开,登录微软账号并同意授权,浏览器会显示一段 token,复制下来)

回到服务器,把授权 token 粘贴到向导:

token>              ← 粘贴授权 token

2.4 选择 OneDrive 类型

Choose a type of OneDrive drive
 1) OneDrive Personal or Business
 2) SharePoint
drive type> 1       ← 个人/商业版选 1
商业版如果账号属于组织,可能还会询问 drive_id,按提示选择或回车。

2.5 确认完成

y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y            ← 输入 y 保存

出现 Current remotes: 列表能看到 onedrive,即配置成功:

Current remotes:

Name                 Type
====                 ====
onedrive             drive

最后输入 q 退出。


验证连接

3.1 列出根目录

rclone lsd onedrive:

能列出 OneDrive 根目录下的文件夹即连接成功:

          -1 2026-01-01 10:00:00        -1 Documents
          -1 2026-01-01 10:00:00        -1 Pictures

3.2 查看账号信息(可选)

rclone about onedrive:

显示 OneDrive 总容量、已用、剩余空间。


首次备份

4.1 常用备份命令

把服务器目录 /home/user/data 上传到 OneDrive 的 backup 文件夹:

rclone copy /home/user/data onedrive:backup/data --progress
参数作用
copy增量上传:目标已存在且未变化的文件跳过,只传新增/修改的
--progress显示实时进度
--log-file=/var/log/rclone.log记录日志(定时任务里建议加上)
--transfers 4并发数,默认 4,带宽大可调高
--drive-chunk-size 64M大文件分片大小,默认 8M,大文件建议调大

4.2 完整示例(带日志,适合定时任务)

rclone copy /home/user/data onedrive:backup/data \
  --progress \
  --transfers 4 \
  --log-file=/var/log/rclone.log \
  --log-level INFO
⚠️ 注意:备份用 copy 而不是 sync
sync 会把目标端"镜像"成和源一致,目标端多出来的文件会被删除——一旦源文件误删,备份也跟着没了,这是备份大忌。

4.3 首次备份后验证

rclone lsl onedrive:backup/data | head
rclone size onedrive:backup/data

size 显示目标端总大小和文件数,和源目录对比一致即为成功。


定时自动备份

5.1 方法一:cron(简单)

编辑 crontab:

crontab -e

加入一行(每天凌晨 2:30 备份):

30 2 * * * rclone copy /home/user/data onedrive:backup/data --log-file=/var/log/rclone.log --log-level INFO 2>&1

保存退出即生效。验证:

crontab -l

5.2 方法二:systemd timer(推荐,可记录执行状态)

创建服务单元:

sudo nano /etc/systemd/system/rclone-backup.service

内容:

[Unit]
Description=Rclone backup to OneDrive
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/rclone copy /home/user/data onedrive:backup/data --log-file=/var/log/rclone.log --log-level INFO
注意:ExecStart 里 rclone 路径用 which rclone 查到的绝对路径,避免 cron/timer 环境变量缺失问题。

创建定时器单元:

sudo nano /etc/systemd/system/rclone-backup.timer

内容:

[Unit]
Description=Daily rclone backup timer

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

启动并启用:

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-backup.timer
sudo systemctl list-timers | grep rclone

list-timers 能看到下一次执行时间即成功。手动触发一次测试:

sudo systemctl start rclone-backup.service
sudo journalctl -u rclone-backup.service -n 20   # 查看执行日志

恢复文件

6.1 整目录恢复

rclone copy onedrive:backup/data /home/user/data-restored --progress

6.2 单文件恢复

rclone copy onedrive:backup/data/important.txt /home/user/data-restored/

6.3 列出备份内容(确认备份是否完好)

rclone lsjson onedrive:backup/data | jq 'length'
💡 建议定期(如每月一次)做一次恢复演练:把备份拉回服务器临时目录,确认文件可读、数据库文件能打开。没验证过的备份 = 没有备份。

其他功能

7.1 备份加密(防止 OneDrive 文件被查看)

rclone 支持在 OneDrive 之上再套一层加密 remote,上传的文件是密文,服务器本地才能解密。

rclone config
# n 新建 remote,名称 onedrive-crypt
# 类型选 crypt
# remote 填 onedrive:backup/encrypted
# 设置加密密码(保存为密码文件或输入两次)

备份时改成传加密 remote:

rclone copy /home/user/data onedrive-crypt:data --progress

7.2 保留多个历史版本(防止误删/勒索病毒)

--backup-dir 参数,把每次更新前的旧文件归档到时间戳目录:

rclone copy /home/user/data onedrive:backup/data \
  --backup-dir onedrive:backup/history/$(date +%Y%m%d-%H%M%S)

每次备份后,被覆盖/删除的旧版本会存到 history/时间戳/ 下,可回溯任意一天。

7.3 发送备份结果通知(Telegram / 邮件)

在定时任务脚本里追加判断:

rclone copy /home/user/data onedrive:backup/data --log-file=/var/log/rclone.log --log-level INFO
if [ $? -eq 0 ]; then
    curl -s "https://api.telegram.org/bot<你的BOT_TOKEN>/sendMessage" \
      -d chat_id=<你的CHAT_ID> -d text="✅ rclone 备份成功 $(date)"
else
    curl -s "https://api.telegram.org/bot<你的BOT_TOKEN>/sendMessage" \
      -d chat_id=<你的CHAT_ID> -d text="❌ rclone 备份失败,请检查"
fi

常见问题排查

问题原因解决
Token has expired / 授权失效OAuth token 过期或账号改密重新 rclone config 编辑该 remote 重新授权;rclone 一般会自动刷新 token
上传大文件很慢默认分片 8M 太小--drive-chunk-size 256M
403 rate limit exceeded触发微软 API 限流降低并发 --transfers 2,或稍等重试
404 file not found 某些文件跳过文件名含非法字符/超长检查源文件名(Windows/OneDrive 不允许的字符)
cron 里报 command not foundPATH 环境差异命令里用 which rclone 的绝对路径
备份后 OneDrive 空间不够免费账号仅 5G清理旧版本、定期清理 history 目录,或升级订阅
上传中断后重跑断点续传直接重跑同一条 copy 命令,已传的会跳过

总结

阶段命令/操作
安装curl https://rclone.org/install.sh sudo bash
配置rclone config → 新建 onedrive → 无头授权
验证rclone lsd onedrive:
备份rclone copy 源目录 onedrive:backup/data
定时cron 或 systemd timer 每天执行
恢复rclone copy onedrive:backup/data 目标目录

核心要点:

  1. 备份用 copy永远不要用 sync(会镜像删除目标文件)
  2. 定时任务里写绝对路径日志文件,出事有迹可循
  3. 定期做恢复演练,验证备份真实可用
  4. 敏感数据建议套一层 crypt 加密 remote
  5. --backup-dir 保留历史版本,防误删

这套方案跑起来之后,你的服务器数据每天自动、增量、安全地躺在 OneDrive 上。丢数据这种事,从此和你无关。


本文命令均在 Linux 环境验证,rclone 版本不同可能略有差异,以 rclone --help 为准。