小谈rsync

来源:互联网 发布:java如何转换日期格式 编辑:程序博客网 时间:2024/04/30 16:01

转载自:http://servershuji.blog.51cto.com/1283121/580628/

 

今天给大家介绍一下Rsync的使用。 Rsync--Remote Sync(远程同步)是一个具有快速同步文件和传输文件的工具,主要用于快速,安全,高效的数据备份。此工具具有传输新增或更该过的文件的特性,而且支持数据压缩,因此提高了文件传输和同步的速度。配置用于Rsync同步的远程主机,常见的有两种服务实现方式:第一,基于远程shell的程序,比如ssh;第二,其程序自身的“daemon”服务器模式。

下面,我们两详细的说明两种服务实现方式;
1.使用基于OPENSSH的服务方式是,远程主机(服务器端)不需要设置rsync,
只需要安装Openssh-server,启动服务即可。特点:可以直接使用linux系统用户进行验证,很方便灵活。
2.基于rsync的daemon模式
使用rsync程序的服务器模式时,要设置rsync程序配置文件,rsyncd.conf。特点:可以使用匿名的方式或者是基本基于文本文件的用户数据库进行验证。
在配置服务之前我们一定要搞清楚一些概念性的东西,将服务器端(远程主机)的备份源目录同步到本地上,称之为下行同步,简单的说就是下载;将本地上的备份源目录同步到服务器端中,称之为上行同步,或者说是上传。Rsync程序同样可以在本地目录之间进行同步的,但是,切记一点:rsync程序不可以为远程主机之间进行目录的同步工作。
命令的基本格式:rsync [option] src dst
Rsync服务程序为我们提供了丰富的参数设置,正是由于参数才使得rsync如此的强悍。下面来详细的介绍每个参数的含义和用法;
-H 保留源文件的硬链接文件
-r 递归模式,包含目录及子目录的所有信息
-z 在传输文件的同时进行压缩
-v 显示同步过程的信息
-t 保留文件的时间标记
-o 保留文件的属主标记
-p 保留了文件的权限标记
-D 保留了设备文件和一些特殊的文件
-S 对零散文件的处理
-g 保留了文件的属组信息
--delete 删除目标目录中有而源目录中没有的信息
是不是命令选项很多呀,不用担心,其实呢还有一个超强的命令选项,
-a 即归档的模式,保留了文件原有的属性,权限,属主,文件链接等信息,就等同于使用了“-ogrlptD”
在使用rsync command的时候,由于远程主机使用的服务方式不同,那么服务器端主机地址和备份源之间就会采用不同的分隔符形式。
当使用的是SSH-SERVER服务时,使用一个冒号“:”分隔;
当使用的是rsync –-daemon服务时,使用两个冒号“::”分隔或者是使用“/”分隔,同时在主机地址前加上rsync://前缀。(“:”是使用在远处主机和源目录之间的。)OK,下面我们就来看看具体的例子
1.依赖于SSH服务的rsync的配置详细信息:
检查软件包的安装:(此作为服务器端,iP192.168.0.110,源目录为/data)
[root@server ~]# rpm -qa | grep ssh && rpm -qa | grep rsync
openssh-clients-4.3p2-36.el5
openssh-server-4.3p2-36.el5
openssh-askpass-4.3p2-36.el5
openssh-4.3p2-36.el5
rsync-2.6.8-3.1
默认情况下这两款软件包都是默认安装的。
本地的主机地址为192.168.0.111,目标目录/tmp,我们来实施一下同步;
源目录的文件信息:(192.168.0.110)
[root@server ~]# ll /data/ | nl
1 总计 36
2 drwxr-xr-x 5 root root 4096 06-02 10:21 ccie.rar
3 drwxr-xr-x 2 root root 4096 06-02 10:22 ccna.rar
4 drwxr-xr-x 2 root root 4096 06-02 10:21 ccnp.tar
5 -rw-r--r-- 1 root root 3201 06-02 10:19 H3CSE.pdf
6 -rw-r--r-- 1 root root 8510 06-02 10:18 H3CTE.pdf
7 drwxr-xr-x 3 root root 4096 06-02 10:08 Linux
8 -rw-r--r-- 1 root root 2745 06-02 10:17 vnc.doc
可是近段时间我更新了网络技术资料包括ccie和ccnp;
本地同步远程主机:(紫色,蓝色,红色分别代表了选项,源目录,目标目录)
[root@mail ~]# rsync -avzH root@192.168.0.110:/data /tmp
root@192.168.0.110's password:
receiving file list ... done
data/ccie.rar/
data/ccie.rar/BGP/
data/ccie.rar/MPLS/
data/ccie.rar/QOS/
data/ccie.rar/VPN/
data/ccnp.tar/
data/ccnp.tar/gvrp/
data/ccnp.tar/rstp/
data/ccnp.tar/stp/
data/ccnp.tar/vlan-qos/
data/ccnp.tar/vtp/
sent 86 bytes received 532 bytes 176.57 bytes/sec
total size is 9398927 speedup is 15208.62
由此说明了rsync程序具有同步新增或更改的文件信息。
当我们进行连接是会提示我们输入用户名密码,那么如何实现不输入密码直接进入呢?大家都知道SSH连接是有两种验证方式用户口令认证,密钥认证。
所以我们完全可以通过使用密钥的方式来实现此效果。
在本地主机上执行:
[root@mail ~]# ssh-keygen –d 或者 ssh-keygen –t rsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
7b:0c:ac:47:01:fe:3c:6a:57:ad:11:62:f4:0c:36:dbroot@mail.server.com
在这里我没对私钥实施保护口令,建议设置!然后将生成的公钥上传至远程主机(192.168.0.110)/root/.ssh中。因为一旦公钥被上传至远程主机中就会更名为authorized_keys,所以我们有两种方式进行操作:1,默认上传自动生成;2,手动设置;
1.[root@mail ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@192.168.0.110
21
root@192.168.0.110's password:
Now try logging into the machine, with "ssh 'root@192.168.0.110'", and check in:
.ssh/authorized_keys。
to make sure we haven't added extra keys that you weren't expecting.
2.[root@mail~]#scp /root/.ssh/id_rsa.pub root@192.168.0.110:/root/.ssh /authorized_keys
效果验证:(更新了unix,ccie,ccnp的信息)
[root@mail ~]# rsync -avzH root@192.168.0.110:/data /tmp
receiving file list ... done
data/Linux/
data/Linux/rsync/
data/ccie.rar/
data/ccie.rar/vlan-router/
data/ccnp.tar/
data/ccnp.tar/mul/
2.依赖于rsync –-daemon服务模式
1.默认情况下/etc/rsyncd.conf配置文件是不存在的,我们需要手工的建立。
[root@server ~]# cat /etc/rsyncd.conf
uid = root #指定访问用户
gid = root #指定访问组
use chroot = no #禁止chroot(不可连接后切换用户)
list = yes #允许访问目录列表
address = 192.168.0.110 #监听服务的IP地址
max connections = 10 #最大的连接数为10
log file = /var/log/rsyncd.log #存放日志文件的路径
pid file = /var/run/rsyncd.pid #存放进程标识文件的路径
hosts allow = 192.168.0.0/24 #允许访问rsync 服务的地址范围
[data] #此为发布共享的模块名
path = /data 共享模块的路径
comment = It's my study data! #注释信息
read only = yes #标识为可读
auth users = root #授权的用户名
secrets file = /etc/rsyncd.pass #授权用户的密码文件位置
授权用户密码文件:
[root@server ~]# cat /etc/rsyncd.pass
root:Linux%@!shuji192
chmod 600 /etc/rsyncd.pass //设置了用户读写的权限。
(本地主机必须要建立此文件,只需要输入密码即可èLinux%@!shuji192)
本地主机(CLIENT):
[root@mail ~]# cat /etc/rsyncd.pass
Linux%@!shuji192
2.启动rsync服务程序:
启动rsync服务有两种方式:独立守护进程的启动和依赖于xinetd超级服务。
One:独立守护进程:
[root@server ~]# rsync –daemon //启动服务命令
[root@server ~]# echo "/usr/bin/rsync --daemon &" >> /etc/rc.local
//开机自动运行服务
Two:xinetd 超级管理进程
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = yes #yes改为no 重启服务即可
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
[root@server ~]# service xinetd restart
停止 xinetd: [确定]
启动 xinetd: [确定]
[root@server ~]# chkconfig --list rsync
rsync 启用
下面我们来进行访问:
[root@mail ~]# rsync -avH root@192.168.0.110::/data /tmp
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]
为什么会出现错误信息呢?一定记住在rsync –-daemon 模式中,目录名对应远程主机所发布的模块名,验证用户为/etc/rsyncd.pass中定义的用户。
改过后的效果:
[root@mail ~]# rsync -avH root@192.168.0.110::data /tmp
Password:
receiving file list ... done
./
H3CSE.pdf
H3CTE.pdf
vnc.doc
Linux/
Linux/RHCA/
Linux/RHCA/xunihua/
Linux/rsync/
ccie.rar/
ccie.rar/tonghua.mp3
ccie.rar/BGP/
ccie.rar/MPLS/
ccie.rar/QOS/
ccie.rar/VPN/
ccie.rar/vlan-router/
ccna.rar/
ccna.rar/haoren
ccnp.tar/
ccnp.tar/oldboy.mp3
ccnp.tar/gvrp/
ccnp.tar/mul/
ccnp.tar/rstp/
ccnp.tar/stp/
ccnp.tar/vlan-qos/
ccnp.tar/vtp/
sent 344 bytes received 9401033 bytes 989618.63 bytes/sec
total size is 9398927 speedup is 1.00
或者使用[root@mail ~]# rsync -avH rsync://root@192.168.0.110/data /tmp命令,效果是一模一样的~~~
3.rsync常用命令
1. 查看rsync服务器的备份目录列表
[root@mail ~]# rsync rsync://192.168.0.110
data It's my study data!
就一个共享目录,但不给力了,我想看看共享目录里面的详细信息,
[root@mail ~]# rsync rsync://root@192.168.0.110/data
Password:
drwxr-xr-x 4096 2011/06/02 10:20:13 .
-rw-r--r-- 3201 2011/06/02 10:19:41 H3CSE.pdf
-rw-r--r-- 8510 2011/06/02 10:18:52 H3CTE.pdf
-rw-r--r-- 2745 2011/06/02 10:17:53 vnc.doc
drwxr-xr-x 4096 2011/06/02 12:04:50 Linux
drwxr-xr-x 4096 2011/06/02 11:00:50 ccie.rar
drwxr-xr-x 4096 2011/06/02 10:22:40 ccna.rar
drwxr-xr-x 4096 2011/06/02 11:01:06 ccnp.tar
上传和下载的命令就不多做介绍了,上面的内容中已经清楚了吧~~~
还有一个大家一定很感兴趣的???
由于工作的需求,而且对于同步数据的实时性要求不是很高的冗余备份,我想实现同步数据的自动化,该如何办呢?
我们可以结合linux系统中的crond服务来实现数据同步的自动化。
关于crond 和 at 两种命令的区别,大家因该很熟悉了,本质的区别在于有无周期性。
下面我们来建立同步数据的shell脚本:(在本地主机中设置(192.168.1.111,hostname=mail),因为这个过程是属于下行同步)
[root@mail ~]# cat D-sync.sh
#!/bin/bash
HOST="192.168.0.110"
ARGS="-avH"
SRC=\'#\'" /"
DST="/tmp/"
USER="root"
export RSYNC_PASSWORD="Linux%@!shuji192"
/usr/bin/rsync $ARGS $USER@$HOST::$SRC $DST
[root@mail ~]# crontab -l
*/20 * * * * ./D-sync.sh
//任务计划表,当然不要忘记了给予执行的权限,以及crond服务的启动。
Chmod u+x D-sync.sh
Service crond restart
0 0
原创粉丝点击