Linux 备份与容灾:rsync、快照、异地同步与恢复演练

Linux 备份与容灾实战:备份策略设计(3-2-1 原则)、rsync 增量备份、tar 打包、LVM/btrfs 快照、数据库备份、异地同步(远程/对象存储)、加密与恢复演练。

引言

「数据不是有没有备份,而是能不能恢复。」Linux 运维的核心风险就是数据丢失——误删、磁盘坏、勒索、机房断电。本文从备份策略设计讲起,系统覆盖 Linux 的备份武器库:rsync 增量同步、tar 打包、LVM/btrfs 快照、数据库一致备份、异地/云对象存储同步、加密,最后以「恢复演练」收尾——因为没验证过的备份等于没有备份。

前置:/linux-filesystem-disk/(文件系统/LVM/RAID)、/linux-performance-tuning/(磁盘 IO)。云对象存储见 [[infra]]。


目录


1. 备份策略设计:3-2-1 原则与 RPO/RTO

3-2-1 原则(业界黄金标准):

3 份数据副本
2 种不同介质(磁盘 + 磁带/对象存储)
1 份异地存放(防机房级故障)

两个关键指标:

指标含义目标
RPO(恢复点目标)最多丢多少数据越小越贵
RTO(恢复时间目标)多久恢复业务越小越贵

RPO/RTO 决策:

数据变化大、业务重要 → 频繁备份/实时同步 → 小 RPO
恢复要求快 → 热备/高可用 → 小 RTO
成本权衡:RPO/RTO 越小,基础设施越贵

分层备份策略:

每日快照(RPO 1天)
  + 每小时增量(RPO 1小时)
  + 每周异地全量(异地)
  + 每月归档(长期保留)

心智:备份是「成本」不是「万能」——先定 RPO/RTO 目标,再选备份频率与介质。


2. 备份的三种类型:全量/增量/差异

类型备份内容空间恢复速度复杂度
全量所有数据大快低
增量上次备份以来的变化最小慢(需链式)中
差异上次全量以来的变化中中中

备份链示意:

全量(周一) → 增量1(周二) → 增量2(周三) → 增量3(周四)
恢复:全量 + 增量1 + 增量2 + 增量3(全部重放)

常见组合:

周日常规:全量
周一到周六:增量
恢复慢?→ 改用「差异」(每天基于全量,恢复只需全量+最新差异)

记忆:全量重、增量轻、差异居中——日常用增量省空间,恢复用「全量 + 最新差异」平衡速度。


3. rsync:增量同步的瑞士军刀

rsync 只传输变化的块——支持增量、远程、断点续传:

# 本地备份
rsync -av /var/www/ /backup/www/

# 远程备份(走 SSH)
rsync -avz --delete /var/www/ user@backup:/backup/www/
# --delete:删除源中已不存在的文件(保持镜像一致)

# 排除与保留
rsync -avz --exclude 'cache/' --exclude '*.tmp' \
      --link-dest=/backup/last /var/www/ /backup/current/

# 带进度与限速
rsync -avz --progress --bwlimit=2000 /var/www/ backup:/backup/www/

常用 rsync 选项:

选项作用
-a归档(递归+权限+时间)
-v / -z详细 / 压缩
–delete删除源端不存在的
–exclude排除目录
–link-dest硬链接去重(类快照)
–bwlimit限速防占满带宽

增量+去重的「穷人快照」:

# 每次备份用 --link-dest 指向上次,未变化文件硬链接复用(省空间)
rsync -av --link-dest=/backup/$(date -d yesterday +%F) \
      /data/ /backup/$(date +%F)/

记忆:rsync = 增量同步 + 远程安全(SSH)——--link-dest 还能变出「硬链接快照」,省空间不省时间戳。


4. tar 打包:归档与压缩

tar 打包归档(适合一次性/迁移/定期全量):

# 打包压缩
tar -czf backup_$(date +%F).tar.gz /var/www /etc

# 排除目录
tar -czf backup.tar.gz --exclude='/var/www/cache' /var/www

# 解包
tar -xzf backup.tar.gz -C /restore/path

# 只查看
tar -tzf backup.tar.gz | head

# 增量 tar(按 mtime)
tar -czf inc.tar.gz --newer-mtime=last_full.tar /var/www

tar 备份注意事项:

要点说明
排除运行时缓存cache/log/tmp
固定路径恢复时 -C 到目标
校验tar -tzf 抽查完整性
边写边校验gzip -t 检验压缩包

tar 流式到远程:

# 边打包边 SSH 传输(不落本地盘)
tar -czf - /var/www | ssh backup 'cat > /backup/www.tar.gz'

记忆:tar 适合「归档快照」,rsync 适合「持续同步」——迁移用 tar、日常增量用 rsync。


5. LVM/btrfs 快照:秒级一致性备份

LVM 快照:写时复制,秒级创建,几乎零停机:

# 创建快照(先确认卷组有空间)
lvcreate -L 5G -s -n snap_$(date +%F) /dev/vg0/data
# 挂载快照备份
mount /dev/vg0/snap_$(date +%F) /mnt/snap
rsync -av /mnt/snap/ /backup/lv-snap/
# 完成删除快照
lvremove /dev/vg0/snap_$(date +%F)

btrfs 子卷快照(自带快照能力):

# 创建快照
btrfs subvolume snapshot /mnt/data /mnt/snapshots/data-$(date +%F)
# 快照之间还能增量发送
btrfs send /mnt/snapshots/data-1 | btrfs receive /backup/

快照 vs 传统备份:

维度快照普通备份
创建速度秒级视数据量
一致性原子可能不一致
依赖LVM/btrfs无
保留成本写时复制省空间全量拷贝

记忆:快照解决「一致性 + 秒级创建」——备份前先快照、再从容拷贝,绝不在热数据上直接 tar。


6. 数据库备份:mysqldump 与一致性

数据库备份要保证「一致性」——mysqldump 需锁表或事务快照:

# MySQL 逻辑备份(单事务快照,InnoDB 不锁表)
mysqldump --single-transaction --routines --triggers \
    -u backup -p mydb > mydb_$(date +%F).sql

# 压缩 + 时间戳
mysqldump --single-transaction mydb | gzip > mydb_$(date +%F).sql.gz

# 恢复
gunzip < mydb_2026-09-28.sql.gz | mysql -u root mydb

# PostgreSQL(pg_dump 一致性快照)
pg_dump -h db -U postgres mydb > mydb_$(date +%F).dump
pg_restore -d mydb mydb_$(date +%F).dump

数据库备份策略:

逻辑备份(dump):小库每日
物理备份(快照/二进制):大库 + 一致性
binlog/PITR:任意时间点恢复
备份后验证:导入临时库抽查行数

铁律:数据库备份后必须「试恢复」——dump 文件损坏/缺库的情况,只有恢复演练能发现。


7. 异地同步与云对象存储

异地容灾:备份必须出本机:

# rsync 到异地备份机
rsync -avz --delete /backup/ backup@offsite:/backup/

# 同步到云对象存储(rclone 支持 S3/OSS/COS)
rclone sync /backup/ s3:bucket/backup --s3-acl private

# 或 AWS CLI 同步
aws s3 sync /backup/ s3://bucket/backup --storage-class STANDARD_IA

对象存储备份的收益:

特性说明
异地跨地域冗余
版本化防误删(开启 versioning)
生命周期自动降冷归档
成本按量付费

异地策略分层:

同机备份(快):快速恢复
异地备份(稳):防机房故障
云对象存储(归档):长期保留 + 勒索防护(不可变存储)

记忆:异地备份是 3-2-1 原则的「1」——本机、异地、云归档三层,覆盖从误删到机房级故障。


8. 备份加密与自动化

敏感数据备份必须加密(防介质丢失泄密/勒索):

# 用 gpg 加密
gpg --encrypt --recipient backup@corp.com backup.tar.gz

# 或 tar + 加密流(openssl)
tar -czf - /data | openssl enc -aes-256-cbc -salt -pbkdf2 \
    -k "$BACKUP_KEY" > backup.tar.gz.enc

自动化:cron / systemd timer(见 /linux-systemd-services/):

# 每日凌晨 1 点备份 + 通知
0 1 * * *  /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

backup.sh 骨架:

#!/bin/bash
set -e
TS=$(date +%F)
# 1. 快照
lvcreate -s -n snap_$TS /dev/vg0/data
# 2. 拷贝
mount /dev/vg0/snap_$TS /mnt/snap && rsync -a /mnt/snap/ /backup/data/
# 3. 清理
umount /mnt/snap; lvremove -f /dev/vg0/snap_$TS
# 4. 异地同步
rsync -az /backup/ offsite:/backup/
# 5. 校验 + 通知
echo "backup ok $(date)" >> /var/log/backup.log

记忆:备份自动化 = 快照 + 拷贝 + 清理 + 异地 + 通知——脚本要幂等、留日志、失败能告警。


9. 恢复演练:验证备份真的可用

没验证过的备份 = 没有备份——恢复演练是备份的验收测试:

演练目标:
  1. 能否从备份恢复数据?
  2. 恢复耗时多久(RTO 实测)?
  3. 恢复后的数据是否一致(RPO 达标)?

演练清单:

# 1. 文件恢复验证
tar -tzf backup.tar.gz | wc -l          # 条目数合理?
rsync -n -av /backup/ /test/            # 试运行(--dry-run)

# 2. 数据库恢复验证
gunzip < mydb.sql.gz | mysql -u root testdb
mysql -e "SELECT COUNT(*) FROM testdb.orders;"   # 抽查关键表

# 3. 异机演练
# 在另一台机器上完整恢复 → 确认业务能起来

# 4. 记录结果
echo "$(date) 恢复演练通过:耗时 23min,数据一致" >> /var/log/backup.log

演练频率建议:

备份类型演练频率
日常文件备份每月抽查
数据库备份每季度完整恢复
容灾异地每年全链路演练

铁律:RPO/RTO 是「演练出来的」不是「规划出来的」——没在真实恢复中量过的指标都是拍脑袋。


10. 速查表

需求做法
策略3-2-1:3 份、2 介质、1 异地
增量同步rsync -avz --delete
归档tar -czf / tar -tzf 校验
秒级快照lvcreate -s / btrfs sub snapshot
数据库mysqldump –single-transaction
异地rsync offsite / rclone S3
加密gpg / openssl enc
自动化cron + backup.sh + 通知
校验tar -t、恢复抽查、异机演练
瘦身生命周期降冷、定期清理旧备份

一句话记忆:备份按 3-2-1 设计、RPO/RTO 定频率;rsync 干增量、tar 干归档、快照干一致性、dump 干数据库;本机+异地+云三层防一切故障;敏感数据加密、cron 自动化;最后恢复演练是验收**——测过的备份才算数。**


延伸阅读

  • /linux-filesystem-disk/ — LVM/RAID 与磁盘
  • /linux-systemd-services/ — Timer 定时自动化
  • /linux-journald-logging/ — 备份日志与审计
  • [[infra]] — 云对象存储与容灾
  • [[database]] — 数据库备份与复制

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「linux」更多文章

  1. Linux 高级文件系统:XFS、Btrfs、ZFS 与存储进阶
  2. Linux 高可用与负载均衡:HAProxy、Keepalived 与集群方案
  3. Linux 防火墙与 nftables:规则集、链、NAT 与网络安全防护