2、linux到windows
2、实战:从linux同步数据到winodws(增量定时同步)-2023.11.30(测试成功)
目录
[toc]
环境
linux服务器:centos7.9.2009 (rsync version 3.1.2 )
win10 (cwRsync_4.1.0_Installer.exe)
- 软件
链接:https://pan.baidu.com/s/1Kkps6jeW5v8fcUQN7lcw5g?pwd=3w2g
提取码:3w2g
2023.11.30-rsync-winodws客户端软件
需求
如何利用rsync实现从linux服务器同步数据到windows电脑上?
自己业务背景:
目前自己已经实现了利用ecs的nginx提供公网md图床,同时也利用ShareX
截图软件在上传图片时会保存一份图片到本地(然后保存在百度网盘同步空间
)。
以上方案已经完全保证md图床数据的容灾性及备份性。
但是,如何保证将ecs图床数据备份到本地wingdows呢,方便后续数据迁移?
因此rsync
是一个非常优秀的选择方式。
gpt提问
2023年11月30日提问
如何利用rsync实现从linux服务器同步数据到windows电脑上?
在 Windows 上使用 rsync 同步数据通常需要使用类似于 Cygwin 的工具,因为 rsync 是一个在类 Unix 系统上运行的工具。以下是基本的步骤:
-
安装 Cygwin:
- 下载并运行 Cygwin 安装程序:Cygwin 官方网站
- 在安装过程中,选择需要的组件。确保选择了 rsync 和 openssh 等相关组件。
-
配置 SSH 访问:
- 在 Windows 上,确保已经安装了 SSH 客户端。你可以使用 Cygwin 提供的 OpenSSH,或者其他的 SSH 客户端。
- 在 Linux 服务器上,确保 SSH 服务器已经正确配置,并且你的 SSH 密钥已经添加到服务器上。你可以使用
ssh-keygen
在 Windows 上生成 SSH 密钥,然后将公钥添加到 Linux 服务器上的~/.ssh/authorized_keys
文件中。
-
使用 rsync 进行同步:
-
打开 Cygwin 终端,在 终端中使用 rsync 命令进行同步。以下是一个例子:
bashrsync -avz -e "ssh -p PORT_NUMBER" user@your_server_ip:/remote/path/ /local/path/
-avz
选项表示以归档模式、递归、压缩的方式同步。-e
选项用于指定 ssh 的端口号,替换PORT_NUMBER
为实际的 SSH 端口号。user
是你在 Linux 服务器上的用户名。your_server_ip
是 Linux 服务器的 IP 地址。/remote/path/
是 Linux 服务器上要同步的目录路径。/local/path/
是 Windows 机器上存储同步数据的目录路径。
-
-
定时同步:
- 若要实现定时同步,你可以使用 Windows 的任务计划程序(Task Scheduler)来定期运行 rsync 命令。创建一个批处理文件包含 rsync 命令,然后将任务计划程序配置为定期运行这个批处理文件。
这样,你就可以使用 rsync 在 Linux 服务器和 Windows 电脑之间同步数据了。确保你的网络连接正常,SSH 配置正确,并根据实际情况修改 rsync 命令中的参数。
预期目的
源服务器地址:47.97.48.237 centos7 目标服务器地址: windows 10 (自己内网pc)
以下步骤达到的效果:
将公网服务器47.97.48.237的/images/目录
下的内容,同步到自己内网winodws pc的D/BaiduSyncdisk/cmi-MdImages-local
路径下。
1、开始部署
⚠️ 注意:
本次配置是在之前环境基础上配置的,之前自己的ecs已经配置好了rsync服务,本地windows pc也配置了,已经成功实现windows数据->linux数据同步了,具体链接可见下文:
https://onedayxyy.cn/docs/rsync-windows-to-linux
- 测试过程
#备份
[root@hexo-blog ~]# cp /etc/rsyncd.conf /tmp/
##编辑
[cmi-MdImages]
# 同步的目标文件夹
path=/test/
# rsync daemon 在传输前是否切换到指定的 path 目录下,并将其监禁在内,用于增加传输的安全性
use chroot=no
# 指定最大的连接数
max connections=4
# yes 表示只读本地文件无法同步到服务器
read only=no
# 客户端请求显示模块列表时,该模块是否显示出来
list=true
# 服务运行时的用户
uid=root
# 服务运行时的用户组
gid=root
# 进行验证时的用户名,必须是系统存在的用户
auth users = root
# 连接用户时的密码
secrets file=/etc/rsyncd.passwd
# 允许的 ip
hosts allow=*
##winodws -- linux
rsync.exe -avPzruh --delete --port 8730 --password-file=/cygdrive/D/password.txt /cygdrive/D/mkdocs/site root@47.97.48.237::cmi/
rsync.exe -avPzruh --delete --port 8730 --password-file=/cygdrive/D/password.txt root@47.97.48.237::cmi/ /cygdrive/D/mkdocs/site
##同步命令
rsync.exe -avPzruh --delete --port=873 --password-file=/cygdrive/e/软件/cwRsync/bin/password.txt root@47.97.48.237::cmi-MdImages /cygdrive/d/cmi-MdImages-local
cmi-MdImages-local
##创建测试文件
[root@hexo-blog ~]# mkdir /test
[root@hexo-blog ~]# echo test > /test/1.txt
[root@hexo-blog ~]# ll /test/1.txt
-rw-r--r-- 1 root root 5 Nov 30 05:44 /test/1.txt
##开始同步
##同步命令
rsync.exe -avPzruh --delete --port 8730 --password-file=/cygdrive/D/password.txt root@47.97.48.237::cmi-MdImages/ /cygdrive/D/cmi-MdImages-local
C:\Users\Win>rsync.exe -avPzruh --delete --port 8730 --password-file=/cygdrive/D/password.txt root@47.97.48.237::cmi-MdImages/ /cygdrive/D/cmi-MdImages-local
receiving incremental file list
rsync: failed to set permissions on "/cygdrive/D/cmi-MdImages-local/.": Permission denied (13)
./
1.txt
5 100% 4.88kB/s 0:00:00 (xfer#1, to-check=0/2)
sent 49 bytes received 104 bytes 102.00 bytes/sec
total size is 5 speedup is 0.03
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518) [generator=3.0.8]
C:\Users\Win>
- 报错了:。。。
虽然报错了,但是文件还是被同步下来了哦。
那我现在再次测试下看看:
[root@hexo-blog ~]# cd /test
[root@hexo-blog test]# dd if=/dev/zero of=big_file_500M bs=500M count=1
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 1.04746 s, 501 MB/s
[root@hexo-blog test]#
验证:
已经同步下来了。
- 那么,此时,我重新配置下同步信息:
[root@hexo-blog ~]# vim /etc/rsyncd.conf
……
##编辑
[cmi-MdImages]
# 同步的目标文件夹
path=/images/
# rsync daemon 在传输前是否切换到指定的 path 目录下,并将其监禁在内,用于增加传输的安全性
use chroot=no
# 指定最大的连接数
max connections=4
# yes 表示只读本地文件无法同步到服务器
read only=no
# 客户端请求显示模块列表时,该模块是否显示出来
list=true
# 服务运行时的用户
uid=root
# 服务运行时的用户组
gid=root
# 进行验证时的用户名,必须是系统存在的用户
auth users = root
# 连接用户时的密码
secrets file=/etc/rsyncd.passwd
# 允许的 ip
hosts allow=*
[root@hexo-blog ~]# systemctl restart rsyncd
##开始同步
##同步命令
#rsync.exe -avPzruh --delete --port 8730 --password-file=/cygdrive/D/password.txt root@47.97.48.237::cmi-MdImages/ /cygdrive/D/BaiduSyncdisk/cmi-MdImages-local
##删除--delete选项
rsync.exe -avPzruh --port 8730 --password-file=/cygdrive/D/password.txt root@47.97.48.237::cmi-MdImages/ /cygdrive/D/BaiduSyncdisk/cmi-MdImages-local
- 要同步的数据量还是很大的:(不过后续就就好了,都是增量同步的)
[root@hexo-blog ~]# ll /images/ |wc -l
9330
[root@hexo-blog ~]# du -shc /images/
2.7G /images/
2.7G total
[root@hexo-blog ~]#
- 同步完成:
2、配置windows定时
1、新建D:\rsyncMdImages.bat
文件,填入以下内容
rsync.exe -avPzruh --port 8730 --password-file=/cygdrive/D/password.txt root@47.97.48.237::cmi-MdImages/ /cygdrive/D/BaiduSyncdisk/cmi-MdImages-local
将该文件另存为rysnc.bat文件,编码为ANSI
注:如果编码为utf8,文本中的中文会出现乱码导致执行出错。
2、开启定时任务
批处理完成了,怎么来实现周期性的运行该脚本呢?windows自带了非常强大的定时任务功能。进入计算机管理(此电脑右键“管理”),在系统工具->任务计划程序->任务计划程序库中能看到你电脑所有的定时任务,右键可以创建基本任务。 (或者直接在cmd输入
compmgmt.msc
)
按图中输入名称及描述,点击下一步设置触发器(任务触发时间)
点击下一步设置任务执行操作,这里选择启动程序
选择刚才制作的bat脚本,点击下一步
点击完成创建任务
选择刚创建的任务,右键点击属性打开属性对话框,点击触发器并双击已设置的触发器设置任务重复执行
点击确定完成定时任务设置,右击任务启动任务。
- 自己最终配置效果如下
rsyncMdImages.bat
D:\rsyncMdImages.bat
rsync.exe -avPzruh --port 8730 --password-file=/cygdrive/D/password.txt root@47.97.48.237::cmi-MdImages/ /cygdrive/D/BaiduSyncdisk/cmi-MdImages-local
参考文章
https://blog.csdn.net/a772304419/article/details/132431332