18- 备份与恢复(rsync、tar、borgbackup、restic) 💾
前提条件 ✅
- 已完成 LVM 逻辑卷、NFS/Samba 共享配置(/data 目录可用于存放备份)
- 以 ops 用户登录(具有 sudo 权限)
- 系统运行在 Debian 12 Bookworm
- 虚拟机环境:VMware Workstation Pro(建议有额外磁盘或 NFS 共享作为备份目标)
- 防火墙已放行相应端口(如 NFS/Samba 共享访问)
详细步骤 🛠️
- rsync – 增量同步(最常用、简单可靠)
基本用法(本地备份 /data 到 /backup):
sudo mkdir -p /backup/data-$(date +%Y%m%d)
sudo rsync -avz --delete /data/ /backup/data-$(date +%Y%m%d)/
常用选项: - -a:归档模式(保留权限、时间戳等) - -v:详细输出 - -z:压缩传输(远程时有用) - --delete:删除目标中源已不存在的文件 - --exclude='*.tmp':排除特定文件
远程备份示例(推送到另一台服务器):
rsync -avz --delete -e "ssh -p 2222" /data/ ops@192.168.1.101:/backup/
定时任务(每天凌晨 2 点):
sudo crontab -e
# 添加:
0 2 * * * rsync -aq --delete /data/ /backup/daily-$(date +\%Y\%m\%d)/
- tar – 传统打包备份
全量打包 /data:
sudo tar -czvf /backup/data-full-$(date +%Y%m%d).tar.gz /data
增量备份(结合 rsync 更实用):
# 先全量
sudo tar -czvf /backup/full.tar.gz /data
# 后续增量(使用 --listed-incremental)
sudo tar -czvf /backup/inc-$(date +%Y%m%d).tar.gz --listed-incremental=/backup/snapshot.sngz /data
恢复:
sudo tar -xzvf /backup/data-full-20260129.tar.gz -C /
- borgbackup – 去重、加密、增量备份(强烈推荐生产)
安装:
sudo apt install -y borgbackup
初始化仓库(本地或远程 SSH):
export BORG_PASSPHRASE='your-strong-passphrase'
borg init --encryption=repokey-blake2 /backup/borg-repo
# 或远程:borg init ssh://ops@192.168.1.101:/backup/borg-repo
首次备份:
borg create /backup/borg-repo::daily-$(date +%Y%m%d) \
/data \
--stats --progress --exclude '/data/tmp' --exclude-caches
列出备份、恢复、删除旧备份:
borg list /backup/borg-repo
borg extract /backup/borg-repo::daily-20260129 ./
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /backup/borg-repo
- restic – 类似 borg、支持 S3/Backblaze 等云存储
安装:
sudo apt install -y restic
初始化(本地示例):
export RESTIC_PASSWORD='your-strong-password'
restic -r /backup/restic-repo init
备份:
restic -r /backup/restic-repo backup /data \
--exclude '/data/tmp' --tag daily
快照列表、恢复、清理:
restic -r /backup/restic-repo snapshots
restic -r /backup/restic-repo restore latest --target /restore-point
restic -r /backup/restic-repo forget --keep-daily 7 --prune
- 备份策略推荐(3-2-1 原则)
- 3 份拷贝:生产 + 本地备份 + 异地备份
- 2 种介质:磁盘 + 云(如 Backblaze B2、S3)
- 1 份离线:外部硬盘或磁带
示例脚本框架(/opt/backup/backup.sh):
#!/bin/bash
export BORG_PASSPHRASE='xxx'
borg create ... && borg prune ...
# 或 restic backup ... && restic forget --prune
rsync -a /backup/borg-repo /mnt/external-drive/
实践任务 🎯
- 用 rsync 每天备份 /data 到 /backup/daily-$(date +%Y%m%d) 并加入 cron
- 初始化一个 borgbackup 仓库,对 /data 进行一次完整备份,查看 borg list 输出
- 模拟删除 /data 中部分文件,用 borg extract 恢复指定快照
- 安装 restic,创建一个本地仓库并备份 /data,尝试 restore latest 测试恢复
自测问题 ❓
- rsync 的 --delete 选项有什么风险?如何安全使用?
- borgbackup 和 restic 相比传统 tar/rsync 的核心优势是什么?
- 3-2-1 备份规则中的“1 份离线”指的是什么?为什么重要?
- 如何在 borgbackup 中设置自动清理旧备份,只保留最近 7 天每日 + 4 周每周 + 6 个月每月?
总结 📌
可靠备份是运维的最后防线。
rsync 适合简单同步,borgbackup/restic 提供去重、加密、版本控制,是生产级增量备份首选。
结合 LVM 快照 + 加密备份 + 异地副本 + 定期恢复测试,形成完整灾难恢复能力。