Rsync是的全称是: remote synchronize, 也就是远程同步数据, 它是一款不错的文件同步软件,而且是免费的, 它在镜像保存整个目录树和文件系统的同时保持原来文件的权限、时间、软硬链接。这对于以后文件的恢复提供了极大的帮助.rsync可通过 LAN/WAN 快速同步多台主机间的文件。 Rsync 本来是用以取代 rcp 的一个工具,它当前由 rsync.samba.org 维护(官网:http://rsync.samba.org/)。 Rsync 使用所谓的“ Rsync 演算法 ”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快. 也就是传说中的增量备份存储, 运行 Rsync server 的机器也叫 backup server ,一个 Rsync server 可同时备份多个 client 的数据;也可以多个 Rsync server 备份一个 client 的数据。在linux/UNIX下, Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个 873 的服务通道 (port) (默认端口, 后期可以修改),等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。传输数据过程中可以实行压缩及解压缩操作,减少带宽流量。支持scp、ssh及直接socket方式连接,支持匿名传输。支持Linux,Window平台。写本文的时候,window版最新版为4.0.5版
Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。本博以cwRsync为例进行讲解. 以下是WINDOW系统的下载资源.
Windows版下载:https://www.itefix.no/i2/cwrsync-get 选(Free Edition 免费版)
服务端:cwRsyncServer 4.0.5 Installer
下载完成后放入对应的文件夹下. 本文是以局域网为例的进行讲解, 其实和远程的配置差不多.另外测试机器是使用VM下的server 2003以及实体机的XP系统, 这两个系统基本上了函盖了WINDOW下的系统类型. 如果是同型系统的话, 遇到的问题可能会很少一些, 无法模拟出更多地状况和问题. 本博本着从重从难地原则来完成rsync的配置和应用工作.
[环境介绍:]
服务器端: VM下的server 2003 IP: 192.168.25.137
客户端: 本地的XP系统, IP:192.168.17.31
[服务器端的安装及配置过程]
在服务器端解压已经下载的cwRsyncServer_4.0.5_Installer, 会出现一个可执行的exe文件, 直接双击它, 然后就进入到安装界面:
要安装一定要选择"I Agree",没有什么好说的.
选择"Next", 进入下一界面:
注意这两个圆圈处的, 这个用户名默认是SvcCWRSYNC, 当然你也可以在自行修改它, 另外它的密码是随机生成的, 如果你认为这样的帐号和密码太麻烦的话,也可以自己修改它. 然后选择"install", 进入下一步.
稍等一下, 在出现的界面中点击"close"即可完成rsync服务器端的安装;
然后进入配置过程. 基本上关于rsync的配置都是在rsyncd.conf, 其路径是:C:Program FilesICW, 如果你自定义了其他的路径, 就找对应的路径即可.
编辑rsyncd.conf的工具可以直接用记事本即可. 打开后它的配置是这样的.
下面我将该文件重新编辑并注明各项参数.
use chroot = false #不使用chroot, 其实这个应该是针对linux系统来说的.既然是默认的, 就不用修改了
strict modes = false #不使用严格的用户限制
hosts allow = * #设定允许访问该服务的IP地址, 如果不限制, 则使用*
max connections = 5 #最大连接数, 不需要过多解释了吧?
port = 14598 #使用的端口,如果没有这一设置的话, 默认的端口是873, 为了提高安全性,同时为了避免与系统保留的端口相冲突, 最好将该端口设置为1024以上的.
gid = 0 #及下一行不限定访问用户及用户组
uid = 0
log file = /cygdrive/c/Setting/rsyncd.log #放置rsync的日志文件路径
# Module definitions
# Remember cygwin naming conventions : c:work becomes /cygwin/c/work
#
[data_backup] #模块名称
path = /cygdrive/c/data_backup #备份路径
auth users = wwufengg #访问的用户名
read only = false # 不只限制是只读属性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放认证用户密码信息的文件及路径
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽无关的IO错误
transfer logging = yes #记录传输日志
特别注意的是, 一定要转换路径的定义方法, 要使用POSIX格式的, 而不要使用系统给出的定义方式, 如f:db使用这样的定义: cygdrive/f/db, 这样才可确保rsync正常工作.
然后在C盘定义相关的文件夹及文件. 文件都可以用记事本直接命名, 只不过在保存时会出现那个修改后缀后的警告, 不管它, 直接点击是即可.
然后再用记事本打开那个ps文件, 如同我写的.
注意: 密码文件格式:用户名:密码,一行一个,有的系统不支持长密码,另个密码文件的权限对其它用户组是不可读的,设置错了可能不工作。在Windows下,密码文件的访问权限一定要设置正确,不然用户验证的时候通不过。应将密码文件C:SettingRsync sync_db.ps的权限加入Rsycn服务运行服务的用户名 cwRsyncServer 的读取权限 及 设置其为该文件为所有者。
在系统中启动该服务: 我的电脑 右键---> 管理 --> 找到RsyncServer 开启这个服务, 同时注意一定要选用"自动"否则你每次开机时都要启动它, 否则rsync是不会工作的. 这个是细节问题, 注意.
开启防火墙: 如果你的系统开启了防火墙, 注意把端口设置为允许通过, TCP模式.
验证一下是否正常. 打开CMD窗口, 输入telnet 192.168.25.137 14598
出现如下图示的界面说明已经安装成功.
至此, rsync的服务器端已经安装成功;
至于客户端的安装,真没有啥可说的.直接安装就是了. 略. 安装完成后测试一下它的连通性, 在DOS窗口下输入服务器端的IP和端口: telnet 192.168.25.137 14598
出现@RSYNCD: 30.0 等类似文字,则说明客户端连接服务端正常.
然后配置本地的用户密码信息,路径及注意事项如下:
然后在命令行中运行进到Rsync客户端安装目录的bin目录下,如本例中:C:Program FilescwRsyncin
然后再运行如下的命令:
rsync --port=14598 -vzrtopg --progress --delete wwufengg@192.168.25.137::data_backup /cygdrive/d/wwufengg --password-file=/cygdrive
/c/setting/rsync/rsync_db.ps
在这种情况下, 它有可能会提示你输入密码, 这个你直接输入那个服务器端的密码即可. 可是如果你要有N条命令来执行同步, 每一条你都要这样输入, 还是很不方便的. 为了解决这个问题, 还有另外一种办法, 那就是在任意目录新建一个文档, 文档内容和rsync_db.ps的内容, 也就是用户密码一样, 比如我这个的.e: syncs37.txt, 之所以用这样的设置, 主要就是区别原有的盘符和文件rsync_db.ps, 当然你也可以在 c:setting sync 新建一个TXT文件, 都没有关系的. 然后在命令添加如下的内容即可:
rsync --port=14598 -vzrtopg --progress --delete wwufengg@192.168.25.137::data_backup /cygdrive/d/wwufengg --password-file=/cygdrive
/c/setting/rsync/rsync_db.ps<e:
syncs37.txt
在DOS模式提示输入密码的时候, 它就会自动读入密码内容, 从而实现让它自动进行同步备份了. 进行到这一步, 也只是在DOS模式下, 每次这样运行, 也不方便, 也很容易弄错, 干脆弄成批处理文件. 直接双击即可执行, 效果会更好. 不要担心不会做批处理命令的问题. 其实很简单的. 直接把上面这一段保存到记事本里面, 然后保存到C:Program FilescwRsyncin目录下, 命名为wwufengg.bat
然后找到这个文件, 双击一下, 即可实现同步备份的操作了. 很方便吧? 只要弄通, 确实是很方便.
外延: 上例中只是备份一个源文件, 而一台服务器可能有N多个文件需要同步备份, 那怎么办呢? 其实这个也很容易解决, 就是在服务器端多建几个模块, 每个模块包含不同的文件夹, 使用同样的密码文件即可实现. 如同下面的:
use chroot = false #不使用chroot, 其实这个应该是针对linux系统来说的.既然是默认的, 就不用修改了
strict modes = false #不使用严格的用户限制
hosts allow = * #设定允许访问该服务的IP地址, 如果不限制, 则使用*
max connections = 5 #最大连接数, 不需要过多解释了吧?
port = 14598 #使用的端口,如果没有这一设置的话, 默认的端口是873, 为了提高安全性,同时为了避免与系统保留的端口相冲突, 最好将该端口设置为1024以上的.
gid = 0 #及下一行不限定访问用户及用户组
uid = 0
log file = /cygdrive/c/Setting/rsyncd.log #放置rsync的日志文件路径
# Module definitions
# Remember cygwin naming conventions : c:work becomes /cygwin/c/work
#
[data_backup] #模块名称
path = /cygdrive/c/data_backup #备份路径
auth users = wwufengg #访问的用户名
read only = false # 不只限制是只读属性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放认证用户密码信息的文件及路径
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽无关的IO错误
transfer logging = yes #记录传输日志
[site_bak] #改动的模块名称
path = /cygdrive/c/site_bak #改动的备份路径
auth users = wwufengg #访问的用户名
read only = false # 不只限制是只读属性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放认证用户密码信息的文件及路径
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽无关的IO错误
transfer logging = yes #记录传输日志
.......
其余部分不变,依次类推即可.
至此, 已经实现了多源站的数据同步备份功能.
在网上, 看到有朋友通过任务计划的方式来实现定期定时地同步文件, 不知道是怎么回事, 我这边一直无法实现这样的功能, 后来想想, 毕竟要备份的源站都是生产环境下的. 还是手动备份比较好一些吧, 所以就没有细细地研究了. 如果有朋友做到的话, 请提供一下地址. 我好拜读一下.
其实做这个教程时, 我已经完成了本地的配置验证, 服务器间的同步功能, 但是在写这个教程而重建环境时仍然遇到了一些小问题, 虽然解决很简单,但是找到问题点却是颇费心思和精力的, 以下是我的教训,希望供朋友们借簦
教训总结:
1. 注意服务器端配置文件的每一行的行尾都不要留空格, 这个看起来很简单的问题, 很有可能在运行时出现这样的提示,
ERROR: auth failed on module data_backup rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
我相信很多人都会遇到这个问题, 即使你已经严格地按照某些教程操作而仍然出现这样的提示的时候, 你就会很崩溃了. 而我就因为这一点而浪费了将近一天的时间, 只是偶然才发现这个问题, 解决起来也很简单, 就是把这几个空格去掉. 当然,另外的因素就是你考虑是不是你的服务器端的密码文件权限问题, 即要保证是600权限, 也就是只有读写权限, 对于WINDOW来说, 这个权限的设置有点头疼, 这个问题我也解决了, 那就是把文件的权限设置为只允许当前用户读写, 在这个时候, 会有如下的提示:
直接点击"是"即可, 这样的话, 其他的用户也就无法访问了, 当然也不能编辑. 如果想编辑的话, 就再加其他的用户即可.
另外, 在WIN下也可以在服务器端给这个文件添加SvcCWRSYNC用户的方式来解决, 如图示:
2. 服务器端的密码文件和客户端的密码文件可以分别放在不同的盘符和文件夹内, 不影响软件的正常使用, 所以不用纠结它们是不是对应, 我这篇文章中已经体现出来了, 服务器端的密码文件时这样的格式: 用户名:密码, 如本例中的wufengg:wf5874, 而客户端的是只有用户的密码, 如本例中的wf5874, 这一点要注意, 另外, 还有一点, 不管服务器端建有多少个用户密码, 对应于某一台具体的客户端来说, 对它有效的只有一个用户, 也就是第一行密码对应的用户, 第二行密码对应的用户是无法运行的. 这一点如果不注意的话, 会裁跟头的;
3.批处理文件要注意保持每一条命令都占用一整行, 否则会因为命令不全导致运行失败的. 所以粘贴到记事本的时候要注意去掉自动换行的功能, 这样的话会比较容易发现这个问题的;
rsync常见问题及解决办法:
错误1: rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receive r=3.0.2]
解决:很大可能是服务器端没有开启 rsync 服务。开启服务。
错误2:@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:服务器端同步目录没有权限,cwrsync默认用户是Svcwrsync。为同步目录添加用户Svcwrsync权限。
错误3:@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:配置文件 rsync.conf中添加 lock file = rsyncd.lock 即可解决。
错误4: rsync: could not open password file "/cygwin/e/Setting/Rsync/rsync_db.pwd": No such file or directory (2)
解决:密码文件的目录一定要存在,而且要用POSIX风格的写法:/cygdrive/e/Setting/Rsync/rsync_db.pwd
错误5:@ERROR: auth failed on module data_backup rsync
error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
解决:密码错误,输入正确的密码即可。用户名和密码如果都正确,可能是远程rsync服务器的帐户密码文件的权限必须为600, 这一点还要注意空格问题是否存在;
错误6: password file must not be other-accessible
解决:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd, Windows下应将密码文件的所有者改成程序运行的用户。
错误7:@ERROR: invalid uid nobody . rsync
error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
解决:在rsyncd.conf文件中添加下面两行即可
uid = 0
gid = 0
问题8: @ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。
问题9:@ERROR: Unknown module ‘data_backup’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。
问题10:rsync: failed to connect to 192.168.25.137: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873或者指定的rsync端口打开。
问题11:rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。
问题12:rsync: chown "" failed: Invalid argument (22)
原因:权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
问题13:@ERROR: daemon security issue -- contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。略过软连接文件。
问题14:rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2]
解决:很大可能是服务器端没有开启 rsync 服务,开启服务。
问题15: rysnc: failed to connect to 192.168.25.137: Connect refused(111)
rsync error: error in socket IO<code 10> [Receiver=3.0.7]
解决: 出现这个错误要检查一下你的连接端口是不是与服务器端的端口一致.
现在看来, 整个过程很流畅, 严格按照我的方法是可以实现所需要的功能, 但是为了实现这个过程, 我却是经历了很多地挫折和困难, 每一步都花费了很多的时间和精力, 网上有很多类似的教程, 刚开始也是按照他们的操作方法来做的. 可是殊不知, 里面有很多地坑, 每次从坑里爬出来都是灰头土脸的. 不过, 随着一个一个问题的解决, 也收获了一种幸福和快乐. 直到整个流程都走下来时, 看着一行行流程闪现在眼前时, 就体会到一种满足,幸福的味道了. 希望更多地朋友能体会到解决问题的幸福感.