rsync是linux下实现目录同步和增量备份的首选工具,其核心优势在于高效传输、元数据保留、网络优化和部分断点续传能力;2. 基本命令为rsync -avz --delete source/ destination/,其中-a保留文件属性,-v显示过程,-z启用压缩,--delete保持目标与源完全一致;3. 源目录末尾斜杠至关重要,带斜杠复制内容,不带则复制目录本身;4. 使用--delete前应先用--dry-run模拟,避免误删;5. 对正在写入的文件同步时需谨慎,建议结合lvm快照保证一致性;6. 可通过--exclude、--include进行文件过滤,顺序影响匹配结果;7. --link-dest实现硬链接式增量备份,节省空间并保留完整快照;8. -p支持传输进度显示与断点续传,--bwlimit可限制带宽;9. 自动化备份应结合cron定时执行,并将输出重定向至日志文件;10. 编写脚本可实现服务启停、错误处理和通知机制,提升备份可靠性;11. 使用logrotate管理日志文件,定期检查日志确保备份正常运行且可恢复。

说起Linux下的目录同步和增量备份,我脑子里第一个跳出来的,几乎都是rsync。它就是那个你每次想起来,都觉得“嗯,就它了”的工具。简单来说,rsync能高效地同步本地或远程目录内容,而且它天生就是为“增量”而生的,只会传输那些有变化的部分,极大节省时间和带宽。
要实现Linux目录内容的同步和增量备份,rsync是你的不二之选。核心命令其实并不复杂,但里面的门道,尤其是一些参数的组合和使用场景,才是真正需要掌握的。
最常用的基础命令是这样的:
rsync -avz --delete /path/to/source/ /path/to/destination/
-a
-r
-l
-p
-t
-g
-o
-D
-v
-z
--delete
举例来说:
本地目录同步: 假设你想把
/home/user/documents
/mnt/backup/docs
rsync -avz --delete /home/user/documents/ /mnt/backup/docs/
远程目录备份(推送到远程): 你想把本地的
/var/www/html
backup_server
/data/web_backups
rsync -avz --delete /var/www/html/ user@backup_server:/data/web_backups/
远程目录备份(从远程拉取): 你想把远程服务器
data_server
/data/logs
/var/log/remote_logs
rsync -avz --delete user@data_server:/data/logs/ /var/log/remote_logs/
记住,源目录后的斜杠
/
rsync在增量备份场景下,简直是神一样的存在。它的“增量”并非简单地跳过已存在文件,而是更智能地只传输文件变化的部分(delta transfer)。这意味着如果一个大文件只有几行内容变了,它不会重新传输整个文件,只传输那几行变化的数据。
核心优势:
-a
-z
注意事项和常见陷阱:
/
rsync source/ dest/
source
dest
rsync source dest/
source
dest
dest/source/
--delete
--backup
--link-dest
--delete
--delete
--dry-run
--link-dest
掌握了基础,我们来看看rsync更深层的一些用法,它们能让你的备份策略更灵活、更安全。
-p
--partial --progress
--partial
--progress
rsync -avzP source/ dest/
--dry-run
-n
--delete
--dry-run
rsync -avz --delete --dry-run source/ dest/
--exclude
--include
.log
--exclude '*.log'
temp
--exclude 'temp/'
--exclude-from=exclude_list.txt
--include
--exclude
--include
--exclude
--link-dest=DIR
rsync -av --link-dest=/mnt/backup/daily.6/ /path/to/source/ /mnt/backup/daily.7/
daily.6
daily.5
--bwlimit=KBPS
rsync -avz --bwlimit=1000 source/ dest/
手动执行rsync命令对于偶尔的同步可能没问题,但对于日常的增量备份,自动化是必须的。Cron是Linux下最常见的定时任务工具,结合rsync和一些简单的脚本,就能搭建起一套可靠的自动化备份系统。
1. 使用Cron定时执行rsync:
打开你的用户cron表:
crontab -e
0 3 * * * /usr/bin/rsync -avz --delete /path/to/source/ /path/to/destination/ >> /var/log/rsync_backup.log 2>&1
0 3 * * *
>> /var/log/rsync_backup.log 2>&1
2. 编写更健壮的备份脚本:
对于更复杂的备份需求,比如需要备份前停止服务、备份后启动服务,或者根据日期生成不同的备份目录,直接在cron里写就显得不够灵活了。这时,你可以把rsync命令封装到一个shell脚本里。
创建一个文件,比如
/usr/local/bin/daily_backup.sh
#!/bin/bash
SOURCE_DIR="/path/to/source/"
DEST_DIR="/mnt/backup/daily/"
LOG_FILE="/var/log/rsync_daily_backup_$(date +\%Y\%m\%d).log"
echo "--- Backup started at $(date) ---" >> "$LOG_FILE"
# 假设需要备份前停止服务
# systemctl stop your_service_name >> "$LOG_FILE" 2>&1
/usr/bin/rsync -avz --delete "$SOURCE_DIR" "$DEST_DIR" >> "$LOG_FILE" 2>&1
RSYNC_EXIT_CODE=$?
if [ $RSYNC_EXIT_CODE -eq 0 ]; then
echo "Backup completed successfully." >> "$LOG_FILE"
elif [ $RSYNC_EXIT_CODE -eq 24 ]; then
echo "Backup completed with some files not found (e.g., deleted during sync), check logs." >> "$LOG_FILE"
else
echo "Backup failed with error code: $RSYNC_EXIT_CODE. Please check logs." >> "$LOG_FILE"
# 这里可以添加发送邮件或短信通知的逻辑
# mail -s "Rsync Backup Failed!" your_email@example.com < "$LOG_FILE"
fi
# 假设备份后启动服务
# systemctl start your_service_name >> "$LOG_FILE" 2>&1
echo "--- Backup finished at $(date) ---" >> "$LOG_FILE"给脚本执行权限:
chmod +x /usr/local/bin/daily_backup.sh
0 3 * * * /usr/local/bin/daily_backup.sh
3. 日志管理:
自动化备份最怕的就是“静默失败”。你以为它在跑,结果根本没成功。所以,日志是你的眼睛。
日志重定向: 如上面所示,将rsync的输出重定向到文件。
日志轮转: 随着时间推移,日志文件会越来越大。你可以使用
logrotate
logrotate
/etc/logrotate.d/rsync_backup
/var/log/rsync_daily_backup_*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root root
}这个配置会让
rsync_daily_backup_
定期检查日志: 即使有了自动化和日志,定期(比如每周)抽查一下日志文件,确认备份确实在正常运行,并且没有异常错误,这仍然是一个好习惯。毕竟,备份的最终目的是为了恢复,而一个从来没有验证过、或长期未检查的备份,在真正需要时,可能会给你一个“惊喜”。
以上就是如何同步Linux目录内容 rsync增量备份实战技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号