本文记录对一次Windows之间文件同步的过程。
目的
将两个A电脑上100g的文件同步到B电脑上, A、B两台电脑都是Windows操作系统。
工具
- syncthing
- rsync(cwrsync)
过程
- 尝试过将整个数据压缩, 但是通过7zip工具压缩后的zip文件,在解压时提示
The Compressed Zipped Folder Is Invalid Error
错误。可能是因为压缩文件太大吧, 笔者的文件系统是NTFS。 - 尝试网上比较推崇的syncthing, 一通操作下来实在太卡了。 用的是有界面的版本
SyncTrayzorPortable
。 - 最后还是使用rsync, 最开始想用来着, 发现windows版本不好搞, Linux可直接apt或yum进行安装。 最后使用了Windows版本的
cwrsync
。
下文着重讲一下cwrsync的配置使用过程。
cwrsync使用过程
rsync 是一个用于在本地或远程系统之间同步文件和目录的命令行工具。它能够快速、灵活地传输数据,并支持增量同步,只传输文件的变化部分,从而减少数据传输量。
rsync是C/S架构, 所以一般一端安装服务程序, 其他端安装客户端程序。 windows版本下载
- cwrsync server
- cwrsync client
安装服务程序
解压下载的安装程序进行安装。
安装cwrsync需要提供一个用户名密码, 该用户名密码将会创建一个windows账号密码, 用于运行cwrsync程序的。
安装后其目录结构如下:
│ fstab.txt
│ rsyncd.conf
│ uninstall_cwRsyncServer.exe
│ uninstall_ICW_Base.exe
│ uninstall_ICW_RsyncServer.exe
│
├─bin
│ rsync.exe
| ...
├─doc
├─etc
└─tmp
配置cwrsync server
配置根级目录下存在rsyncd.conf
配置文件, 修改文件内容:
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
port = 8173
uid = 0
gid = 0# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[sandbox]
path = /cygdrive/H/
read only = false
transfer logging = yes
hosts allow = *
新增项:
port = 8173 # 用于配置rsync服务端口, 默认端口为873
uid = 0 # 配置用户id, 如果不配置会报错`invalid uid nobody`
gid = 0 # 配置组id
注意项:
- [***]及其下面的配置仅用于配置某个模块,代表一个资源的配置。 其中模块名称[sandbox]中的内容可调整, 默认为[test], 可更改为任意你想定义的名称。
- 模块中的路径配置path需要按照
cygwin
的命名约定, 上述配置的/cygdirve/H/
表示路径为H盘根目录, 该路径为服务端同步的目录。多个目录需要配置在不同的模块中。 hosts allow
用于限定访问的主机, 可直接指定ip地址, 多个用英文逗号相隔。- 还可添加
auth users
, 用于数据同步时的用户认证, 多个可用逗号相隔。 - 如果配置了用户认证,需要对应配置密码文件
secrets file
, 该选项指定的文件包含了用户密码, 形如username:password
- 其他配置可参考rsync的配置, 其配置项目是一样的。
笔者并未配置用户认证
启动服务
配置完成后, 需要在windows 服务中找到RsyncServer, 并启动。之后就可以通过客户端进行文件同步了。
安装客户程序
找到对应的安装包, 指定安装目录进行安装。 安装后其目录结构如下:
│ cwrsync.cmd
│ license.txt
│ uninstall.exe
├─bin
│ chmod.exe
│ plink.exe
│ puttygen.exe
│ rsync.exe
│ rsync.exe.stackdump
│ sechaw.exe
│ SecureChannelWizard.exe
│ ssh-keygen.exe
│ ssh-keyscan.exe
│ ssh.exe
| ...
└─doc
使用客户端进行同步
打开命令行工具, 打开客户端安装目录的bin目录, 执行同步命令。
笔者使用的同步命令如下
rsync.exe -avz rsync://192.168.x.x:8173/sandbox /cygdrive/G/
该命令用于将服务端模块sandbox
指定的目录中的文件, 递归同步到当前机器的G盘根目录下。
其他方式
rsync.exe -avz username@192.168.x.x::模块名称 /cygdrive/G/
指定了用户名, 还可以指定密码等
更多命令及选项参考rsync 用法教程
注意
- 注意防火墙配置
- 查看服务是否启动
结论
同步文件还得是rsync