方案规划
机房共有服务器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/ [email protected]::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/ [email protected]::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/ [email protected]::100.31
执行成功,仍然提示failed to set times on "." ,跟刚才一样,把服务器端文件夹100.31添加everyone用户组的完全控制权限,就没问题了。
至此,Linux到windows的rsnyc数据同步配置完成,貌似linux的Rsync客户端不用安装。