服务器的数据有多脆弱,只有丢过一次才知道。系统盘坏、误删文件、勒索病毒加密,任何一件事都能让你几年的积累瞬间归零。这篇不讲大道理,直接把 rclone + OneDrive 这套免费备份方案从零配到自动运行,每一步命令都给你~
写在开始
你服务器上的一个目录(比如 /home/user/data),每天凌晨自动增量上传到你的微软 OneDrive 网盘。增量意味着:第一次全量传,之后只传新增和修改的文件,省流量省时间。整个流程跑在 cron 或 systemd 定时器里,配好之后你什么都不用做。
rclone 是个开源的命令行工具,支持几十种云存储,OneDrive 只是其中之一。它把 OneDrive 抽象成一个"remote"(远程存储),你用类似 ls、copy 的命令操作云盘,就像操作本地文件夹。
准备工作
| 项 | 说明 |
|---|---|
| 服务器系统 | 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.51.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 config2.2 按向导走(交互过程)
n) New remote ← 输入 n 回车,新建远程存储
name> onedrive ← 起个名字,本文统一用 onedrive选择存储类型,输入 onedrive 回车:
Storage> onedriveclient_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> ← 粘贴授权 token2.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 Pictures3.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/datasize 显示目标端总大小和文件数,和源目录对比一致即为成功。
定时自动备份
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 -l5.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 rclonelist-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 --progress6.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 --progress7.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 found | PATH 环境差异 | 命令里用 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 目标目录 |
核心要点:
- 备份用
copy,永远不要用sync(会镜像删除目标文件) - 定时任务里写绝对路径和日志文件,出事有迹可循
- 定期做恢复演练,验证备份真实可用
- 敏感数据建议套一层 crypt 加密 remote
- 用
--backup-dir保留历史版本,防误删
这套方案跑起来之后,你的服务器数据每天自动、增量、安全地躺在 OneDrive 上。丢数据这种事,从此和你无关。
本文命令均在 Linux 环境验证,rclone 版本不同可能略有差异,以 rclone --help 为准。