Loading... # 使用 Rsync 实现Window与Linux间的数据远程同步、增量备份 > 使用 Rsync 实现Window与Linux间的数据同步,windows同步数据到Linux、Linux同步数据到Windows。 > 我们一般都是在 Linux 上使用 rsync 同步数据。大家对Linux的rsync也都比较熟悉,操作也比较简单; > 那么,有时候,我们也需要在Windows与Linux时间实现数据的直接同步,这样我们同样可以使用 Rsync + cwrsync 实现同步; **优点:** - 支持互相数据同步; - 配置简单; - 支持增量备份; ## rsync配置 以 Windows 作为客户端,Linux 作为服务端进行演示。 ### Linux rsync 配置 #### 安装 rsync 检查是否安装了 rsync ``` rpm -qa|grep rsync ``` 输出如下 ``` root@dwtowen: ~ # rpm -qa|grep rsync [16:22:12] rsync-3.1.3-9.el8.x86_64 ``` 或者直接看版本或者直接输入终端输入 `rsync` ``` rsync --version ``` 输出如下 ``` root@dwtowen: ~ # rsync --version [16:25:03] rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. ``` 则证明已安装。 如没有安装,则需要先安装 rsync 安装可参考我博客另一篇文章:[Linux安装yum安装rsync 、Linux编译安装最新版rsync](https://blog.dwtowen.com/archives/297/) <div class="tip inlineBlock error"> 以下:编写配置文件、创建目标同步文件夹、创建同步密码为必须步骤。记得更改密码文件的权限。 </div> #### 编写配置文件 **打开或新建配置文件** ``` vim /etc/rsyncd.conf ``` 这里,可能会有人问:我 `/etc/` 目录下,没有你说的 rsyncd.conf 。正常来说,确实是没有这个文件的,这里不用管,没有我们就直接新建就好了。 * /tmp/rsync -> 待同步的目标目录,路径可以自定义 * /etc/rsyncd.passwd ->里面包含用于进行密码验证的账号信息 **/etc/rsyncd.conf 的配置** ``` # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # 进行通信的端口,如果 firewall 打开的话,需要将对应的端口添加进去 port=8888 # 日志文件 log file=/var/log/rsync.log # rsync 的进程 id pid file=/var/run/rsync.pid # 要同步的模块,这里一般以项目名命名 [myrsync] # 同步的目标文件夹 path=/tmp/myrsync # 要同步的模块,这里一般以项目名命名 [myrsync1] # 同步的目标文件夹 path=/tmp/myrsync1 # rsync daemon 在传输前是否切换到指定的 path 目录下,并将其监禁在内,用于增加传输的安全性 use chroot=no # 指定最大的连接数 max connections=10 # yes 表示只读本地文件无法同步到服务器 read only=no # 客户端请求显示模块列表时,该模块是否显示出来 list=true # 服务运行时的用户 uid=root # 服务运行时的用户组 gid=root # 进行验证时的用户名,必须是系统存在的用户 auth users = root # 连接用户时的密码 secrets file=/etc/rsyncd.passwd # 允许的 ip hosts allow=* ``` #### 创建目标的文件夹 也就是需要同步的文件夹,同步模块 path 文件夹,可创建多个模块,同步不同的文件夹; ``` mkdir /tmp/myrsync ``` #### 创建密码 ``` vim /etc/rsyncd.passwd ``` **写入密码内容** ``` root:123456 ``` **保存** ``` :wq ``` **更改文件权限** ``` chmod 600 /etc/rsyncd.passwd ``` **重启rsync** ``` systemctl restart rsyncd ``` 或者 ``` sudo rsync --daemon --config=/etc/rsyncd.conf ``` 似乎重启操作也不是必须的; ### windows 配置 **下载安装cwrsync** [cwrsync官网,点击直达](https://www.itefix.net/cwrsync) ``` https://www.itefix.net/cwrsync ``` **拷贝解压文件到目录** 1. 解压文件,解压后的文件夹可自定义,如我的 `cwrsync_6.2.1_x64`; 2. 将文件夹 `cwrsync_6.2.1_x64` 拷贝至自己想安装的目录 如我的 `D:\Program Files\cwrsync_6.2.1_x64` ,不建议目录有空格。 3. 如运行命令过程中,命令目录有空格,则需要在命令中将有空格的目录用双引号包括。Windows下命令行不识别空格,将找不到目录; **添加环境变量** 如我的安装目录是 `D:\Program Files\cwrsync_6.2.1_x64` 添加环境变量路径则为 `D:\Program Files\cwrsync_6.2.1_x64\bin` ,建议同时添加系统变量 `path` 和用户变量 `path` 。 这样,我们在使用`rsync` 同步命令的时候,就可以直接在命令行以 `rsync` 直接调用 `rsync.exe` 了。 不配置环境变量的话,需要先 cd 到 `D:\Program Files\cwrsync_6.2.1_x64\bin` 再运行 `rsync.exe` 来调用 rsync 同步。 **执行命令** Linux 服务器同步文件到 Windows 端 ``` rsync -avPz --port 8730 --password-file=/cygdrive/D/"Program Files"/cwrsync_6.2.1_x64/rsync.passwd --exclude-from=/cygdrive/C/test/exclude.txt root@Your IP or domain name::myrsync/ /cygdrive/C/test ``` Windows 服务器同步文件到 Linux 端 ``` rsync -avPz --port 8730 --password-file=/cygdrive/D/"Program Files"/cwrsync_6.2.1_x64/rsync.passwd --exclude-from=/cygdrive/C/test/exclude.txt /cygdrive/C/test root@Your IP or domain name::myrsync/ ``` **关于windows到windows的rsync的备份** 可参考我下边这篇文章:[cwRsync 实现 Windows到Windows远程备份、远程增量备份](https://blog.dwtowen.com/archives/300/) ``` # 常见的的参数 -a: 归档模式,使用递归传输并保持文件的属性 -v: 显示传输过程中的详细信息 -P: 显示文件传输的进度信息 -z: 传输中进行压缩,提高传输速度 --password-file: 登录时用到的密码文件,该文件直接把密码包含就可以,用户名需要显式指定 --exclude-from: 指定不需要进行传输的文件和文件夹 --delete: 在 exclude/include 规则生效后执行,假如服务器中文件比传入的文件多,则删除,少的话,则添加。 ``` 详细参数可参考我另一篇博客文章:[cwRsync命令大全,命令参数详解](https://blog.dwtowen.com/archives/301/) <div class="tip inlineBlock warning"> 在指定文件夹目录时,进入在真实目录前添加 `/cygdrive/` 如:C盘根目录下的 test 文件夹:`/cygdrive/C/test/`; 如:D盘根目录下的 test 文件夹:`/cygdrive/d/test` ; </div> **比如密码文件的路径:** 实际 Windows 下的路径: ``` D:\Program Files\cwrsync_6.2.1_x64\rsync.passwd ``` cwRsync 写法: ``` /cygdrive/D/"Program Files"/cwrsync_6.2.1_x64/rsync.passwd ``` **如排除文件的路径** 排除文件的路径: ``` /cygdrive/C/test/exclude.txt ``` **同步到本地文件夹路径** ``` /cygdrive/C/test ``` 最后两个参数,表示想要传送的文件夹,以及服务器的 iP&域名 以及认证的用户和模块、 `root@Your IP or domain name::myrsync/` -> 用户名为 `root` ,`myrsync` 表示传入的模块,均在服务端进行配置 **密码文件 rsync.passwd 的内容,直接写密码内容即可** ``` 123456 ``` **关于排除文件 exclude.txt 的实例** ``` # 目录:在里面添加要的排除的目录以 `/` 结束; aspnet_client/ Bin_New/ # 文件 .classpath .class .log 1.doc 2.txt ``` 关于 [cwRsync 实现 Windows到Windows远程备份、远程增量备份](https://blog.dwtowen.com/archives/300/) ,可参考我博客的这篇文章; End Thanks!♈ 最后修改:2021 年 02 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏