说到Linux下的数据备份,工具五花八门:tar、scp、dd、甚至直接cp。但是如果你真的想做一个高效、稳定、可增量同步的镜像备份,那么rsync绝对是那个值得你花时间了解的利器。
rsync 是什么?一句话解释:它能把你指定的文件或目录同步到另一个位置——本地或远程,同时只传输有变化的部分。听起来是不是比一股脑儿打包压缩强多了?而且,速度快、占用低、还支持断点续传和权限保留,这就不是普通拷贝能比的了。
假设你有一台运行中的 Linux 服务器,部署了网站、数据库或者其它业务,你想定期将这些内容备份到另一台服务器(或者本地硬盘)。这时 rsync 就派上了用场。
基本命令格式:
先记住这行命令的结构:
rsync [参数] 源路径 目标路径
如果是远程同步,路径前加上用户名和 IP:
rsync [参数] user@host:/path/from /path/to
核心参数解释(记住这些就够用了)
参数作用
-a 归档模式,保留权限、符号链接、时间戳等
-v 显示同步过程(verbose)
-z 传输时压缩,节省带宽
-P 显示进度条,支持断点续传
--delete 删除目标中源路径已不存在的文件
-e ssh 使用 SSH 协议进行远程传输
实战例子:备份服务器整个网站目录
我们以 /var/www 作为源目录,备份到远程服务器的 /backup/webserver1/:
rsync -avzP -e ssh /var/www/ root@192.168.1.100:/backup/webserver1/
解释一下:
-a 保留文件权限等信息
-v 显示过程
-z 启用压缩
-P 显示进度 + 断点续传
-e ssh 通过 ssh 连接远程
/var/www/ 结尾的斜杠表示同步目录下的内容(而不是目录本身)
root@192.168.1.100:/backup/webserver1/ 是目标服务器路径
注意:路径结尾的 / 有讲究,加与不加,含义不同。建议你明确写出来,避免不必要的结构错误。
高阶操作:排除不需要的文件
有时你不希望把日志、临时缓存等无关文件也同步过去,那就加上 --exclude:
rsync -avzP --exclude 'cache/' --exclude '*.log' /var/www/ root@192.168.1.100:/backup/webserver1/
支持多个 --exclude,也可以使用 --exclude-from=filename 从文件读取排除项。
一键脚本化:每天凌晨自动备份
配合 crontab,你可以设置每天凌晨 3 点自动执行备份脚本:
步骤 1:创建备份脚本 /root/rsync_backup.sh
#!/bin/bash
rsync -azP --delete -e ssh /var/www/ root@192.168.1.100:/backup/webserver1/ >> /var/log/rsync.log 2>&1
记得给脚本加执行权限:
chmod +x /root/rsync_backup.sh
步骤 2:编辑计划任务
crontab -e
添加这一行:
0 3 * * * /root/rsync_backup.sh
每天凌晨 3 点执行一次。
虽然rsync会避免重复传输,但如果你希望保留每天完整“快照”,还可以结合 --link-dest 和 cp -al 来实现增量备份目录结构。
别把rsync看成只是比 scp 快一点,它真正强大的地方在于它的“聪明”:差异同步、省带宽、保留结构、增量方式、甚至是整合到自动化运维流程。
如果你 Linux运维初学者,建议你先从手动执行rsync开始,慢慢掌握路径控制、参数搭配,然后再脚本化、计划任务化。最终目标是让你的备份策略既可靠又不繁琐,出了问题能第一时间恢复,而不是到处翻临时压缩包。