Windows 平台上使用 cwRsync做文件同步

 前言

1.1 概述

本文介绍 Windows 平台上使用cwRsync 客户端实现本地文件实时同步和远程实时同步的方法。

1.2 实验环境

服务器和操作系统:

两台Windows Server 2008 服务器,一台linux CentOS 7服务器。

   

本地同步的环境信息:

源文件夹:D:/data/

目标文件夹:D:/backup/

 

远程同步的环境信息:

源Windows服务器IP地址:10.19.170.119

源文件夹:D:/data/

 

目标linux服务器IP地址:10.19.170.227

目标文件夹:/root/backup/

2. Windows同步到Windows

2.1 本地实时同步

 1. 在本地 windows服务器上安装 cwRsync 客户端。

 (1.1) 在 https://www.itefix.net/cwrsync 下载cwRsync客户端

注意:cwRsync 软件分为服务端和客户端。其中,服务端软件是收费的,客户端软件是免费的。这里只需要下载cwRsync 客户端。

 (1.2) 下载完后,解压文件,得到文件夹cwRsync_5.5.0_x86_Free

 (1.3) cwRsync_5.5.0_x86_Free 移动到常用的程序安装目录,这里我们移动到D:\Program Files\

 (1.4) 打开文件夹cwRsync_5.5.0_x86_Free,编辑其中的文件cwrsync.cmd

   里面有一行:

IF NOT EXIST %CWRSYNCHOME%\home\%USERNAME%\.ssh

MKDIR %CWRSYNCHOME%\home\%USERNAME%\.ssh

%CWRSYNCHOME% 的两边加上英文双引号””,并保存。如图:

 

 (1.5) 双击修改后的cwrsync.cmd,程序会在D:\Program Files\cwRsync_5.5.0_x86_Free 下面创建一个目录 home,并把目录 bin 的路径注册到环境变量 path 中。

 

2. 如果要实现实时同步,需要时刻监控文件夹的变化。Windows 本身提供了监控文件系统的功能。我们可以使用 powershell 来调用相关功能。

    我们在“D:\realtime_sync\中,编写脚本文件realtime_sync.ps1,其内容如下。它能够监控指定文件夹“D:\data”的变化(包括文件和文件夹的创建、重命名、删除以及子文件夹中内容的变化),并将差异部分同步到远程服务器10.40.239.236的备份目录d:\backup\ 中。监控的周期是2s

 

set-ExecutionPolicy unRestricted -force

$DebugPreference="inquire"

 

# 定义要监控的文件夹,这个文件夹必须先存在。

$sourceDir = 'D:\data\'

 

# linux 风格的文件夹路径,要以/cygdrive/ 开头,盘符后面没有“:”

$sourceDirLinuxStyle = '/cygdrive/d/data/'

 

#远程主机上的备份目录, linux 风格, 要以/cygdrive/ 开头,盘符后面没有“:”

$targetDir = ''/cygdrive/d/backup/'

 

# 定义每次监控的间隔时间,这里定义为2000毫秒,即2

$timeout = 2000

# 创建文件系统监视对象

$FileSystemWatcher = New-Object System.IO.FileSystemWatcher $folder

Write-Host ” CTRL+C 来退出对文件夹 $folder 的监控

while ($true) {

  # 监控文件夹内的所有变化

  $result = $FileSystemWatcher.WaitForChanged('all', $timeout)

  if ($result.TimedOut -eq $false)

   {

    rsync -avz --delete $sourceDirLinuxStyle $targetDir

   }

Write-Host '监控被取消.'

 

 

3. 在后台运行该脚本:

powershell -windowstyle hidden D:\realtime_sync\realtime_sync.ps1.ps1

 

4. 如果想结束该进程,可以执行:

Get-WmiObject -class win32_process -filter "(name='powershell.exe' and CommandLine like '% D:\\realtime_sync\\realtime_sync.ps1%')" | ForEach-Object{$_.Terminate()  | Out-Null }

 

2.2 远程实时同步

Windows 平台间实时同步的方法很多,有很多第三方工具,这里不介绍。大家可以搜索。

 

3.Windows 同步到 Linux

1. 在源主机,windows服务器上安装 cwRsync 客户端。

(1.1) 在 https://www.itefix.net/cwrsync 下载cwRsync客户端

注意:cwRsync软件分为服务端和客户端。其中,服务端软件是收费的,客户端软件是免费的。这里只需要下载cwRsync 客户端。
 

(1.2) 下载完后,解压文件,得到文件夹cwRsync_5.5.0_x86_Free

(1.3) cwRsync_5.5.0_x86_Free 移动到常用的程序安装目录,这里我们移动到D:\Program Files\

(1.4) 打开文件夹cwRsync_5.5.0_x86_Free,编辑其中的文件cwrsync.cmd 。里面有一行:

IF NOT EXIST %CWRSYNCHOME%\home\%USERNAME%\.ssh
MKDIR %CWRSYNCHOME%\home\%USERNAME%\.ssh
%CWRSYNCHOME% 的两边加上英文双引号 "",并保存。如图:   
 
   

(1.5) 双击修改后的cwrsync.cmd,程序会在D:\Program Files\cwRsync_5.5.0_x86_Free 下面创建一个目录 home,并把目录 bin 的路径注册到环境变量 path 中。

 

2. 注意,为了使cwRsync 的功能可用正常使用,需保证环境变量path中不存在其他包含 rsync.exessh.exe ssh-keygen的文件夹,或者虽然存在包含这些可执行程序的文件夹,但它们在path中的位置在cwRsync的路径后面。

例如:系统中有两个ssh时,

                   

就要保证 path 中,

“D:\Program Files\cwRsync_5.5.0_x86_Free\bin; ” 在 “C:\Program Files\Git\usr\bin;” 的前面。
 

3. 在目标主机,linux 服务器上,安装rsync lsync中的一个。

 rsync 的安装方法:

yum install rsync


lsync 的安装方法:

sudo yum install epel-release

sudo yum install lsyncd

 

4. 如果要求源主机主动将文件的差异部分发送给目标主机, 那么源主机需要免密连接到目标主机。所以要在源主机生成公钥和私钥,命令如下:

ssh-keygen -t rsa

 

输入命令后只需要一直点击enter键即可,直到出现如图界面,那么它提示你公钥和私钥保存在哪个位置。

打开公钥文件:

D:\Program Files\cwrsync_5.5.0_x86_free \home\Administrator\.ssh\id_rsa.pub

复制它的内容。

      

5. 在目标主机中,进入目录 /root/.ssh,编辑文件 authorized_keys,将源主机公钥的内容粘贴到文件末尾。

 

6. 在源主机和目标主机上启动rsyncdlsyncd,并设置为开机自启动

systemctl start rsyncd

systemctl enable rsyncd

或者

systemctl start lsyncd
systemctl enable lsyncd

 

7. 这样,当我们执行

rsync -a -e " .\ssh -p 22" "/cygdrive/d/data/"  [email protected]:/root/backup


即可将 windows 服务器上的 D:\DATA 的内容同步到 linux 服务器的/root/backup/ 中。

8. 如果要实现实时同步,需要时刻监控文件夹的变化。Windows 本身提供了监控文件系统的功能。我们可以使用 powershell 来调用相关功能。

我们在D:\realtime_sync\中,编写脚本文件realtime_sync.ps1,其内容如下。它能够监控指定文件夹“D:\data”的变化(包括文件和文件夹的创建、重命名、删除以及子文件夹中内容的变化),并将差异部分同步到远程服务器10.40.239.236的备份目录/root/backup/中。监控的周期是2s

 

set-ExecutionPolicy unRestricted -force

$DebugPreference="inquire"

 

# 定义要监控的文件夹,这个文件夹必须先存在。

$sourceDir = 'D:\data\'

 

# linux 风格的文件夹路径,要以/cygdrive/ 开头,盘符后面没有“:”

$sourceDirLinuxStyle = '/cygdrive/d/data/'

 

#远程主机上的用户

$romoteUser = 'root'

 

#远程主机的地址

$remoteHost = '10.40.239.227'

 

#通信的端口

$remotePort = “22”

 

#远程主机上的备份目录

$targetDir = '/root/backup/'

 

# 定义每次监控的间隔时间,这里定义为2000毫秒,即2

$timeout = 2000

# 创建文件系统监视对象

$FileSystemWatcher = New-Object System.IO.FileSystemWatcher $folder

Write-Host ” CTRL+C 来退出对文件夹 $folder 的监控

while ($true) {

  # 监控文件夹内的所有变化

  $result = $FileSystemWatcher.WaitForChanged('all', $timeout)

  if ($result.TimedOut -eq $false)

   {

    rsync -avz --delete $sourceDirLinuxStyle –port=$remotePort $romoteUser”@”$remoteHost”:”$targetDir

   }

Write-Host '监控被取消.'

 

9. 在后台运行该脚本:

powershell -windowstyle hidden D:\realtime_sync\realtime_sync.ps1.ps1

 

10. 如果你想结束该进程,执行下面的命令即可:

Get-WmiObject -class win32_process -filter "(name='powershell.exe' and CommandLine like '% D:\\realtime_sync\\realtime_sync.ps1%')" | ForEach-Object{$_.Terminate()  | Out-Null }

 

猜你喜欢

转载自blog.csdn.net/international24/article/details/107498925