rsync介绍
rsync
是 Andrew Tridgell 和 Paul Mackerras 开发的远程同步文件工具,可以通过 LAN/WAN 快速在多台主机之间同步文件。rsync
使用智能算法有效计算源文件和目标文件的不同,实际传输时只传输差异部分,此外还可以使用压缩算法压缩数据,因此同步速度相当快。本站之前的文章 WordPress备份方案和备份脚本 便是使用 rsync
跨机器备份程序文件和数据库。
尽管 rsync
比 ftp
、scp
等工具更强大,传输效果更高,实际使用中仍有一些注意事项,本文分别做介绍。
rsync复制文件的一些注意事项
安装rsync
某些精简版的系统没有默认安装rsync
,则需要手动安装:
yum install -y rsync
需要注意的是,同步的两台主机必须都安装rsync
才能正常工作,而不是常规思维认为的只在执行命令的主机上安装就好了。
rsync常用参数
rsync
的基本语法是:
rsync [option] src dest
其中 src
和 dest
既可以是本机的文件或目录,也可以是远程主机的资源。
网络同步(备份)本来就是一个复杂的事情,因此rsync的选项参数非常多,新手通过man命令看到几页参数可能一脸懵逼,不知如何下手好。其实平常使用的参数主要是以下几个:
-a
:归档模式,几乎是必用的参数,等同于-rlptgoD
-v
:详细输出模式,比较常用,与之相反的参数是-q,表示不输出信息-P
:保持传输时的文件部分,以便增量同步,同时输出传输进度,等同于--partial --progress
。这个参数能看到每个文件的传输进度,推荐使用-z
:压缩数据后再传输,在 1mbps带宽 等小水管情形下比较有用--exclude
:排除同步的文件,例如 –-exclude=.svn
。如果需要排除的文件比较多,可以写成文件然后用–exclude-from参数--delete
:删除dest中有而src没有的文件,其变种是--delete-before
和--delete-after
,指定同步前删除还是同步完成后删除--bwlimit
:限制最大同步带宽,单位是KB/s,1mbps是128KB/s。一些vps商家整理 介绍的个别国内商家,如果给的带宽是20m,超过这个带宽时间稍长就会中断数据传输一段时间,此时可以用这个参数避免断流。这个参数实际中很少用。
绝大多数情形下,-avP
参数就足够,其他参数尽在需要时才指定。
更多参数请使用 man rsync
查看官方文档获取。
rsync尾部斜杆
rsync
让许多人搞混,也是容易感到困惑的一个事情是:src
和 dest
结尾加斜杆有什么影响?例如以下几种情形,分别有什么不同?
rsync -avP src dest rsync -avP src/ dest rsync -avP src dest/ rsync -avP src/ dest/
对rsync来说,有无尾部斜杆说起来区别挺大,其决定了目标文件的目录结构。如果你只在乎数据同步好,不在乎多一层文件夹,那么区别也不大。
具体来说,上面四种写法区别是:
- 如果src是文件,同步为名为dest的文件;如果src是目录(文件夹),同步结束后src出现在dest文件夹内
- 将src中的文件同步到dest文件夹内
- 不管src是文件还是目录,同步到dest文件夹内
- 同2,将src中的文件同步到dest文件夹内
总结便是:
- dest后的斜杆仅在src为文件才有影响,有斜杆表示dest是目录
- src有无斜杆决定是将整个文件(夹)复制到dest中,还是将src中的文件复制到dest中。例如有文件夹a,
rsync -avP a b
,同步结束后a出现在文件夹b中(b不存在则创建);如果是rsync -avP a/ b
,那么a中的文件会出现在文件夹b中,但b中没有a文件夹。
此外还需要注意的是,加斜杆就可以了,不要加*,否则会导致--delete
等参数不起作用。例如 rsync -avP --delete a/* b
能将a中的文件同步到b中,但a中删除文件后,再运行这个命令不会删除b中的文件。
远程主机使用非标准端口
rsync
默认通过 ssh
协议与远程主机进行通讯。如果远程主机ssh不是监听默认的22端口,那么需要额外设置。
尽管rsync有-p和-P两个选项,但都不是用来指示远程主机的ssh端口
一种方式是配置~/.ssh/config文件,指定远程ssh端口:
Host 远程IP Port 远程ssh端口
另一种方法是使用-e选项:rsync -avP -e"ssh -p 远程ssh端口" src dest
。
对于经常使用的主机。建议使用第一种方式,方便平时ssh登录。