天天看点

Windows 文件同步方案讨论

在日常运维工作中,经常会遇到这样的情况:我们需要在无人值守的情况下完成文件、文件夹的同步过程,已实现周期性的备份,避免单点故障。本研究实现了本地Windows主机与远程Windows主机,本地Windows主机与远程Linux主机目录的定时自动同步。实验在Windows2003,REHL5.4下实验通过。

一、软件准备

Linux下有rsync,Windows下也有类似的软件,就是cwRsync,此软件分为服务器端/客户端。目前最新版本为:4.04版,cwRsyncServer_4.0.4_Installer,cwRsync_4.0.4_Installer。

cwRsync打包了Rsync和Cygwin,使用cwRsync可以进行快速的远程备份和同步。Rsync使用了Rsync算法,通过它可以非常快的进行远程文件的同步。这种算法只需要在链路上传递文件不同的部分,而不需要提前在一端准备好文件所有版本的。乍一看这似乎是不可能的,因为计算两个文件之间的不同,通常需要本地访问的这两个文件。

Rsync通常使用ssh进行数据通讯,安装它不需要任何特殊权限,但是你必须有一个可以运行ssh软件系统。

作为选择,rsync可以运行在守护进程模式,监听一个socket端口。这通常是用于公共文件的分发,虽然身份验证和访问控制是可利用的。Cygwin是一个Windows下类linux系统环境。它由一个DLL(cygwin1.dll),模拟大量的Linux API功能,以及工具的集合。

详细情况可通过http://itefix.no/cwrsync/了解。

二、初始化安装

cwRsync支持多种平台:client – NT/2000/XP/2003/Vista/7,Server – NT/2000'/2003/2008/Vista/7.

cwRsync已一个zip压缩包包含一个Windows下安装程序形式发布。解压下载文件,运行cwRsync_x.x.x_Installer.exe或者cwRsync_Server_x.x.x_Installer.exe(服务器版):

  1. 欢迎页面,点击“Next”进入 。
  2. 查看License协议。
  3. 根据安装包的不同选在安装组件:客户端安装包有一个可选项(Secure Channel Wrapper & Wizard),它做一个简单的工作,安装一个安全的连接方式与服务器端程序。
  4. 指定一个安装路径。
  5. 指定一个服务器的账户(仅服务器端程序)。
  6. 安装开始。可以点击“Details”按钮,查看更多关于安装的详细信息。
OK,cwRsync已经安装成功。

cwRsync服务器端,需要根据需要修改配置文件。安装过程中会自动创建SvcCWRSYNC用户,所属user组。如果定义了上传模块,则必须保证cwRsync server有正确的权限可以访问目录。可以通过开始菜单程序快速访问此配置文件。

cwRsync Server会安装为WINDOWS服务,启动参数为:--config rsyncd.conf --daemon --no-detach。默认自动启动。

三、实验环境

服务端(需要背同步的数据所在的服务器):192.168.1.10

客户端(需要将数据同步的服务器):192.168.1.20

需要被同步的数据:d:/resource

需要同步到d:/back/resource

Server:

修改rsyncd.conf

1: uid = 0

2: gid = 0

3: use chroot = false

4: strict modes = false

5: hosts allow = *

6: log file = rsyncd.log

7:  

8: # Module definitions

9: # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work

10: #

11: [RESOURCE]

12: path = /cygdrive/d/resource

13: read only = false

14: transfer logging = yes

15:  

.csharpcode, .csharpcode pre

{

font-size: small;

color: black;

font-family: consolas, "Courier New", courier, monospace;

background-color: #ffffff;

/*white-space: pre;*/

}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt

background-color: #f4f4f4;

100%;

margin: 0em;

.csharpcode .lnum { color: #606060; }

打开命令行窗口,然后执行: net start RsyncServer。服务器端准备完成。

Client:

打开命令行窗口,然后执行:rsync -avz 192.168.1.10::RESOURCE /cygdrive/e/back/resource

注意:如果刚刚没有把cwrsync的安装目录添加到windows的path变量中,系统是无法执行rsync命令的。添加方法,例如我把cwrsync的客户端安装在D:\Program Files\cwRsync,则需要把D:\Program Files\cwRsync\bin这个路径添加到windows的系统path变量中。添加之后需要重新打开cmd命令行窗口才可以执行上面的命令。

Bat脚本编写:

1: @ECHO OFF

2: REM *****************************************************************

3: REM

4: REM CWRSYNC.CMD - Batch file to start rsync command (s).

5: REM

6: REM By David.Jin

7: REM *****************************************************************

8: SETLOCAL

9: SET STIME=%date:~0,10% %time:~0,8%

10: SET CWRSYNCHOME=%PROGRAMFILES%\RSYNC

11: SET CWOLDPATH=%PATH%

12: SET PATH=%CWRSYNCHOME%\BIN;%PATH%

13: rsync -avz 192.168.1.10::RESOURCE /cygdrive/e/back/resource

14: SET ETIME=%date:~0,10% %time:~0,8%

15: ECHO 脚本开始时间: %STIME%

16: ECHO 脚本结束时间:%ETIME%

17: PAUSE

继续阅读