引言

Ubuntu 系统系列 | 第 13 天:备份与恢复策略——rsync、tar、duplicity、borg 备份方案

第 13/30 天

引言

“数据无价”——这句话在运维圈里是铁律。无论你的系统配置得多完美,一次误删文件、硬盘故障或勒索软件攻击,就能让一切归零。今天的主题是备份与恢复,我们将深入四个主流工具:轻量级文件同步 rsync、经典归档工具 tar、加密备份利器 duplicity,以及新一代高效去重工具 BorgBackup。学完今天的内容,你将能为自己的 Ubuntu 系统搭建一套完整的备份方案。

核心概念

备份的三二一原则

在动手之前,先记住业界公认的黄金法则——3-2-1 备份策略
3:保留数据的 3 份副本(一份生产 + 两份备份)
2:使用 2 种不同的存储介质(如本地磁盘 + 远程服务器)
1:至少 1 份备份存放在异地

四种工具选型对比

工具 特点 适用场景 增量备份 加密
rsync 快速增量文件同步 日常文件同步、镜像备份 ✅ 按文件变更
tar 经典归档打包 完整系统快照、打包迁移 ❌ 全量 ✅ (GPG)
duplicity 加密增量备份 远程加密备份、云存储 ✅ 按块 ✅ (GPG)
borg 高效去重压缩 大量相似数据、长期存档 ✅ 按块去重

实战步骤

一、rsync:日常文件同步

rsync 是 Linux 系统中最常用的文件同步工具,几乎每个发行版都预装了它。它的核心优势是”只传输差异部分”。

基本用法:本地备份

# 语法:rsync [选项] 源路径 目标路径
# 将 /home/user/documents 备份到 /backup/documents
rsync -avh --delete /home/user/documents/ /backup/documents/

输出示例:

sending incremental file list
./
report-q1.pdf
           1.2M 100%   11.24MB/s    0:00:00 (xfr#1, to-chk=0/1)
project-plan.docx
         345.2K 100%    3.15MB/s    0:00:00 (xfr#2, to-chk=0/1)

sent 1.56M  bytes  received 54 bytes  3.12M  bytes/sec
total size is 1.55M  speedup is 1.00

参数说明-a 归档模式(保留权限、时间戳等),-v 详细输出,-h 人类可读格式,--delete 删除目标端多余文件(保持镜像一致)。

远程备份到 SSH 服务器:

# 备份到远程服务器
rsync -avhze ssh /home/user/documents/ user@192.168.1.100:/backup/documents/

# 从远程服务器恢复到本地
rsync -avhze ssh user@192.168.1.100:/backup/documents/ /home/user/documents-restored/

使用排除文件:

# 创建排除规则文件
cat > ~/.rsync-exclude.txt << 'EOF'
*.tmp
*.log
cache/
node_modules/
.DS_Store
EOF

# 执行排除备份
rsync -avh --exclude-from=~/.rsync-exclude.txt /home/user/ /backup/home/

二、tar:系统级归档备份

tar 是类 Unix 系统最古老的归档工具之一,适合打包整个目录或系统分区。

创建压缩归档:

# 备份 /etc 配置目录到压缩包
tar -czpf /backup/etc-backup-$(date +%F).tar.gz /etc

输出示例:

tar: Removing leading `/' from member names
tar: /etc/ssl/private: file is unreadable — skipped

结合 GPG 加密归档:

# 使用 GPG 对称加密归档
tar -czf - /home/user/important/ | gpg --symmetric --cipher-algo AES256 -o /backup/important-$(date +%F).tar.gz.gpg

# 解密并恢复
gpg --decrypt /backup/important-2026-07-21.tar.gz.gpg | tar -xzf - -C /tmp/restore/

注意tar -czpf 中的 p 参数会保留文件权限,这对系统备份至关重要。

创建增量备份脚本:

#!/bin/bash
# /usr/local/bin/level-backup.sh
BACKUP_DIR="/backup/snapshots"
SOURCE="/home/user/data"
DATE=$(date +%Y%m%d)

# 第一级:全量备份
tar -czpf "$BACKUP_DIR/base-$DATE.tar.gz" --listed-incremental="$BACKUP_DIR/base.snap" $SOURCE

# 后续增量备份(只需改动 snap 文件指向)
# tar -czpf "$BACKUP_DIR/incr-$DATE.tar.gz" --listed-incremental="$BACKUP_DIR/base.snap" $SOURCE

三、duplicity:加密增量备份到云端

duplicity 使用 librsync 实现增量备份,并通过 GPG 加密,非常适合备份到 S3、SFTP、NFS 等远程存储。

安装与配置:

# 安装 duplicity
sudo apt update && sudo apt install -y duplicity

# 生成 GPG 密钥(如尚未配置)
gpg --full-generate-key

创建加密备份:

# 备份 /home/user/documents 到远程 SFTP 服务器
export PASSPHRASE="your-secure-passphrase"
duplicity --encrypt-key="YOUR_GPG_KEY_ID" 
  /home/user/documents/ 
  sftp://user@192.168.1.100//backup/documents/

输出示例:

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1721553600.00 (Tue Jul 21 08:00:00 2026)
EndTime 1721553720.00 (Tue Jul 21 08:02:00 2026)
ElapsedTime 120.00 (2 minutes)
SourceFiles 1523
SourceFileSize 2.5 GB
NewFiles 1523
NewFileSize 2.5 GB
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0
ChangedDeltaSize 0
DeltaEntries 1523
RawDeltaSize 2.5 GB
TotalDestinationSizeChange 1.8 GB (压缩率 72%)
Errors 0
--------------------------------------------------

# 查看备份集
duplicity collection-status sftp://user@192.168.1.100//backup/documents/

# 从备份中恢复
duplicity restore sftp://user@192.168.1.100//backup/documents/ /tmp/restored/

设置定时增量备份(crontab):

# 编辑 crontab 添加每日备份任务
crontab -e

# 添加以下行(每天凌晨 2 点执行)
0 2 * * * PASSPHRASE="your-passphrase" duplicity --full-if-older-than 7D /home/user/documents/ sftp://user@192.168.1.100//backup/documents/ >> /var/log/duplicity.log 2>&1

四、borg:高效去重压缩备份

BorgBackup 是当前最先进的备份工具之一,它的块级去重能力让存储效率大幅提升。

安装与初始化仓库:

# 安装 borg
sudo apt update && sudo apt install -y borgbackup

# 初始化备份仓库
borg init --encryption=repokey-blake2 /backup/borg-repo

输出示例:

Enter new passphrase: 
Enter same passphrase again: 
Remember your passphrase — your data will be inaccessible without it.
By default objects will use 64-bit ID and 128-bit MAC size.
Initializing repository at "/backup/borg-repo"
...

# 验证仓库
borg info /backup/borg-repo

创建并管理备份:

# 创建备份(带压缩)
borg create --stats --progress 
  /backup/borg-repo::documents-{now:%Y-%m-%d} 
  /home/user/documents/ 
  --exclude '*.tmp' 
  --exclude 'cache/'

# 输出示例:
# ------------------------------------------------------------------------------
# Archive name: documents-2026-07-21
# Archive fingerprint: a1b2c3d4e5f6...
# Time (start): Tue, 2026-07-21 08:00:00
# Time (end):   Tue, 2026-07-21 08:00:15
# Duration: 15.21 seconds
# Number of files: 1523
# Utilization of max. archive size: 0%
# ------------------------------------------------------------------------------
#                        Original size      Compressed size    Deduplicated size
# This archive:               2.50 GB            850.00 MB            120.00 MB
# All archives:              10.00 GB            3.40 GB            250.00 MB
# ------------------------------------------------------------------------------
# 
# 注意上面的 Deduplicated size 只有 120MB,说明去重效果极佳!

# 列出所有备份
borg list /backup/borg-repo

# 恢复特定备份
borg extract /backup/borg-repo::documents-2026-07-21 /tmp/restore/

# 挂载备份为 FUSE 文件系统(方便浏览)
borg mount /backup/borg-repo::documents-2026-07-21 /mnt/borg-backup
ls /mnt/borg-backup
borg umount /mnt/borg-backup

五、自动化备份脚本

将以上工具整合为一个可复用的备份脚本:

#!/bin/bash
# /usr/local/bin/auto-backup.sh
# 自动化备份脚本 — 支持三种后端

BACKUP_DATE=$(date +%Y%m%d)
LOG_FILE="/var/log/backup-$BACKUP_DATE.log"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 1. rsync 本地镜像
log "Starting rsync local mirror..."
rsync -avh --delete /home/user/ /backup/local-mirror/ >> "$LOG_FILE" 2>&1

# 2. tar 系统配置归档
log "Creating tar archive of /etc..."
tar -czf /backup/system/etc-$BACKUP_DATE.tar.gz /etc/ >> "$LOG_FILE" 2>&1

# 3. borg 去重备份
log "Starting borg backup..."
export BORG_PASSPHRASE="your-passphrase"
borg create --stats --compression lz4 
  /backup/borg-repo::system-$(date +%Y-%m-%d) 
  /home/user/ /etc/ /var/www/ 
  --exclude '*.cache' 
  --exclude 'node_modules' >> "$LOG_FILE" 2>&1

# 清理旧备份(保留最近 7 天)
log "Pruning old backups..."
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 
  /backup/borg-repo >> "$LOG_FILE" 2>&1

log "Backup completed successfully!"

常见问题

Q1:备份时提示 “Permission denied” 如何处理?

某些系统文件(如 /etc/shadow/var/log/ 中的日志)普通用户无法读取。解决方案:
– 使用 sudo 执行备份命令
– 或创建一个专用的备份用户,并配置 sudoers 免密权限

Q2:远程备份速度太慢怎么办?

# rsync 使用压缩传输
rsync -avhz --compress-level=9 source/ user@remote:/backup/

# borg 使用低开销压缩算法
borg create --compression lz4 /repo::backup source/

# 如果网速受限,考虑先本地压缩再传输
tar -czf - /source/ | ssh user@remote "cat > /backup/archive.tar.gz"

Q3:如何验证备份的完整性?

# tar 验证
tar -tzf backup.tar.gz | head -20

# duplicity 验证
duplicity verify sftp://user@server//backup/ /source/

# borg 验证
borg check /backup/borg-repo
borg extract --dry-run /backup/borg-repo::archive-name

Q4:备份占满磁盘怎么办?

实施保留策略(retention policy)
– 日常备份保留 7 天
– 周备份保留 4 周
– 月备份保留 6 个月
– 年备份长期保留

borg 的 prune 命令和 duplicity 的 remove-older-than 都内置了这些策略。

总结

今天我们学习了 Ubuntu 系统的四种备份方案:

工具 一句话总结 推荐场景
rsync 最快速的增量文件同步 日常文件镜像、代码同步
tar 经典全量打包归档 系统配置快照、迁移打包
duplicity 加密增量备份到远程 云端/SFTP 加密备份
borg 最强去重压缩 大量数据长期存档

最佳实践建议:不要只依赖一种工具。组合使用 rsync 做日常文件同步 + borg 做定期去重备份 + 异地存储一份离线副本,才能构建真正的 3-2-1 防御体系。

最后,定期演练恢复流程——不能恢复的备份等于没有备份。每月至少做一次完整的恢复测试,确保在真正的灾难来临时,你能从容应对。

Ubuntu 系统系列目录

天数 主题 状态
第 1 天 Ubuntu 简介与安装指南 ✅ 已发布
第 2 天 文件系统与目录结构 ✅ 已发布
第 3 天 用户与权限管理 ✅ 已发布
第 4 天 软件包管理(APT、Snap、Flatpak) ✅ 已发布
第 5 天 系统服务管理(systemd) ✅ 已发布
第 6 天 网络配置与基础诊断 ✅ 已发布
第 7 天 文本处理与文件操作 ✅ 已发布
第 8 天 Shell 脚本编程入门 ✅ 已发布
第 9 天 进程管理与任务调度 ✅ 已发布
第 10 天 存储管理(LVM、磁盘分区) ✅ 已发布
第 11 天 防火墙与网络安全(UFW、iptables) ✅ 已发布
第 12 天 SSH 服务配置与远程管理 ✅ 已发布
第 13 天 备份与恢复策略——rsync、tar、duplicity、borg 📝 今日发布
第 14 天 系统监控与性能分析 🔜 明日预告
第 15 天 Web 服务器(Nginx/Apache)部署 ⏳ 待发布
第 16 天 数据库安装与管理(MySQL/PostgreSQL) ⏳ 待发布
第 17 天 Docker 容器化入门 ⏳ 待发布
第 18 天 DevOps 工具链(Git、Ansible) ⏳ 待发布
第 19 天 日志管理与 ELK Stack ⏳ 待发布
第 20 天 高可用与负载均衡 ⏳ 待发布
第 21 天 容器编排(Docker Compose) ⏳ 待发布
第 22 天 CI/CD 流水线搭建 ⏳ 待发布
第 23 天 Kubernetes 基础 ⏳ 待发布
第 24 天 监控告警(Prometheus + Grafana) ⏳ 待发布
第 25 天 自动化运维(Ansible Playbook) ⏳ 待发布
第 26 天 安全加固与审计 ⏳ 待发布
第 27 天 虚拟化技术(KVM、QEMU) ⏳ 待发布
第 28 天 性能调优与内核参数 ⏳ 待发布
第 29 天 故障排查实战 ⏳ 待发布
第 30 天 综合实战:从零搭建生产环境 ⏳ 待发布
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容