场景描述
需要将Linux服务器某个目录下的所有文件定期同步到WindowsServer2022服务器上
在Windows Server 2022服务器上先安装部署cwRsyncServer
1、下载CwRsyncServer V4.1.0 以管理员身份运行进行安装
CwRsyncServer_V4.1.0_XiTongZhiJia.zip
2、系统自动创建用户SvcCWRSYNC,无需修改用户名,修改好密码并记住,然后直接默认安装
安装过程会给系统创建用户,让防护软件放行。
3、呼出系统服务,属性-服务启动设置为自动-登入账号密码为刚刚安装时默认账号和修改的密码。
我反复装了好几次,最后成功的一次是使用默认账号和修改的密码登入。所以觉得前几次的坑都是这里没有使用默认账号导致客户端连不上来。
4、修改配置!!! C:\Program Files (x86)\ICW目录下修改rsyncd.conf
uid = 0
gid = 0
use chroot = false
strict modes = false
#这里↓如果只允许某一个机器访问的话,可以填写IP地址
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid
#端口↓默认是873
port = 873
#允许的最大连接数↓
max connections = 4
# Module definitions
# Remember cygwin naming conventions : c:work becomes /cygwin/c/work
# 模块↓
[backup]
#路径↓这个是需要同步的文件位置,Windows目录的写法,应该按照POSIX风格来写,
#默认配置文件的写法cygwin貌似不工作,而要写成cygdrive,如D:/data,要写成/cygdrive/d/data。
path = /cygdrive/c/ftp
#只读或者读写↓read only = true 表示客户端只能下载服务端的文件而不能上传(单向同步).如果有上传需要,设置read only = false 即可.
read only = false
transfer logging = yes
lock file = rsyncd.lock
#下方↓secrets file密码文件中的用户名
auth users = cwrsync
#密码文件存放的路径↓
secrets file = etc/cwrsync.passwd
uid = 0
:- 这指定了
rsync
服务运行的用户的ID。在这里,0
是root
用户的ID,意味着rsync
服务将以root
用户权限运行。
- 这指定了
gid = 0
:- 这指定了
rsync
服务运行的组的ID。0
通常对应于root
组。
- 这指定了
use chroot = false
:- 这个设置禁用了
chroot
功能,chroot
是一种安全措施,可以将rsync
进程限制在特定的目录结构中,防止它访问文件系统的其他部分。
- 这个设置禁用了
strict modes = false
:- 这禁用了严格模式,允许
rsync
与具有不同权限的文件进行交互,而不会报错。
- 这禁用了严格模式,允许
hosts allow = *
:- 这允许任何客户端连接到
rsync
服务器。在生产环境中,出于安全考虑,通常会指定特定的IP地址或IP范围。
- 这允许任何客户端连接到
log file = rsyncd.log
:- 这指定了
rsync
服务的日志文件名。
- 这指定了
pid file = rsyncd.pid
:- 这指定了
rsync
服务的进程ID文件名,用于记录rsync
服务的进程ID。
- 这指定了
port = 873
:- 这指定了
rsync
服务监听的端口号,这里是873
。
- 这指定了
max connections = 4
:- 这指定了
rsync
服务允许的最大连接数,这里是4
。
- 这指定了
接下来是模块定义部分:
[backup]
:- 这是模块的名称,客户端将使用这个名称来访问同步的内容。
path = /cygdrive/c/ftp
:- 这指定了模块的路径,即远程服务器上同步文件存放的目录。
read only = false
:- 这指定了模块不是只读的,客户端可以向该模块写入文件。
transfer logging = yes
:- 这指定了开启传输日志记录。
lock file = rsyncd.lock
:- 这指定了
rsync
服务使用的锁文件,用于同步过程中的并发控制。
- 这指定了
auth users = cwrsync
:- 这指定了允许认证并使用该模块的用户列表,这里是
cwrsync
用户。
- 这指定了允许认证并使用该模块的用户列表,这里是
secrets file = etc/cwrsync.passwd
:- 这指定了包含用户认证信息的密码文件,这里是
/etc/cwrsync.passwd
文件。
- 这指定了包含用户认证信息的密码文件,这里是
综上所述,这个配置文件定义了一个 rsync
服务器,允许用户 cwrsync
通过端口 873
访问 backup
模块,并且可以进行读写操作。服务器将记录所有传输活动到 rsyncd.log
文件,并且会使用 rsyncd.pid
文件记录进程ID。同时,服务器将使用 /etc/cwrsync.passwd
文件来验证连接的用户。
uid = 0 gid = 0 记得加上,解决@ERROR: invalid gid nobody报错问题
5、在 C:\Program Files (x86)\ICW\etc
目录下创建cwrsync.passwd密码文件
cwrsync:123456
还要设置好权限
6、添加cwRsyncServer 873端口的入站防火墙规则 放通入方向的873端口
7、然后启动RsyncServer服务
Linux端部署rsync客户端并测试
Linux端的rsync部署就百度吧。
一般默认都会带吧~
同步命令:
#linux>windows
rsync --progress -avz --delete /home/ixjkj/sync* cwrsync@192.168.0.111::backup
#windows>linux
rsync --progress -avz --delete cwrsync@192.168.0.111::backup /home/ixjkj/sync*
rsync
:是命令的名称,用于文件同步和传输。--progress
:显示文件传输过程中的进度信息。-a
(archive):归档模式,该选项通常用于备份,它会保留文件的权限、时间戳、软硬链接以及文件模式。-v
(verbose):详细模式,增加输出的详细程度,可以显示处理的文件信息。-z
(compress):压缩模式,在传输过程中压缩数据,以加快传输速度,节省带宽。--delete
:在同步完成后,删除目标位置中本地不存在的文件,使得源和目标目录保持完全一致。/home/ixjkj/sync*
:指定本地同步的文件或目录,星号(*
)是一个通配符,匹配所有的文件和目录。cwrsync@192.168.0.111
:指定远程服务器的用户名和地址。在这个例子中,用户名是cwrsync
,服务器的IP地址是192.168.0.111
。::backup
:指定远程服务器上的模块名。rsync
支持模块化配置,backup
是在远程服务器的rsync
配置文件中定义的一个模块。
综上所述,该命令的作用是:
- 从本地的
/home/ixjkj/sync
目录同步所有文件和子目录到远程服务器(192.168.0.111
)上定义的backup
模块。 - 传输过程中显示进度,并且提供详细的输出。
- 数据在传输时会被压缩。
- 归档模式确保同步时保留原始文件的所有属性。
- 同步后,远程服务器上
backup
模块中本地不存在的文件将被删除。
在执行此命令之前,需要确保:
- 远程服务器上已经配置了
rsync
服务,并且backup
模块已经定义在rsyncd.conf
文件中。 - 本地用户具有访问远程服务器的权限,并且知道正确的用户名和密码或拥有相应的私钥进行认证。
- 端口22(SSH默认端口)在服务器上是开放的,除非
rsync
服务配置了使用其他端口。
注意:在实际使用中,根据具体环境和需求,可能需要对命令进行调整。
编写脚本,利用crontab实现定时同步
1、新建和编辑一个cwrsync.sh文件
nano /home/ixjkj/cwrsync.sh
填入后保存
#!/bin/bash
rsync --progress -avz --delete cwrsync@192.168.0.111::backup /home/ixjkj/sync* >/dev/null 2>&1
给执行权限
chmod 755 /home/ixjkj/cwrsync.sh
2、利用crontab实现定时同步
crontab定义
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
crontab -e
#例如每5钟同步一次
*/5 * * * * /home/ixjkj/cwrsync.sh
crontab -l
查看服务端日志,5分钟一次
linux中重启rsync服务
使用root用户或具有sudo权限的用户登录到Linux系统。
打开终端或命令行界面。
停止rsync服务:sudo systemctl stop rsync.service
等待一段时间,确保rsync服务已停止。
启动rsync服务:sudo systemctl start rsync.service
检查rsync服务是否已经启动:sudo systemctl status rsync.service
按参考
部署CwRsyncServer实现Linux下文件同步到WindowsServer服务器
rsync,从零开始Nas备份
rsync --progress -avz --delete --itemize-changes --log-file=/var/log/rsynclog/rsync.log --log-file-format='%t %f %b' /home/ixjkj/sync cwrsync@192.168.0.111::backup
这条 rsync
命令用于将本地的 /home/ixjkj/sync
目录同步到远程服务器上的 backup
模块,并且包含了一些控制日志记录和同步行为的选项。下面是对命令中每个参数的解释:
rsync
:命令的名称,用于文件同步和传输。--progress
:显示文件传输进度。-avz
:-a
:归档模式,递归地复制文件并保持大部分文件属性,如权限、时间戳、软硬链接等。-v
:详细模式,提供更详细的输出。-z
:压缩模式,在传输过程中压缩数据,以加快传输速度。
--delete
:在同步后删除远程backup
模块中本地/home/ixjkj/sync
目录不存在的文件。--itemize-changes
:为所有更新显示变化摘要。--log-file=/var/log/rsynclog/rsync.log
:将rsync
的日志输出到指定的/var/log/rsynclog/rsync.log
文件。--log-file-format='%t %f %b'
:为日志文件指定格式,其中%t
表示时间戳,%f
表示文件名,%b
表示文件大小(以字节为单位)。/home/ixjkj/sync
:本地的源目录,即该目录将被同步到远程的backup
模块。cwrsync@192.168.0.111::backup
:指定远程服务器的用户名cwrsync
,IP 地址192.168.0.111
,以及rsync
守护进程上配置的模块名backup
。
综上所述,该命令的作用是:
- 将本地的
/home/ixjkj/sync
目录同步到远程服务器(192.168.0.111
)上的backup
模块。 - 显示文件传输的进度。
- 同步时保持文件的权限、时间戳和链接,并进行数据压缩。
- 同步结束后,删除远程模块中本地不存在的文件。
- 记录所有变化的详细摘要到日志文件。
- 使用指定的格式将日志信息记录到
/var/log/rsynclog/rsync.log
。
在执行该命令之前,请确保:
- 远程服务器的
rsync
服务已经配置了backup
模块,并且正在运行。 - 用户
cwrsync
有权限访问远程服务器上的backup
模块。 - 本地用户有权限读取
/home/ixjkj/sync
目录的内容,以及写入/var/log/rsynclog/
目录(如果该目录不存在,需要先创建它)。 - 确保网络连接稳定,以避免因超时导致同步中断。
注意:命令中的 --progress
选项在某些 rsync
版本中可能已被 --progress
替代,但两者在功能上是等效的。
{/collapse-item}
评论 (0)