《rsync安装与配置-完整版精品资料.doc》由会员分享,可在线阅读,更多相关《rsync安装与配置-完整版精品资料.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、使用rsync从linux到linux做备份 一、软件简介rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来了remote sync。rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。它的特性如下:1、可以镜像保存整个目录树和文件系统。2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。3、无须特殊权限即可安装。4、优化的流程,文件传输效率高。5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。本文介绍了如何使用rsync服务从Linux到Windows和linux进行远程备份二、安
2、装软件rysnc的主页地址为:http:/rsync.samba.org/,可以从这里下载rsync的安装软件。编译安装rsync的编译安装非常简单,只需要以下简单的几步(在两台服务器中都要安装):$ tar xvf rsync-2.6.3.tgz$ cd rsync-2.6.3$ ./configure$ make$ make install/如果是已安装了RPM版的Rsync,并且要安装新版的Rsync,需要先删除Rsync#rpm -e rsync(Redhat会有一个包依赖rsync,可以使用rpm -e rsync -nodeps卸载)另外,RPM版的rsync带了一个服务端的启动脚
3、本,/etc/xinetd.d/rsync可以保留但是需要注意的是必须在主服务器和同步服务器上都安装rsync,其中主服务器上是以服务器模式运行rsync,而同步上则以客户端方式运行rsync。这样在主服务器上运行rsyn守护进程,在同步上用crond定时运行客户程序来同步主服务器上需要同步的内容。三、配置rsync服务器端rsync服务器的配置文件为/etc/rsyncd.conf,其控制认证、访问、日志记录等等。该文件是由一个或多个模块结构组成。一个模块定义以方括弧中的模块名开始,直到下一个模块定义开始或者文件结束,模块中包含格式为name=value的参数定义。每个模块其实就对应需要备份
4、的一个目录树,比方说在我们的实例环境中,有三个目录树需要备份:/www/和/mirror/file0/和/mirror/file1/目录,那么就需要在配置文件中定义三个模块,分别对应三个目录树。配置文件是行为单位的,也就是每个新行都表示一个新的注释、模块定义或者参数赋值。1 。配置rsync servervi /etc/xinetd.d/rsync将disable=yes改为noservice rsyncdisable = yessocket_type = streamwait = nouser = rootserver = /usr/bin/rsyncserver_args = -daemo
5、nlog_on_failure += USERID确保etc/services中rsync端口号正确roottest etc# vim /etc/servicesrsync 873/tcp # rsyncrsync 873/udp # rsync配置rsync密码文件/home/rsync.ps(名字随便写,只要和配置文件里的一致即可),格式(一行一个用户)roottest etc# vi /home/rsync.psscihoo:scihoo配置rsync密码文件权限roottest home# chown root.root rsync.psroottest home# chmod 600
6、 rsync.ps启动配置roottest home# /etc/init.d/xinetd restart如果xinetd没有的话,需要安装一下roottest home# yum -y install xinetdRSYNC服务端启动的几种方法启动rsync服务端(独立启动)roottest home# /usr/bin/rsync -daemon加入rc.local,可以修改使系统启动时把rsync -daemon加载进去。roottest home# vi /etc/rc.local/usr/local/rsync daemon #加入一行重新载入rsync配置roottest hom
7、e# /etc/init.d/xinetd reload检查rsync是否启动roottest home# lsof -i :873COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMExinetd 4396 root 5u IPv4 633387 TCP *:rsync (LISTEN) =例子:手动创建rsync的配置文件vi /etc/rsyncd.conf(前面以#开头的行或注释可以不用写入配置文件中)uid = nobody # 备份以什么身份进行,用户IDgid = nobody # 备份以什么身份进行,组ID#注意这个用户ID和组ID,如果要
8、方便的话,可以设置成root,这样rsync几乎就可#以读取任何文件和目录了,但是也带来安全隐患。建议设置成只能读取你要备份的目录和文件即可。use chroot = nomax connections = 0 #最大连接数,0代表没有限制#port = 873 #默认端口873pid file = /var/log/rsync/rsyncd.pid #运行进程的ID写到哪里#lock file = /var/log/rsync/rsync.locklog file = /var/log/rsync/rsyncd.log #日志记录文件motd file = /var/log/rsync/rs
9、yncd.motd #欢迎消息strict modes =yes #是否检查口令文件的权限attachment # 指定认证的备份模块名path = /www/htdocs/pub/attachment/ # 需要备份的目录comment = BACKUP attachment # 注释ignore errors # 忽略一些无关的IO错误read only = false # 设置为非只读,即可以传至服务器的相应目录。list = false # 不允许列文件#exclude = test/ test.php #设置不同步的目录或文件用空格隔开#hosts allow = 210.51.0.
10、80 #允许连接服务器的主机IP地址,如果多个ip则用空格隔开#hosts deny = 0.0.0.0/0.0.0.0 #禁止连接服务器的主机IP地址,也可为*,表示所有。auth users = msyn # 认证的用户名,如果没有这行,则表明是匿名secrets file = /etc/rsyncd.scrt # 认证文件名,用来存放密码98htdocsuid = nobodygid = nobodypath = /www/htdocs/#ignore errorsread only = truelist = true#hosts allow = 210.51.0.98#hosts de
11、ny = 202.108.211.38#hosts deny = 0.0.0.0/0.0.0.0auth users = msyn,myname2secrets file = /etc/rsyncd.scrt=这里分别定义了attachment、98htdocs,分别对应于二个需要备份的目树。二个模块授权的备份用户分别为msyn,msyn,98syn,用户信息保存在文件/etc/rsyncd.scrt,其内容如下:rootwww /etc# cat /etc/rsyncd.scrt www:xxxxxxxxx注意:该文件只能是root用户可读写的,注意,出于安全目的,这个文件的属性必需是只有属
12、主可读,否则rsync将拒绝运行。我们可以设置它的属性为600:rootwww /etc# chmod 600 /etc/rsyncd.scrt 这些文件配置完毕以后,就需要在主服务器上启动rsyncd服务:rootwww /etc# /usr/local/bin/rsync -daemon执行完毕上面的命令后,rsync即可启动。rsync默认服务端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。四、配置客户端1、配置密码文件 (注:为了安全,设定密码档案的属性为:600。rsync.scrt的密码一定要和Rsync Server密码设定案里的密码一样)rootaj1 hom
13、e# vi /etc/rsync.scrt123456rootaj1 home# chown root.root /etc/rsync.scrt # 注意必须给权限rootaj1 home# chmod 600 /etc/rsync.scrt # 必须修改权限2. linux下执行rsync客户端命令下一步就要运行rsync客户端的启动命令了:backupbackup /#/usr/bin/rsync -vzrltogp -progress -delete userx.x.x.168:attachment /usr/local/apache/htdocs/pub/html/ -password
14、-file=/etc/rsync.scrt上面这个命令行中-vzrtopg代表的意思是:-v表示verbose(详细)-z表示zip(压缩)-r表示recursive(递归目录)-topg是保持文件原有属性如o=owner(属主)、t=times(时间)、p=perms(权限)、g=group(组)的参数-H表示保持硬连接-l:保留软链结-u:表示只更新源文件比目标时间新的文件-progress是指显示出详细的进度情况-delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。userx.x.x.168:attachment 是表示对服务器x.x.x.168中的a
15、ttachment模块进行备份,登录帐号是user-password-file = /etc/rsync.scrt来指定密码文件,这里需要注意的是这份密码文件权限属性要设得只有属主可读(权限为600),属主为正在运行此命令的用户。-a:(-a, -archive equivalent to -rlptgoD)以archive模式操作,复制目录、符号连接在这里面=另外,可以创建一个脚本运行这个命令,并记录日志# cat /usr/local/bin/rsync.sh#!/bin/bashDATE=date +%wrsync -avzH -progress -delete inburst192.1
16、68.168.52:inburst /home/quack/backup/$DATE -password-file=/etc/rsync.pass /var/log/rsync.$DATE修改/etc/crontab做好定时更新(配置文件 /etc/crontab)rootaj1 home# crontab -e15 4 * * 6 root rsync.shrootaj1 home# crontab -l /查看所有自定义任务rootaj1 home# /etc/init.d/crond restart /重启动任务计划 crontabCrontab文件的格式:第1列分钟159第2列小时12
17、3(0表示子夜)第3列日131第4列月112第5列星期06(0表示星期天)=rsync for windows同步设置方法配置环境,windows server 2003_32位系统一、windows与windows同步1.准备两台机器:server-192.168.0.201client-192.168.0.202-2.下载windows版的rsync工具cwRsync_2.0.10_Installer.zipcwRsync_Server_2.0.10_Installer.zip-3.安装与配置SERVER:(1)安装cwRsync_Server_2.0.10_Installer.zip在开
18、始程序中打开“start a unix bash shell”程序:进入一个类似cmd的终端,输入如下命令:/bin/activate-user.sh输入l输入administrator后面全按回来结束-(2)启动opensshd打开“控制面板”“管理工具”“服务”:找到一个opensshd的服务,启动它-(3)配置rsyncd.conf配置文件编辑C:Program FilescwRsyncServerrsyncd.conf,内容如下:use chroot = falsestrict modes = falsehosts allow = *log file = rsyncd.logpid f
19、ile = rsyncd.pid# Module definitions# Remember cygwin naming conventions : c:work becomes /cygwin/c/workmonth201001path = /cygdrive/E/lpxx/2010/1read only = falsetransfer logging = yes-(4)启动rsync服务打开“控制面板”“管理工具”“服务”:找到一个RsyncServer的服务,启动它到此server端配置结束,接下来配置client端。CLIENT:(1)安装client端软件包:cwRsync_2.0.
20、10_Installer.zip(2)打开cmd,执行如下操作,测试服务端是否正常启动服务了:cd C:Program FilescwRsyncbintelnet 192.168.0.201 22telnet 192.168.0.201 873若上述测试成功,此时可执行同步计划:(5)客户端配置文件目录 C:Program FilescwRsync2handdb-bak.bakECHO OFFSETLOCALSET CWRSYNCHOME=C:PROGRAM FILESCWRSYNCPDF created with pdfFactory Pro trial version SET CYGWIN
21、=nontsecSET HOME=%HOMEDRIVE%HOMEPATH%SET CWOLDPATH=%PATH%SET PATH=%CWRSYNCHOME%BIN;%PATH%rsync 试用参数:-h , -help 显示rsync求助资讯-version 顯示rsync版本-v , -verbose 复杂的输出信息-q , -quiet 安静模式,几乎没有讯息产生, 常用在以cron执行rsync-I, -ignore-times 通常rsync为了加快速度会忽略同样档案大小且同样,同样存取时间点的档案可以通过此参数开关此快速检查.-size-only rsync 只检查档案大小是否改变
22、,不管时间存取点是否改变通常用在mirror, 且对方时间不太正确时-c, -checksum 在传送之前透过128bit的md4检查码来检查所有要传送的档案(会托满速度);-a, -archive archive mode 权限保存模式,相当于 -rlptgoD 参数.很快速的保存几乎所有的权限设定,除了硬式连接(透过-H设定).-r, -recursive 复制所有下面的资料(透过)-R, -relative 使用相对路径如: rsync foo/bar/foo.c remote:/tmp/ 在远端产生/tmp/foo.c档案rsync -R foo/bar/foo.c remote:/t
23、mp/ 在远端产生/tmp/foo/bar/foo.c 档案-R, -relative 不使用相对路径-b, -backup 目的地端先前已经存在的档案在传输或删除前会被备份-backup-dir=DIR 设定备份的资料夹-suffix=SUFFIX 指定备份的档案名称字尾形式(预设为)-K, -keep-dirlinks 接收方将连接到资料夹的档案视为资料夹处理-l, -links 复制所有的连接-H, -hard-links 保留硬式连结-p, -perms 保留档案权限 # 小p-o, -owner 保留档案所有者(root only)-g, -group 保留档案群组-D, -devi
24、ces 保留device资讯(root only)-t, -times 保留时间点-n, -dry-run 不实际执行传送_, 只显示将会有的传输动作-S, -sparse 尝试去处理稀疏的档案, 让这些档案在目的端占去较少的磁碟空间-W, -whole-file 复制所有的档案, 不额外作检查-no-whole-file 关闭 -whole-file 参数-x, -one-file-system 不要跨越档案系统分界(只在一个档案系统处理)-B, -block-size=SIZE 强制透过rsync程式去比对修复block-sizeforce-e -rsh=COMMAND 定义所试用的rem
25、ote shell-rsync-path=PATH 定义rsync在远端机器存放资料的路径-existing 只对比更新目的端已经存在的档案-ignore-existing 忽略目的断已经存在的档案(也就是不更新)-delete 删除传送断已经不存在,而目的端存在的档案-delete-excluded 除了把传送端已经不存在, 而目的端存在的档案删除之外, 也删除 -exclude 参数所包含的档案-delete-after rsync预设会在档案传送前进行相关删除动作确保接收端有足够的档案空间,单可以透过 -delete-after 让删除动作在档案传送后在进行删除-ignore-error
26、s 忽略任何错误即使是I/O error 也进行 -delete 删除动作-max-delete=NUM 定义rsync不要删除超过NUM个档案-partial rsync若遇到传输过程中断时, 会把那些已经传输的档案删除.在某种状况下保留那些部分传送的档案是令人高兴的;你可以透过 -partial 参数达到这个目的.-partial-dir=DIR 在 -partial 参数启动时, 你还是可以定义rsync把那些部分传送的档案写入定义的资料夹, 而非直接写入目的端,需要注意的是,此资料夹不应该被其他试用者可以写入.(如:/tmp)-force 当目的端资料夹被传送端非资料夹名称覆盖时, 强
27、制rsync删除资料夹, 即使该资料夹不是空的.-numeric-ids 不将传送端档案的uid及gid值, 与目的端的使用者/群组进行配对,若传送端并没有uid及gid的对应名称(如:原帐号群组被删除的遗留档案),或目的端没有相对应的帐号/群组, 保留数字型式的uid/gid-timeout=TIMEOUT 设定I/O 超时的时间(秒). 超过这个秒数而没有资料传送, rsync将会结束. 预设为0,也就是没有定义超时时间-T, -temp-dir=DIR 定义rsync在接收端产生暂时性的复制档案时使用资料夹暂存, 预设时直接在接收端资料夹直接产生暂存档案-compare-dest=DIR
28、 定义rsync在目的端建立资料夹来比对传送过来的档案.-link-dest=DIR 与 -compare-dest 相同,但同时会针对无法改变的档案建立硬式连结.PDF created with pdfFactory Pro trial version -z, -compress 压缩模式, 当资料在传送到目的端进行档案压缩.-P -P参数和 -partial -progress 相同.只是为了把参数简单化.-C, -cvs-exclude 排除那些通常不希望传送的档案, 定义的方式与CVS传送相同:RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS
29、 .make.state.nse_depinfo * #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej.del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/符合以上条件的都会被忽略不传送.-exclude=PATTER 符合PATTERN(规则表示式)样式的档案不仅行传送-exclude-from=FILE 和 -exclude 参数相同, 不过是把不进行传送的档案事先写入某一档案.执行时, 透过此参数让rsync读取.(; #开头的行列或者空白会被rsync忽略)-inclu
30、de=PATTERN 定义rsync不要排除符合pattern样式的档案-include-from=FILE 和-include参数相同,只不过把要包含的档案写到某一档案.-files-from=FILE 把要传送的档案名称都精确的写入某一档案, 让rsync读取.如: rsync -a -files-from=/tmp/foo /usr remote:/backup-0 -from0 定义档案所要读取的档案时null字元结尾.-version 现四版本信息.-daemon 定义rsync以daemon型态执行-no-detach 当以daemon形态执行时,不要进行分裂且变成背景程序.-ad
31、dress=ADDRESS 定义所要连接(bind)的ip位置或者是host名称(daemon限定)-config=FILE 定义所要读取的设定档rsyncd.conf位置(daemon限定)预设值为 /usr/local/etc/rsyncd.conf-port=PORT 定义rsyncd(daemon)要旨行的port(预设为tcp 873)-blocking-io 使用blocking I/O连结远端的shell, 如rsh, remsh-no-blocking-io 使用non-blocking连结远端的shell, 如ssh(预设值)-stats 显示档案传送时的资讯状态-progr
32、ess 显示传送的进度.(给档案传送时,怕无聊的人用的.)-log-format=FORMAT 定义log的格式(在rsyncd.conf设定)-password-file=FILE 从档案读取与远端rsync伺服务连结的密码-bwlimit=KBPS 定义传输频宽的大小(KBytes/秒)-write-batch=FILE 把记录资料写入一个档案(给其他相同环境且相同需求的机器试用)-read-batch=FILE 透过读取记录档案来进行传输.(档案由 -write-batch 参数产生)-checksum-seed=NUM 定义档案 checksum-seed 的大小(byte)-4 -i
33、pv4 使用IPv4协定-6 -ipv6 使用IPv6协定附录资料:不需要的可以自行删除 libxml2应用实例Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c+、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。二、 Libxml2安装:一般如果在安装系统的时候选中了所有开发库和开发工具的话(Fedora Core系列下),应该不用安装,下面介绍一下手
34、动安装: 1) 从xmlsoft站点或ftp(ftp.xmlsoft.org)站点下载libxml压缩包(libxml2-xxxx.tar.gz)2) 对压缩包进行解压缩 tar xvzf libxml2-xxxx.tar.gz3) 进入解压缩后的文件夹中运行 ./configure -prefix /home/user/myxml/xmlinst(此处为待安装的路径)或者直接使用 ./configure make make install 4) 添加路径 export PATH=/home/user/myxml/xmlinst/bin:$PATH 说明:为了结构清晰,最好将libxml2不安
35、装在解压目录中。安装完成后就可以使用简单的代码解析XML文件,包括本地和远程的文件,但是在编码上有一些问题。Libxml默认只支持UTF8的编码,无论输入输出都是UTF-8,所以如果你解析完一个XML得到的结果都是UTF8的,如果需要输出GB2312或者其它编码,需要ICONV来做转码(生成UTF8编码的文件也可以用它做),如果系统中没有安装iconv的话,需要安装libiconv。 1) 下载libiconv压缩包(例如libiconv-1.11.tar.gz) 2) 对压缩包进行解压缩tar xvzf libiconv-1.11.tar.gz 3) 进入解压缩后的文件夹中运行 ./conf
36、igure make make install三、关于XML:在开始研究 Libxml2 库之前,先了解一下XML的相关基础。XML 是一种基于文本的格式,它可用来创建能够通过各种语言和平台访问的结构化数据。它包括一系列类似 HTML 的标记,并以树型结构来对这些标记进行排列。例如,可参见清单 1 中介绍的简单文档。为了更清楚地显示 XML 的一般概念,下面是一个简化的XML文件。清单 1. 一个简单的 XML 文件 root delete 10清单 1 中的第一行是 XML 声明,它告诉负责处理 XML 的应用程序,即解析器,将要处理的 XML 的版本。大部分的文件使用版本 1.0 编写,但
37、也有少量的版本 1.1 的文件。它还定义了所使用的编码。大部分文件使用 UTF-8,但是,XML 设计用来集成各种语言中的数据,包括那些不使用英语字母的语言。接下来出现的是元素。一个元素以开始标记 开始(如 ),并以结束标记 结束(如 ),其中使用斜线 (/) 来区别于开始标记。元素是 Node 的一种类型。XML 文档对象模型 (DOM) 定义了几种不同的 Nodes 类型,包括:Elements(如 files 或者 age)Attributes(如 units)Text(如 root 或者 10)元素可以具有子节点。例如,age 元素有一个子元素,即文本节点 10。XML 解析器可以利用
38、这种父子结构来遍历文档,甚至修改文档的结构或内容。LibXML2 是这样的解析器中的其中一种,并且文中的示例应用程序正是使用这种结构来实现该目的。对于各种不同的环境,有许多不同的解析器和库。LibXML2 是用于 UNIX 环境的解析器和库中最好的一种,并且经过扩展,它提供了对几种脚本语言的支持,如 Perl 和 Python。四、Libxml2中的数据类型和函数一个函数库中可能有几百种数据类型以及几千个函数,但是记住大师的话,90%的功能都是由30%的内容提供的。对于libxml2,我认为搞懂以下的数据类型和函数就足够了。1)内部字符类型xmlCharxmlChar是Libxml2中的字符类
39、型,库中所有字符、字符串都是基于这个数据类型。事实上它的定义是:xmlstring.htypedef unsigned char xmlChar;使用unsigned char作为内部字符格式是考虑到它能很好适应UTF-8编码,而UTF-8编码正是libxml2的内部编码,其它格式的编码要转换为这个编码才能在libxml2中使用。还经常可以看到使用xmlChar*作为字符串类型,很多函数会返回一个动态分配内存的xmlChar*变量,使用这样的函数时记得要手动删除内存。2) xmlChar相关函数如同标准c中的char类型一样,xmlChar也有动态内存分配、字符串操作等相关函数。例如xmlMa
40、lloc是动态分配内存的函数;xmlFree是配套的释放内存函数;xmlStrcmp是字符串比较函数等等。基本上xmlChar字符串相关函数都在xmlstring.h中定义;而动态内存分配函数在xmlmemory.h中定义。3)xmlChar*与其它类型之间的转换另外要注意,因为总是要在xmlChar*和char*之间进行类型转换,所以定义了一个宏BAD_CAST,其定义如下:xmlstring.h#define BAD_CAST (xmlChar *)原则上来说,unsigned char和char之间进行强制类型转换是没有问题的。4)文档类型xmlDoc、指针xmlDocPtrxmlDoc
41、是一个struct,保存了一个xml的相关信息,例如文件名、文档类型、子节点等等;xmlDocPtr等于xmlDoc*,它搞成这个样子总让人以为是智能指针,其实不是,要手动删除的。xmlNewDoc函数创建一个新的文档指针。xmlParseFile函数以默认方式读入一个UTF-8格式的文档,并返回文档指针。xmlReadFile函数读入一个带有某种编码的xml文档,并返回文档指针;细节见libxml2参考手册。xmlFreeDoc释放文档指针。特别注意,当你调用xmlFreeDoc时,该文档所有包含的节点内存都被释放,所以一般来说不需要手动调用xmlFreeNode或者xmlFreeNodeL
42、ist来释放动态分配的节点内存,除非你把该节点从文档中移除了。一般来说,一个文档中所有节点都应该动态分配,然后加入文档,最后调用xmlFreeDoc一次释放所有节点申请的动态内存,这也是为什么我们很少看见xmlNodeFree的原因。xmlSaveFile将文档以默认方式存入一个文件。xmlSaveFormatFileEnc可将文档以某种编码/格式存入一个文件中。5)节点类型xmlNode、指针xmlNodePtr节点应该是xml中最重要的元素了,xmlNode代表了xml文档中的一个节点,实现为一个struct,内容很丰富:tree.htypedef struct _xmlNode xmlNode;typedef xmlNode *xmlNodePtr;struct _xmlNode void *_private;/*