方案规划

机房共有服务器100多台,其中有部分服务器的数据需要做异地备份,于是搭建一台备份服务器,用于存放其他服务器需要备份的数据。

备份服务器为192.168.100.223,采用Windows系统,原因就为了方便,如果真到了需要恢复数据的时候,操作更熟悉,可以更快的恢复数据。备份软件采用Rsync,Windows下为cwRsync。

具体实施

一、windows到windows的数据同步

1、192.168.100.223上安装cwRsync服务器端。

最好不要按默认路径安装,安装路径尽可能简单,最好不要装在Program File路径下,因为命名很奇怪,不仅长而且中间有个空格,有时候执行命令行操作会出现问题。

2、编辑rsyncd.conf文件

点“开始”-“所有程序”-“cwRsyncServer”-“rsyncd.conf”,将100.112模块配置参数为如下(其实只改了前两行):

[100.112]

path = /cygdrive/e/100.112

read only = false

transfer logging = yes

3、启动RsyncServer服务,并将启动类型设为自动。

4、在E盘下建立文件夹100.112

5、192.168.100.112上安装cwRsync客户端

6、建立批处理文件bak.bat,添加内容如下:

    "C:\cwRsync\bin\rsync.exe" -av /sygdrive/d/test/ administrator@192.168.100.223::100.112

参数a,归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

参数v,详细模式输出

7、测试执行,在命令行窗口中执行bak.bat文件,提示错误invalid uid nobody 

8、修改服务器端配置文件:rsyncd.conf ,在文件中增加

uid = 0

gid = 0

保存后重启RsyncServer服务。再执行bak.bat成功。但是仍有错误信息,这个后面会说。

注:uid = 0,gid = 0是针对匿名访问的情况进行设置的,这样客户端同步时就不需要进行用户验证。如果不进行这样的设置,客户端同步时会出现“invalid uid nobody”或“invalid gid nobody”的错误提示。如果需要用户验证,就要进行另外的设置。

 

9、设置用户验证。

 

服务器端

在rsync.conf文件的[100.112]中添加以下内容(红色部分)

[100.112]

path = /cygdrive/e/100.112

read only = false

transfer logging = yes

auth users = administrator

secrets file = /cygdrive/c/rsyncd.secrets

同时在c盘下建立rsyncd.secrets文件,编辑内容格式为用户名:密码

如  administrator:123

然后重新启动RsyncServer服务。

 

客户端

编辑批处理文件bak.bat,添加以下内容(红色部分)

"C:\cwRsync\bin\rsync.exe" -av --password-flie=/cygdriver/c/pwd.conf /cygdrive/d/test/ administrator@192.168.100.223::100.112

同时在c盘下建立文件pwd.conf,编辑内容为密码,如123

10、测试执行及故障的排除。

配置完成后执行批处理文件bak.bat,提示密码文件的所有者必须是root

ERROR: password file must be owned by root when running as root

被这一问题困扰了很长时间,从网上也查不到很好的解决办法,最后还是自己琢磨出来了。

解决方法:

在命令行窗口进入cwRsync安装路径的bin目录下,

执行ls -l /cygdrive/c/pwd.conf,可以看到pwd.conf文件的所有者是4294967295,我了个去。

于是用命令修改,chown Administrator /cygdrive/c/pwd.conf

因为按照提示把所有者改为root,会提示root为不可用的用户 invalid user: `root'

所以试着把所有者改为Administrator,再次ls -l 查看,看到所有者已经变更了

需要注意的是如果bin目录下没有ls.exe、chown.exe等文件,是因为cwRsync客户端不安装这些文件,但是服务器端的bin目录下是有的,所以需要把这些文件拷贝过来。我太有才了。

再次执行批处理,成功了,开始同步文件。

 

虽然能够执行了,但是看执行的日志还是有错误信息,failed to set times on "." 

从网上查了一下,好象是写入的路径没有配置文件中uid和gid 的权限,但是uid和gid都是=0,不说是匿名吗?迷糊。干脆给这个路径添加everyone用户组的完全控制权限。

没想到这么一弄还真整成了,错误提示没有了,同步执行也成功完成。我真太有才了。

至此,windows之间的cwRsync同步配置成功完成。

 

二、Linux到windows的数据同步

1、服务器端配置

在E盘下建立100.31文件夹,在rsyncd.conf文件中添加模块100.31

[100.31]

path = /cygdrive/e/100.31

read only = false

transfer logging = yes

auth users = Administrator

secrets file = /cygdrive/c/rsync.secrets

2、客户端配置

客户端为linux系统,地址为192.168.100.31,建立测试文件夹/test,放入部分测试文件。

创建密码文件rsync.pwd,并将权限设为600,否则会报错password file must not be other-accessible

执行同步命令

rsync -av --password-file=/etc/rsync.pwd /test/ Administrator@192.168.100.223::100.31

执行成功,仍然提示failed to set times on "." ,跟刚才一样,把服务器端文件夹100.31添加everyone用户组的完全控制权限,就没问题了。

至此,Linux到windows的rsnyc数据同步配置完成,貌似linux的Rsync客户端不用安装。