当前位置:网站首页>文件远程同步、备份神器rsync
文件远程同步、备份神器rsync
2022-06-26 12:35:00 【工程师小凤】
简介
我一直想搭一个自动备份代码(或者延伸一下,各类文件)的系统,为此研究过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的整个过程了,这基本已经满足了我的需求,接下来可能最多就是改进一下,把手输命令行改成自动化运行的脚本,在我看来,这个算得上是一流的同步、备份文件的解决方案了。毕竟,不但没花一分钱,还如此强大易用。
物过刚则易折的道理,我希望你能够明白。《梦华录》
我的微信公众号
名称:工程师小凤
微信号:theyfaded
我有丰富的.NET、C++、Python开发经验,现在从事方向为物联网,同时一直在学习和实践Web前端开发!一起来交流进步吧!
边栏推荐
- 关于NaN的一些总结
- Question B of 2016 Sichuan Ti Cup Electronic Design Competition
- nvm安装教程
- PHP returns false when calling redis method decrby less than 0
- 初探Protostuff的使用[通俗易懂]
- Spark-day02-core programming-rdd
- Common problems and Thoughts on member operation management
- Analysis report on dynamic research and investment planning suggestions of China's laser medical market in 2022
- Realize microservice load balancing (ribbon)
- Scala-day02- variables and data types
猜你喜欢

New routing file in laravel framework

Scala-day06- pattern matching - Generic

Websocket and socket IO case practice

Tiger DAO VC产品正式上线,Seektiger生态的有力补充
![[solved] laravel completes the scheduled job task (delayed distribution task) [execute a user-defined task at a specified time]](/img/13/c2c63333a9e5ac08b339449ea17654.jpg)
[solved] laravel completes the scheduled job task (delayed distribution task) [execute a user-defined task at a specified time]

环形队列php

Mysql8 master-slave replication

小程序中控件里面的内容较多,让其支持滚动的良好方案

"Pinduoduo and short video speed version", how can I roast!

Implementing mixins scheme in applet
随机推荐
Question B of 2016 Sichuan Ti Cup Electronic Design Competition
How long ago did PHP get
SQL injection
fastjson的JSONArray和JSONObject[通俗易懂]
"Pinduoduo and short video speed version", how can I roast!
Jsonarray and jsonobject of fastjson [easy to understand]
7-1 n皇后问题
JMeter response time and TPS listener tutorial
Msvcr110 not found DLL, unable to continue code execution Solution for startup
初探Protostuff的使用[通俗易懂]
MySQL optimization - index (what is an index?)
Laravel+gatewayworker completes the im instant messaging and file transfer functions (Chapter 4: server debugging errors)
The laravel dingo API returns a custom error message
Introduction to the four major FPGA manufacturers abroad
Report on in-depth analysis and investment strategy recommendations for China's petroleum coke industry (2022 Edition)
Examples of how laravel uses with preload (eager to load) and nested query
Common problems and Thoughts on member operation management
由错误<note: candidate expects 1 argument, 0 provided>引发的思考
快手实时数仓保障体系研发实践
NoSQL mongodb - 01 introduction to NoSQL and mongodb