rsync 也可以用来本地备份文件和目录

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 验证备份配置。

原文链接:,转发请注明来源!