rsync那些事儿

1.关于rsync

rsync是remote synchronize的简称,是一款远程同步软件,在项目中多有用到。其采用的rsync算法(酷壳上有一篇介绍rsync核心算法的博文rsync的核心算法)提供了一种比较快速的方法用于客户机和远程文件服务器同步。

rsync的特点是安装和配置都比较方便,然后同步文件时能够保持符号链接,硬链接,权限,文件时间,文件归属等数学。安全性方面则提供了密码、读写权限控制和IP权限控制。

2.rsync安装和配置

由于我用的是ubuntu,已经预装了rsync,所以就不用安装了。我的配置文件是/etc/rsyncd.conf,配置如下,更详细的配置介绍参见rsyncd.config

read only = yes
list = yes
uid = nobody
gid = nogroup

pid file = /var/run/rsyncd.pid
secrets file = /etc/rsyncd.secrets
log file = /var/log/rsync.log

[test]
comment = Welcome
path = /home/ssj/rsynctest
hosts allow = 127.0.0.1 10.211.55.11
auth users = rsynctest

其中read only设置同步目录只读,uid和gid为同步采用的用户和用户组。pid file和log file为pid文件和日志文件存放地址。

test为同步目录,path为同步目录,注意该变量后面加注释如#XXX之类,加了会报chroot错误。另外,hosts allow是限制同步的ip,多个ip空格分隔。auth users和secrets file分别是认证的用户和密码文件。其中secrets file权限必须为600,否则会同步会出错,格式为用户名:密码,这里的用户名不一定是系统用户,可以随便取名,比如我的是rsynctest:testpasswd

3.rsync同步命令

rsync同步有两种模式,一种通过远程shell如ssh进行连接,另外则是通过TCP直接连接rsync服务器。因为使用ssh等同步需要设置ssh对应端口,比较麻烦点,我一般都是采用直接连接rsync服务器这种方式。同步的命令最常见的就是下面这样:

rsync -avz --progress --delete rsync://rsynctest@10.211.55.11/test/ rsynctarget/

其中rsynctest是我同步的用户名,10.211.55.11是我的rsync服务器的ip。运行命令然后输入密码就行了。如果不想每次都输入密码,可以加上参数--password-file=/etc/rsyncd.secrets,其中rsyncd.secrets是你rsync客户端机器上的文件,权限也要600,内容格式跟rsync服务器的不一样,这里只需要密码testpasswd即可。--progress显示同步的进度,--delete则是删除rsynctarget中多余的文件。

这几个选项avz很常用,其中v是verbose,z是压缩,a相当于rlptgoD,其中r是递归同步目录,如果不加-r而是用-d,则只会同步对应的目录,而不会同步目录下面的文件;l同步符号链接,p同步文件保持权限不变,t保持文件时间,g保持文件所属组,o保持文件所属用户,D保持设备文件。一般情况用avz就可以了。另外还有个选项-P也会常用,表示保持部分同步的文件,如果同步中断,可以续传。

另外有个地方要注意下,就是在同步一个子目录的时候,比如我同步rsynctest/testdir这个目录,如果命令是这样rsync -avz rsync://rsynctest@10.211.55.11/test/testdir rsynctarget/,因为testdir后面没有加"/",则同步结果就是rsynctarget目录下面会有一个testdir目录,即rsynctarget/testdir这样。如果命令是````rsync -avz rsync://rsynctest@10.211.55.11/test/testdir/ rsynctarget/```,那结果就是把testdir目录下面的文件全部同步到rsynctarget目录下,rsynctarget目录下面不会有testdir这个目录。

4.实例

为了方便,我建了个目录用来做rsync测试。目录rsynctest中的内容如下:

root@ubuntu:/home/ssj/rsynctest# ls -la
total 20
drwxr-xr-x  3 nobody nogroup 4096 Mar  7 16:33 .
drwxr-xr-x 28 ssj    ssj     4096 Mar  7 16:13 ..
-rw-r--r--  2 nobody nogroup   13 Mar  7 16:32 link.txt
lrwxrwxrwx  1 nobody nogroup   12 Mar  7 15:13 outer.txt -> ../outer.txt
lrwxrwxrwx  1 nobody nogroup    8 Mar  7 14:52 softlink.txt -> test.txt
drwxr-xr-x  2 nobody nogroup 4096 Mar  7 14:51 testdir
-rw-r--r--  2 nobody nogroup   13 Mar  7 16:32 test.txt

其中softlink.txt是test.txt的符号链接,link.txt是test.txt的硬链接,而outer.txt是上一级目录的outer.txt的硬链接。

同步的目标目录rsynctarget的内容如下:

root@ssj-mbp ssj#ls -la rsynctarget/
total 8
drwxr-xr-x   3 65534  65534   102  3  7 17:15 .
drwxr-xr-x@ 94 ssj    staff  3196  3  6 23:38 ..
-rw-r--r--   1 root   65534     7  3  7 17:15 myfile.txt

采用不同的参数,同步的结果会不一样。

1)不用-a参数,也不用-og等,命令如下:

rsync -rpvz --progress --delete rsync://rsynctest@10.211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

由于用了--delete,则原来rsynctarget中的myfile.txt会被删除,由于没有加-l,则符号链接文件outer.txt和softlink.txt没有同步过来。同步后,硬链接test.txt被当做一个新文件了,没有保留硬链接关系,如果要保留,需要加上-H选项。此外,文件所有者也不是原来的nobody:nogroup了,如果需要保留,要加-og参数。该命令同步后,rsynctarget目录内容如下:

root@ubuntu:/home/ssj# ls -la rsynctarget/
total 20
drwxr-xr-x  3 root root 4096 Mar  7 17:31 .
drwxr-xr-x 29 ssj  ssj  4096 Mar  7 17:31 ..
-rw-r--r--  1 root root   13 Mar  7 17:31 link.txt
drwxr-xr-x  2 root root 4096 Mar  7 17:31 testdir
-rw-r--r--  1 root root   13 Mar  7 17:31 test.txt

2)采用-a参数。命令如下:

rsync -avz --progress --delete rsync://rsynctest@10.211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

同步后rsynctarget目录内容如下,可以看到使用-a后,文件所有者都得到保留,软连接也同步过来了,不过硬链接关系没有保留。要保留的话,加上-H。

root@ubuntu:/home/ssj# ls -la rsynctarget/
total 20
drwxr-xr-x  3 nobody nogroup 4096 Mar  7 16:33 .
drwxr-xr-x 29 ssj    ssj     4096 Mar  7 17:31 ..
-rw-r--r--  1 nobody nogroup   13 Mar  7 16:32 link.txt
lrwxrwxrwx  1 nobody nogroup   12 Mar  7 15:13 outer.txt -> ../outer.txt
lrwxrwxrwx  1 nobody nogroup    8 Mar  7 14:52 softlink.txt -> test.txt
drwxr-xr-x  2 nobody nogroup 4096 Mar  7 14:51 testdir
-rw-r--r--  1 nobody nogroup   13 Mar  7 16:32 test.txt

3)另外还有一个重要参数就是-P,注意这个P不是progress的意思,他是partial的意思,就是说同步过程如果出现中断(比如主动停止了同步或者网络问题导致同步中断),如果一个文件没有传完,是否保留这些已经传输的部分就是由-P来控制。这里我在rsynctest目录下面加了一个test.tar.gz文件,大小为2M,而我用bwlimit参数限制传输速度为10K/s以内,这样,中途终止同步,这样可以看到,如果没有加-P参数的时候,rsynctarget没有保存tornado.tar.gz这个文件已经传输的部分的,如果加了-P则会保存已经传输的部分,文件名也是tornado.tar.gz,下次重传会断点续传,即已经同步的部分不会重新传。同步过程中临时文件名是.tornado.tar.gz.qesuQR这样的格式。如果有程序是从同步目录取数据并处理的,最好不要用-P参数,因为如果网络问题会导致文件传了一部分,然后被处理了,这样会影响处理结果。

rsync -avzP --progress --delete --bwlimit=10 rsync://rsynctest@10.211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

5.参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容