当前位置:网站首页>远程增量同步神器rsync
远程增量同步神器rsync
2022-06-25 23:32:00 【xiaoshi】
简介
我想搭一个自动备份代码(或者延申一下,各类文件)的系统,为此研究过NAS,但是买现成的成本有点高,自己折腾又嫌太麻烦。前两天,无意中发现了一个把玩客云刷机成Armbian(一个基于Arm的Linux)系统的教程,大喜,就马上把我吃灰两年的玩客云刷成了Armbian,折腾了两天,总算弄好了,通过USB转SATA,挂载了一块闲置的200G的硬盘,这样存储一些代码文件完全够用了。 下面就是刷好的Armbian:
换了系统以后的Linux小主机:
这个玩客云是Cortex A5的芯片,性能比较差,但同时功耗也低,可以全天侯开机,所以就可以继续拿它做文章,再找一个自动同步、备份文件的解决方案就可以了。
一查还真有,就是今天要介绍的rsync
。
rsync 是一个常用的 Linux 应用程序,用于文件同步。 它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)
与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。
那Windows上有这个rsync吗,毕竟,我是要从Windows往Linux同步文件。有!Windows平台有个cwRsync,
cwRsync is a packaging of Rsync for Windows
它就是rsync在Windows上的实现。方法已经有了,下面就开干了。
在Linux主机上安装配置rsync服务端
检查rsync安装情况
输入rsync --version
,发现已经有了,如果没有的,通过apt-get install rsync
安装一下就行

配置 rsyncd.conf
文件
虽然rsync已经安装了,但是需要它作为服务端运行,就要以守护进程也就是daemon的方式运行它。
这时候就要用到一个etc目录下的/etc/rsyncd.conf
文件,这里需要注意的是,有些Linux发行版,比如我这个Armbian是基于Debian的,是没有rsyncd.conf这个文件的,需要先创建,然后再填写配置内容。如果本来就有这个文件,那就直接填写配置内容就行了。
配置文件内容:
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = root
gid = root
use chroot = no
max connections = 2
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock
[feng]
path = /mnt/file
read only = no
auth users = rsync
secrets file = /etc/rsyncd.secrets
list = no
这里简单说一下上面的配置项,也是参照别的教程改的,官方全部的配置项应该不止这些,但那不是我的研究重点,有这些就够用了。
uid、gid:当使用非root账号时,那么一定要确保服务的的文件夹是否有该非root账号写入的权限 use chroot = no :是否可以切换到root目录,当chroot为yes的时候,客户端连接模块的时候,先chroot到模块参数指定的目录下,必须使用root权限,端口号必须是1024以内,且不能备份path路径外的链接文件 max connections = 2 :表示同时最大的连接数,也就是同时只能有两个客户端对自己进行连接。并且此选项必须与lock file = /var/run/rsyncd.lock 共同使用,若不指定,默认为/var/run/rsyncd.lock [feng]这个中括号里面的内容是自己随便定义的,它表示一个模块,后面客户端连接的时候需要指定这个模块的名字,比如我这里就是feng,这样客户端就会按照这个模块下面的各项配置规则来传输文件 path = /mnt/file:表示的是当客户端把数据同步过来将保存的路径,根据自身情况定义就行 read only = no :如果为只读,那么将不能进行写同步,所以必须关闭 auth users = rsync :用来进行同步的用户,不需要系统用户中有,虚拟的就行。也是自己定义,后面客户端发起同步命令时会用到 secrets file = /etc/rsyncd.secrets :表示的是账号密码文件,此文件可随意指定,文件里必须以username:password的格式。此文件权限必须为600,否则会报错。username就是上面自定义的auth users,比如我这里就是rsync,然后我把密码设置为123,那文件里就写 rsync:123
就行了list = no :表示的是当服务端拒绝客户端的请求时,是否是直接显示权限拒绝,还是显示模块不存在,一般与hosts allow 和hosts deny一起使用。当一个被服务端拒绝的请求进来时,如果设置为 list = no,那么直接返回模块不存在。如果不设置,那么是什么错就返回什么错。
3.以守护进程(daemon)方式运行
以上各项配置好后,通过 rsync --daemon
来启动rsync就可以了,这样rsync就会以后台进程的方式运行,而且会开机自启。
这里再插一句,启动是启动了,那怎么停止呢,假如我修改了配置文件需要重启怎么办,这个我了解到的方法是先查出PID,然后通过kill PID来结束进程。rsync默认使用873端口号,所以我先通过lsof -i tcp:873
命令查出PID,然后kill PID
结束进程。
以上就是Linux上rsync作为服务端的安装部署过程,下面看Windows上rsync作为客户端的安装配置过程。
Windows上rsync作为客户端的安装配置过程
下载cwAsync客户端
在 https://www.itefix.net/cwrsync 下载cwRsync客户端。注意区分服务端和客户端,服务端我这里用不到,所以也没看。
我下载的是x86那个版本。直接解压缩到你想放到的目录下,然后将目录 bin 的路径注册到环境变量 path 中,这样就可以直接在 cmd 窗口中写命令行了。
2.在 cmd 中通过命令行发起文件同步
我们先直接看一个可以运行成功的例子:rsync --port=873 -av --progress --password-file=/cygdrive/d/test.password /cygdrive/e/test_projects/nsetter [email protected]::feng
873就是服务端的rsync对应的端口号 --password-file=/cygdrive/d/test.password,是指定放在本机目录下的密码文件,这个密码文件需要事先创建好,比如我这里就是在D盘下创建了一个test.password文件,路径前加上/cygdrive/是要求的固定写法,是按照 linux 的风格来的,如果直接写成“D:\test.password”是不行的。
文件里面的内容就是对应上面服务端的rsyncd.secrets
里面写的密码,比如我这里是123,那就在这个文件里写个123就行了。/cygdrive/e/test_projects/nsetter就是我要同步的目录,按上面的规则可以看出来,这是E盘下的一个目录,这种写法会把整个目录同步过去,而且会在服务端创建一个同样名字的目录。 [email protected]::feng,其中rsync对应上面服务端设置的auth users,后面的是服务端IP地址,在后面双冒号跟模块的名字,还记得服务端配置文件里我说的模块名字吗,这里就用到了 至于 -av、--progress则属于rsync的诸多命令参数中的一两个用法了,可以看阮一峰写的一篇教程( https://www.ruanyifeng.com/blog/2020/08/rsync.html),写的比较清楚。这里就不赘述了。
运行结果
下面是我把Windows上的一个目录同步到Linux下的结果,可能是因为局域网,速度还是很快的。
假如我要排除源目录下的某个文件或者目录,通过--exclude参数就能实现,非常简单,比如下面这个,我就把packages目录排除了,它不会被同步
因为rsync是增量同步,只同步有变化的文件,所以不用担心重复同步、徒增开销的问题,比如下面这个test.txt文件,我连续同步两次,第二次并没有同步,那个sending list下是空的。

总结
以上就是我目前搭建和使用rsync的整个过程了,这基本已经满足了我的需求,接下来可能最多就是改进一下,把手输命令行改成自动化运行的脚本,在我看来,这个算得上是一流的同步、备份文件的解决方案了。毕竟,不但没花一分钱,还如此强大易用。
物过刚则易折的道理,我希望你能够明白。《梦华录》
边栏推荐
- 2022年电气试验考试试题模拟考试平台操作
- Preordered clue binary tree
- LabVIEW开发监控聚变实验脉冲电源
- STM32 uses SPI mode to drive TFT-LCD optimization code of hx8347 scheme
- Unknown device ID does not appear on the STM32 st-link utility connection! Causes and Solutions
- 基金开户安全吗?有没有什么风险?
- 接口的幂等性——详细谈谈接口的幂等即解决方案
- Error 65:access violation at 0x58024400: no 'read' permission
- 网上开通证券账户安全吗 证券网上开户
- PHP performance optimization
猜你喜欢
Error 65:access violation at 0x58024400: no 'read' permission
Msp430f5529lp official board (red) can not debug the problem
Handling of @charset UTF-8 warning problems during vite packaging and construction;
模板引擎——FreeMarker初体验
计算机网络知识总结(面试)
The maze of God's perspective in robot vision
Typescript for Web Learning
Redis之Strings命令
C#使用MySql进行操作
Balanced binary tree AVL
随机推荐
Redis strings command
About the use of hc-12 radio frequency module
Development and monitoring of fusion experiment pulse power supply by LabVIEW
经典面试题之老鼠试药与汉明码
简单 deepclone
Msp430f5529lp official board (red) can not debug the problem
如何有效地推广产品
Chapter VI exercises (678) [microcomputer principles] [exercises]
Xinku online | cnopendata text data of IPO declaration and issuance of A-share listed companies
毕业季你考虑好去留了吗
C#使用MySql进行操作
The kth largest element in the array
react + router 框架下的路由跳转后缓存页面存初始参数
A sharp tool for information collection, Google hacker syntax
The maze of God's perspective in robot vision
Cartoon shader
Unknown device ID does not appear on the STM32 st-link utility connection! Causes and Solutions
Nacos注册中心
ETCD数据库源码分析——集群通信初始化
Preorder and middle order traversal of forest