13

rsync复制文件的一些注意事项 - tlanyan

 3 years ago
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 跨机器备份程序文件和数据库。

尽管 rsyncftpscp 等工具更强大,传输效果更高,实际使用中仍有一些注意事项,本文分别做介绍。

rsync复制文件的一些注意事项

安装rsync

某些精简版的系统没有默认安装rsync,则需要手动安装:

yum install -y rsync

需要注意的是,同步的两台主机必须都安装rsync才能正常工作,而不是常规思维认为的只在执行命令的主机上安装就好了。

rsync常用参数

rsync 的基本语法是:

rsync [option] src dest

其中 srcdest 既可以是本机的文件或目录,也可以是远程主机的资源。

网络同步(备份)本来就是一个复杂的事情,因此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 让许多人搞混,也是容易感到困惑的一个事情是:srcdest 结尾加斜杆有什么影响?例如以下几种情形,分别有什么不同?

rsync -avP src dest
rsync -avP src/ dest
rsync -avP src dest/
rsync -avP src/ dest/

rsync来说,有无尾部斜杆说起来区别挺大,其决定了目标文件的目录结构。如果你只在乎数据同步好,不在乎多一层文件夹,也不用太关心这个事。

具体来说,上面四种写法区别是:

  1. 第一种写法:如果src是文件,则同步到名为dest的文件;如果src是目录(文件夹),同步结束后src出现在dest文件夹内
  2. 第二种写法:将src中的文件同步到dest文件夹内
  3. 第三种写法:不管src是文件还是目录,同步到dest文件夹内
  4. 第四种写法:同第二种写法,将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登录。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK