1.10.2 备份工具与实现(tar/rsync/cron)

本节聚焦常用备份工具 tar / rsync / cron 的组合实现,构建可落地的自动化备份方案,包含安装、示例、排错与练习,并给出原理草图与关键命令解释。

原理草图(备份链路与调度):

文章图片

一、工具安装与基础校验
- tar/cron 一般随系统自带;rsync 可能需要安装。
- 安装命令:

# RHEL/CentOS
sudo yum -y install rsync cronie
# Debian/Ubuntu
sudo apt-get update && sudo apt-get -y install rsync cron
  • 校验:
tar --version
rsync --version
systemctl status crond || systemctl status cron

二、tar:本地全量归档与校验
1)全量备份(含权限与扩展属性)

# 备份 /etc 到 /backup,并保留权限/ACL/扩展属性
sudo mkdir -p /backup
sudo tar -czpf /backup/etc-$(date +%F).tar.gz \
  --acls --xattrs /etc

参数解释:
- -c 创建归档,-z gzip 压缩,-p 保留权限,-f 指定文件
- --acls --xattrs 保留 ACL 与扩展属性(含 SELinux 上下文)

2)排除规则与验证

# 排除日志与临时目录
sudo tar -czpf /backup/root-$(date +%F).tar.gz \
  --exclude=/var/log --exclude=/tmp /
# 查看归档内容
tar -tzf /backup/root-$(date +%F).tar.gz | head
# 生成校验
sha256sum /backup/root-$(date +%F).tar.gz > /backup/root-$(date +%F).tar.gz.sha256

三、rsync:增量同步与远程备份
1)本地增量同步

# 将 /data 增量同步到 /backup/data(删除目标多余文件)
sudo rsync -aH --delete /data/ /backup/data/

参数解释:
- -a 归档模式(保权限/时间/递归),-H 保留硬链接
- --delete 目标端删除源端已删除的文件

2)远程同步(SSH)

# 备份到远端服务器
sudo rsync -aH -e "ssh -p 22" /data/ backup@10.0.0.10:/backup/data/

3)硬链接快照(节省空间)

# 目录规划
# /backup/snapshots/2024-01-01 (全量)
# /backup/snapshots/2024-01-02 (增量硬链接)
sudo rsync -aH --delete \
  --link-dest=/backup/snapshots/2024-01-01 \
  /data/ /backup/snapshots/2024-01-02/

四、cron:定时调度与日志
1)编写备份脚本

sudo tee /usr/local/bin/backup.sh >/dev/null <<'EOF'
#!/bin/bash
set -euo pipefail

BACKUP_DIR="/backup"
DATE=$(date +%F)
LOG="/var/log/backup.log"

mkdir -p "$BACKUP_DIR"

# 1) tar 全量备份 /etc
tar -czpf "$BACKUP_DIR/etc-$DATE.tar.gz" --acls --xattrs /etc

# 2) rsync 增量备份 /data
rsync -aH --delete /data/ "$BACKUP_DIR/data/"

# 3) 校验 tar
sha256sum "$BACKUP_DIR/etc-$DATE.tar.gz" > "$BACKUP_DIR/etc-$DATE.tar.gz.sha256"

echo "$(date '+%F %T') backup success" >> "$LOG"
EOF

sudo chmod +x /usr/local/bin/backup.sh

2)配置定时任务

# 每天 02:00 执行
sudo bash -c 'echo "0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.cron.log 2>&1" > /etc/cron.d/backup'
sudo systemctl restart crond || sudo systemctl restart cron

五、常见排错与定位
1)tar 备份失败:权限不足

# 现象:tar: Permission denied
# 解决:使用 sudo 或排除无权限目录
sudo tar -czpf /backup/root-$(date +%F).tar.gz --exclude=/proc --exclude=/sys /

2)rsync 删除过多文件

# 误删除风险:--delete 会同步删除目标端文件
# 建议先 dry-run
rsync -aH --delete --dry-run /data/ /backup/data/

3)cron 不执行

# 检查服务与日志
systemctl status crond || systemctl status cron
grep CRON /var/log/cron /var/log/syslog
# 检查脚本路径与权限
ls -l /usr/local/bin/backup.sh

六、练习
1)编写脚本,实现“每周日全量 tar、每日 rsync 增量”,并输出日志到 /var/log/backup.log。
2)使用 --link-dest 生成三天快照并统计磁盘占用差异。
3)模拟恢复:从最新 tar 中解压 /etc/hosts 到 /tmp/restore 并验证内容。

mkdir -p /tmp/restore
tar -xzpf /backup/etc-$(date +%F).tar.gz -C /tmp/restore etc/hosts
cat /tmp/restore/etc/hosts