Linux rsync 文件同步教程:增量备份与常见注意事项
前言
在 Linux 服务器上备份网站文件、迁移数据或者同步两个目录时,除了使用 cp、scp,还可以使用 rsync。
rsync 比较方便的地方在于,它可以识别源目录与目标目录之间的差异,后续同步通常不需要重新传输所有文件。特别是通过 SSH 在两台服务器之间传输数据时,可以减少不必要的流量。
下面介绍几个常用命令,以及实际使用中容易忽略的细节。
一、安装 rsync
Ubuntu、Debian 可以使用 APT 安装:
sudo apt update
sudo apt install rsync
检查版本:
rsync --version
如果需要通过 SSH 在两台服务器之间使用 rsync,一般需要两端都安装 rsync,并确保 SSH 可以正常连接。
二、本地目录同步
假设要把 /opt/app/ 目录中的文件备份到 /backup/app/:
rsync -avh /opt/app/ /backup/app/
常见参数含义:
-a:归档模式,递归复制并尽可能保留权限、时间戳等文件属性。-v:显示较详细的执行信息。-h:以比较容易阅读的形式显示文件大小。
第一次运行时,需要传输的文件可能比较多。再次运行时,rsync 通常会根据文件大小和修改时间判断哪些文件需要更新。
需要注意,默认情况下 rsync 并不是对每个文件都计算完整内容哈希进行比较。
三、源目录最后的斜杠很重要
这是 rsync 比较容易踩坑的地方。
下面两条命令看起来很像,但结果不同。
rsync -av /opt/app/ /backup/
这条命令把 app 目录内的内容同步到 /backup/。
而:
rsync -av /opt/app /backup/
这条命令会把 app 目录本身同步到 /backup/,结果通常是 /backup/app/。
简单来说,源目录末尾的 / 表示同步该目录里的内容,而不是把目录这一层也复制进去。
同步重要文件前,最好先确认目录结构是否符合预期。
四、通过 SSH 同步到另一台服务器
rsync 也可以通过 SSH 传输文件。
例如:
rsync -avh /opt/app/ user@192.0.2.10:/backup/app/
其中:
user是远程服务器的用户名。192.0.2.10是示例服务器地址,使用时替换成真实 IP。/backup/app/是远程目标目录。
如果 SSH 不是默认的 22 端口,例如使用 2222,可以指定:
rsync -avh -e "ssh -p 2222" /opt/app/ user@192.0.2.10:/backup/app/
这里的 -e 用来指定远程 Shell 命令。
由于 rsync 通过 SSH 连接,因此也可以使用已经配置好的 SSH 密钥认证,不一定每次都输入服务器账户密码。
五、正式同步前先预览
如果不确定同步操作会修改哪些文件,可以加上 --dry-run:
rsync -avhn /opt/app/ /backup/app/
其中 -n 就是 --dry-run,表示模拟执行,不实际修改目标文件。
建议在首次同步大量数据、修改同步规则,或者使用删除参数前先运行一次,确认输出符合预期。
六、–delete 参数需要特别小心
默认情况下,rsync 会复制新增和发生变化的文件,但不会自动删除目标目录中多出来的文件。
如果想让目标目录与源目录保持一致,可以使用:
rsync -avh --delete /opt/app/ /backup/app/
这会删除目标同步范围内那些源目录已经不存在的文件。
例如,源目录中删除了一个旧配置文件,执行带 --delete 的同步后,目标目录中的对应文件也可能被删除。
因此,建议先执行:
rsync -avhn --delete /opt/app/ /backup/app/
检查模拟结果中准备删除的文件,再决定是否执行真正的同步。
尤其需要注意源目录和目标目录的填写顺序,不要弄反。
七、排除不需要同步的文件
有时不需要备份日志、缓存或临时文件,可以使用 --exclude。
例如:
rsync -avh --exclude='*.log' /opt/app/ /backup/app/
这样会排除匹配 *.log 的文件。
如果需要排除多个目录或文件,可以添加多个 --exclude 参数。
实际配置排除规则时,建议先使用 --dry-run 检查,避免漏掉需要备份的数据。
八、rsync 不等于完整的数据备份方案
虽然 rsync 很方便,但也有使用边界。
例如,直接同步正在运行中的数据库数据目录,可能复制到不一致的文件状态。数据库通常需要使用自身提供的备份工具,或者配合一致性快照。
另外,如果备份目标一直与源目录同步,并且使用 --delete,源目录误删的文件也可能在下一次同步时从备份中消失。
所以对于重要数据,建议保留独立的历史备份或快照,而不是只有一份实时同步副本。
总结
rsync 常用命令并不复杂,日常记住下面几种操作即可:
# 本地目录同步
rsync -avh /opt/app/ /backup/app/
# 预览同步
rsync -avhn /opt/app/ /backup/app/
# 通过 SSH 同步
rsync -avh /opt/app/ user@192.0.2.10:/backup/app/
# 预览删除操作
rsync -avhn --delete /opt/app/ /backup/app/
使用 rsync 时最重要的是确认源目录、目标目录、末尾斜杠以及是否启用了删除参数。
养成先预览、再执行的习惯,可以避免不少文件同步方面的误操作。
- 点赞
- 收藏
- 关注作者
评论(0)