第 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 天 | 综合实战:从零搭建生产环境 | ⏳ 待发布 |















暂无评论内容