rsync复制文件的一些注意事项 - tlanyan
source link: https://tlanyan.me/rsync-copy-files-mentions/?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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
文件夹内 - 第四种写法:同第二种写法,将
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登录。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK