几种常见的同步/备份工具记录
/ 7 min read
Table of Contents
前言
经常遇到各种备份的场景。最近因为服务器到期,需要把数据迁到另一台机器上,顺手做个记录,权当备忘。
| 维度 | rsync | rclone | restic | syncthing | SFTP |
|---|---|---|---|---|---|
| 本质 | 同步算法 + 工具 | 云存储客户端 | 备份系统 | P2P 同步软件 | 文件传输协议 |
| 层级 | 应用 | 应用 | 应用 | 应用 | 协议(SSH 子系统) |
| 同步方向 | 单向 | 单向 / bisync | 单向(备份) | 双向 | 无”同步”概念,只传文件 |
| 增量传输 | ✅ delta 算法 | ✅ | ✅ 块级 | ✅ | ❌ 整文件传输 |
| 去重 / 快照 | ❌ | ❌ | ✅ | ⚠️ 版本保留 | ❌ |
| 加密 | 靠 SSH | ✅ | ✅ 强制 | ✅ TLS | ✅ SSH 加密 |
| 实时同步 | ❌ | ❌ | ❌ | ✅ | ❌ |
| 典型用途 | 镜像 / 同步目录 | 推云盘 | 备份历史 | 多设备一致 | 远程读写文件 |
我的理解
1. rsync —— 增量同步的事实标准
核心是 delta 传输算法:只传变化的字节,不传整份文件。基于 SSH 即开即用,几乎所有 Linux 发行版默认自带。一句话:Linux 世界里同步目录的默认答案,历经几十年验证,无需多言。
常用命令:
# 黄金组合:归档模式 + 显示进度 + 压缩传输rsync -avzP /src/ user@host:/dst/
# 镜像同步(目标端多余的文件会被删掉,慎用)rsync -avz --delete /src/ user@host:/dst/
# 断点续传 + 部分文件保留(传大文件必加)rsync -avzP --partial --append-verify /src/ user@host:/dst/
# 排除某些目录/文件rsync -avz --exclude='node_modules' --exclude='*.log' /src/ /dst/
# 只看会传哪些,不真的传(演练)rsync -avzn /src/ /dst/💡 路径末尾那个
/很重要:/src/表示传”目录里的内容”,/src表示传”目录本身”。踩过坑的都懂。
2. rclone —— 云存储的瑞士军刀
支持 70+ 种云后端(S3、OneDrive、Google Drive、阿里云盘等),统一的命令行接口。挂载云盘为本地目录、跨云迁移、加密上传,它都能做。一句话:只要沾上”云”字,先想到它准没错。
常用命令:
# 配置一个新的远程后端(交互式)rclone config
# 列文件 / 看大小rclone ls remote:bucket/pathrclone size remote:bucket/path
# 同步:把本地推到云端(目标端多余文件会删)rclone sync /local/path remote:bucket/path -P
# 复制:只增不删,更安全rclone copy /local/path remote:bucket/path -P
# 双向同步(需要先 --resync 初始化一次)rclone bisync /local/path remote:bucket/path
# 把云盘挂成本地目录rclone mount remote:bucket/path /mnt/cloud --daemon💡
sync和copy的区别一定要搞清,前者会删文件。加--dry-run先演练一遍是好习惯。
3. restic —— 真正”备份”语义的工具
和前两者根本不是一类东西。CDC 分块 + 全局去重 + 强制加密 + 快照机制 —— 这套设计就是为”我要恢复到三周前周二那个状态”而生的。仓库后端可选本地、SFTP、S3、B2 等。一句话:rsync 做的是同步,restic 做的才是备份。
常用命令:
# 设环境变量省得每次输密码和路径export RESTIC_REPOSITORY="sftp:user@host:/backup/repo"export RESTIC_PASSWORD="your-password"
# 初始化仓库(只需一次)restic init
# 创建一个快照restic backup /home/user --exclude='*.cache'
# 看所有快照restic snapshots
# 恢复某个快照到指定目录restic restore <snapshot-id> --target /tmp/restore
# 按策略清理旧快照(保留最近 7 天 + 最近 4 周 + 最近 6 月)restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
# 校验仓库完整性restic check💡 密码丢了仓库就废了,没有任何后门。务必用密码管理器存好。
4. syncthing —— 私有的 Dropbox
P2P 直连,数据不经过中心服务器;发现 / 中继节点官方维护,也可自建。多设备实时双向同步,开源、跨平台、零月费。一句话:对隐私敏感的人,自托管 Dropbox 的最优解。
常用操作(主要靠 Web UI,命令不多):
# 启动(会在 127.0.0.1:8384 起一个 Web UI)syncthing
# 后台运行,日志写文件syncthing --no-browser --logfile=/var/log/syncthing.log &
# 看本机的设备 ID(添加到对端时用)syncthing --device-id
# 服务器上反代时绑到所有网卡syncthing --gui-address=0.0.0.0:8384💡 日常添加文件夹、配对设备、改同步策略,都在 Web UI 里点几下就行,没必要硬背命令。
5. sftp / scp —— 协议级的最低公分母
严格说 SFTP 是个协议(SSH 的子系统),scp 也只是借 SSH 跑了一次 cp。没有增量、没有去重、没有花哨功能,但任何能 SSH 的机器,开箱即用。一句话:临时传几个文件,别想太多,scp 就完事。
常用命令:
# scp:一条命令传完scp file.txt user@host:/remote/path/ # 上传scp user@host:/remote/file.txt ./ # 下载scp -r mydir/ user@host:/remote/path/ # 传整个目录scp -P 2222 file.txt user@host:/path/ # 指定端口(注意大写 P)
# sftp:进入交互式 shell,适合多次操作sftp user@host> ls # 看远端> lls # 看本地(前面加个 l)> put file.txt # 上传> get file.txt # 下载> bye # 退出💡 OpenSSH 9.0 起
scp默认改用 SFTP 协议了,行为更安全;但传超大文件依旧推荐 rsync。
本文由 Claude 润色。