Rsync 本地备份终极指南
Rsync 是 Linux 系统中最强大、最高效的本地备份工具,以下是专业级备份方案和最佳实践:
核心备份命令(推荐)
rsync -aHAXv --progress --delete --backup --backup-dir=../backup-$(date +%Y%m%d) \
--exclude='*.tmp' --exclude='.cache/' \
/源目录/ /目标目录/
参数解析表
参数 | 作用 | 必要性 |
-a | 归档模式(保留权限、时间等) | 必须 |
-H | 保留硬链接 | 重要 |
-A | 保留ACL权限 | 重要 |
-X | 保留SELinux上下文 | 重要 |
-v | 显示详细进度 | 可选 |
--progress | 实时传输进度 | 可选 |
--delete | 删除目标多余文件 | 必须 |
--backup | 启用备份功能 | 可选 |
--backup-dir | 指定备份目录 | 可选 |
--exclude | 排除文件/目录 | 可选 |
三种备份策略
1. 基础镜像备份(快速同步)
rsync -a --delete /源目录/ /备份目录/
2. 增量时间机器(保留历史版本)
# 创建当日备份目录
BACKUP_DIR="/备份根目录/$(date +%Y%m%d)"
# 使用硬链接节省空间
rsync -a --link-dest=/最新备份路径/ /源目录/ "$BACKUP_DIR"
# 更新最新备份指针
ln -snf "$BACKUP_DIR" /最新备份路径
3. 加密备份(敏感数据)
# 创建加密容器
dd if=/dev/zero of=backup.img bs=1G count=100
mkfs.ext4 backup.img
# 挂载并备份
sudo mount -o loop backup.img /mnt/encrypted
rsync -a /源目录/ /mnt/encrypted/
sudo umount /mnt/encrypted
高级备份技巧
1. 性能优化
rsync -a --no-whole-file --inplace --partial \
--bwlimit=50M \# 限速50MB/s
--max-size=10G \# 跳过>10G文件
/源目录/ /备份目录/
2. 排除模式文件
创建 exclude.list:
# 忽略临时文件
*.tmp
*.swp
# 忽略缓存目录
.cache/
.thumbnails/
# 忽略大文件
/videos/4k/
/backups/
使用:rsync -a --exclude-from='exclude.list' ...
3. 备份验证与完整性检查
# 生成校验和
find /源目录 -type f -exec sha256sum {} + > source_checksums.txt
# 同步后验证
rsync -n -i -a /源目录/ /备份目录/ | grep '>'
# 目标端校验
cd /备份目录 && sha256sum -c source_checksums.txt
自动化备份方案
1. 系统级定时备份(root权限)
sudo crontab -e
添加:
# 每天凌晨3点全量备份
0 3 * * * rsync -a --delete /home /备份目录/daily/
# 每周日2点保留周备份
0 2 * * 0 rsync -a --link-dest=/备份目录/daily/ /home /备份目录/weekly/$(date +\%Y\%m\%d)
2. 用户级备份脚本
创建 ~/bin/backup.sh:
#!/bin/bash
LOG_FILE="/var/log/rsync_backup.log"
SOURCE="$HOME"
DEST="/mnt/backup/home_$(hostname)"
{
echo "==== 备份开始: $(date) ===="
rsync -aHAXv --delete "$SOURCE/" "$DEST/"
echo "==== 备份完成: $(date) ===="
echo "已用空间: $(du -sh "$DEST")"
} >> "$LOG_FILE" 2>&1
设为可执行:chmod +x ~/bin/backup.sh
常见问题解决方案
1. 权限问题
sudo rsync -a --rsync-path="sudo rsync" \
--chown=USER:GROUP \
/源目录/ user@host:/目标目录/
2. 断点续传
# 部分传输恢复
rsync --partial --progress /源目录/ /备份目录/
# 大文件专用
rsync --append /中断文件 /备份位置
3. 空间不足预防
# 检查空间
SOURCE_SIZE=$(du -s /源目录 | awk '{print $1}')
DEST_SPACE=$(df -P /备份目录 | awk 'END{print $4}')
if [ "$SOURCE_SIZE" -gt "$DEST_SPACE" ]; then
echo "错误:备份空间不足" >&2
exit 1
fi
目录结构示例:
/backups/
├── daily/# 每日镜像
├── weekly/# 周备份
│├── 20240107
│└── 20240114
├── monthly/# 月归档
│└── 202312
└── annual/# 年快照
└── 2023
恢复指南
1. 全量恢复
rsync -a /备份目录/ /恢复位置/
2. 单文件恢复
# 查找文件路径
find /备份目录 -name '目标文件'
# 精确恢复
rsync -aRv --include='*/' --include='目标文件' --exclude='*' \
/备份目录/ /恢复位置/
3. 时间点恢复
rsync -a /备份目录/weekly/20240101/home/user/document.txt \
/home/user/
专业提示:每周测试恢复流程,确保备份有效性!定期执行 rsync --dry-run 验证备份配置。