跳转至

18- 备份与恢复(rsync、tar、borgbackup、restic) 💾

前提条件 ✅

  • 已完成 LVM 逻辑卷、NFS/Samba 共享配置(/data 目录可用于存放备份)
  • 以 ops 用户登录(具有 sudo 权限)
  • 系统运行在 Debian 12 Bookworm
  • 虚拟机环境:VMware Workstation Pro(建议有额外磁盘或 NFS 共享作为备份目标)
  • 防火墙已放行相应端口(如 NFS/Samba 共享访问)

详细步骤 🛠️

  1. 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)/

  1. 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 /

  1. 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

  1. 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

  1. 备份策略推荐(3-2-1 原则)
  2. 3 份拷贝:生产 + 本地备份 + 异地备份
  3. 2 种介质:磁盘 + 云(如 Backblaze B2、S3)
  4. 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/

实践任务 🎯

  1. 用 rsync 每天备份 /data 到 /backup/daily-$(date +%Y%m%d) 并加入 cron
  2. 初始化一个 borgbackup 仓库,对 /data 进行一次完整备份,查看 borg list 输出
  3. 模拟删除 /data 中部分文件,用 borg extract 恢复指定快照
  4. 安装 restic,创建一个本地仓库并备份 /data,尝试 restore latest 测试恢复

自测问题 ❓

  1. rsync 的 --delete 选项有什么风险?如何安全使用?
  2. borgbackup 和 restic 相比传统 tar/rsync 的核心优势是什么?
  3. 3-2-1 备份规则中的“1 份离线”指的是什么?为什么重要?
  4. 如何在 borgbackup 中设置自动清理旧备份,只保留最近 7 天每日 + 4 周每周 + 6 个月每月?

总结 📌

可靠备份是运维的最后防线。
rsync 适合简单同步,borgbackup/restic 提供去重、加密、版本控制,是生产级增量备份首选。
结合 LVM 快照 + 加密备份 + 异地副本 + 定期恢复测试,形成完整灾难恢复能力。