rsync远程同步备份数据(ssh方式)

前两天,我检查了一下部门的测试数据及文件的备份情况,看到crontab中有个rsync的脚本,我仔细一看,手动执行一下其实早就不能正常工作了,主要是由于rsync那里不能自动进行(需要输入ssh登录的root密码)。看了一下,1年多都没有备份了,⊙﹏⊙b汗,迅速fix此问题。然后顺便了解了一下rsync远程备份的东西,写篇博客记录一下吧。

我常用的备份数据的方法:
对于一般的脚本或者文档,我一般采用git repository的方式进行管理和备份,对于很多比较庞大的测试数据和程序,我采用一般专门的server来做备份,主要是通过rsync的方式进行每天的备份。

rsync远程同步的两种模式:
rsync连接远程主机进行同步或备份时有两种途径:使用远程shell程序(如ssh或rsh)进行连接,或使用TCP直接连接rsync daemon。

我是使用了一下rsync的ssh方式连接进行同步的。
当源路径或目的路径的主机名后面包含一个冒号分隔符时,rsync使用远程shell传输;当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时,rsync使用TCP直接连接rsync daemon。
特别的,如果只指定了源路径,而没有指定目的路径,rsync将会显示源路径中的文件列表,类似于使用命令ls -l。rsync把本地端看作client,把远程端当成server。

本人目前常用的rsync远程同步命令如下:
rsync vmm-qa.smilejay.cn:/home/ /share/home/ -avz –delete
--delete 从目的目录中删除不必要的文件(在server端没有的文件)
-a相当于 -rlptgoD ,所以这个 -a 是最常用的参数了。
当上面的命令在client端进行同步时,在server端,可以看到如下进程:
[root@myserver ~]# ps -ef | grep rsync | grep -v grep
root      7502  7500 66 21:36 ?        00:00:04 rsync --server --sender -vlogDtprz . /home/

rsync vgt.smilejay.cn:/etc/ /share/temp/ -avz -F --exclude yum
-F --exclude abc  #同步时,排除abc这个文件或目录

关于rsync命令的一些选项意义如下:
[root@linux ~]# rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path]
参数:
-v :观察模式,可以列出更多的资讯;
-q :与 -v  相反,安静模式,输出的资讯比较少;
-r :递回复制!可以针对"目录"来处理!很重要!
-u :仅更新 (update),不会覆盖目标的新档案;
-l :复制连结档的属性,而非连结的目标原始档案内容;
-p :复制时,连同属性 (permission) 也保存不变!
-g :保存原始档案的拥有群组;
-o :保存原始档案的拥有人;
-D :保存原始档案的装置属性 (device)
-t :保存原始档案的时间参数;
-I :忽略更新时间 (mtime) 的属性,档案比对上会比较快速;
-z :加上压缩的参数!
-e :使用的通道协定,例如使用 ssh 通道,则 -e ssh
-a :相当于 -rlptgoD ,所以这个 -a 是最常用的参数了!
更多说明请参考 man rsync!

rsync shell模式同步不需要密码的方法:
由于它其实是走的ssh方式,所以按照ssh那样来配置key即可实现rsync不需密码。
我曾经写过一篇博客,关于ssh免密码的配置:

我还遇到一个问题,就是我的key也弄好了,但是就是不行(还是需要手动输入密码)。
后来发现其实是sshd禁止了root用户的ssh远程登录,检查Server端的/etc/ssh/sshd.conf文件,将其其中一项改为:
PermitRootLogin yes
然后可以ssh自动登录了,才能实现rsync免密码同步。

关于rsync的shell模式和daemon模式的参考资料:
http://share.blog.51cto.com/278008/560742
http://share.blog.51cto.com/278008/567578

master

Stay hungry, stay foolish.

One Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注

*