rsync备份工具_rsync工具-程序员宅基地

技术标签: 运维  linux  服务器  

一.rsync简介

1.什么是rsync

  • rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
  • rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。
  • 它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
  • rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快

2.rsync的优点

  • 可以镜像保存整个目录树和文件系统。

  • 可以很容易做到保持原来文件的权限、时间、软硬连接等。

  • 无需特殊权限即可安装。

  • 快速:第一次同步时rsync复制全部内容,但在下一次值传输修改过的内容

  • 压缩传输:rysnc在传输的过程中可以实行压缩及解压缩操作,可以使用更少的带宽

  • 安全:可以使用scp、ssh等方式来进行文件传输

  • 支持匿名传输,以方便进行网站镜像

  • rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),做差异同步

3.rsync同步的方式

  1. 全量备份:原有的数据全部传送,把原来的文件和新的文件一起统一传送,全量复制,效率低
  2. 差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)
  3. 增量备份:在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输增量复制,效率高

4.rsync的认证方式

rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。
在平时使用过程,我们使用最多的是rsync-daemon方式。
注意:在使用rsync时,服务器和客户端都必须安装rsync程序。

rsync-daemon认证

rsync在rsync-daemon认证方式下,默认监听TCP的873端口。

rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。
并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。

注意:
rsync-daemon认证方式,需要服务器和客户端都安装rsync服务
并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。
客户端启动不启动rsync服务,都不影响同步的正常进行。

ssh认证
rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。
此时同步操作不在局限于rsync中定义的同步文件夹。

注意:
ssh认证方式,不需要服务器和客户端配置rsync配置文件
只需要双方都安装rsync服务,并且也不需要双方启动rsync

若rsync服务端SSH为标准端口,此时rsync使用方式如下:

rsync -avz /root/test [email protected]:/root/

若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:

rsync -avz /root/test -e 'ssh -p1234' [email protected]:/root/

二.rsync的安装

1.服务端配置

1.1yum安装rysnc

yum -y install rsync    ##yum 安装rsync
##设置开机启动
echo “/usr/local/bin/rsync --daemon -config=/etc/rsyncd.conf” >>/etc/profile    

1.2准备rsync的配置文件

 编辑配置文件 vim  /etc/rsync.conf
 
 # 以用户rsync用户启动
uid = rsync
gid = rsync

 #无需让rsync以root身份运行,允许接受文件的完整性
fake super = yes      
#禁锢推送的数据至某个目录,不允许跳出该目录
use chroot = no        
 #最大连接数
max connection = 200  
#超时时间
timeout = 600        
 #进程对应的进程号文件		  
pid file = /var/run/rsyncd.pid   
 #锁文件			
lock file = /var/run/rsync.lock   
 #日志文件,显示出错信息
log file = /var/log/rsyncd.log    
 #忽略错误信息
ignore errors         
#对备份数据可读写
read only = false      
 #不允许查看模块信息
list = false          

# 定义虚拟用户,作为连接认证用户
auth users = myuser

#定义rsync服务用户连接认证密码文件路径
secrets file = /etc/rsync.passwd

#定义模块信息
[backup]
#模块注释信息
comment = commit   
#定义接受备份数据目录
path = /bakup      

1.3配置并启动守护进程

 # 需要一个rsync进程运行时使用的普通用户 rsync
 useradd rsync -M -s /sbin/nologin

#服务端需要定义一个客户端连接    虚拟用户名和密码
#密码文件形式  user:passwd
echo "myuser:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

#准备模块定义好的目录,客户端的数据都存放在该目录下
mkdir /backup
chown -R rsync.rsync /backup

#启动服务
rsync --daemon

#查看服务
[root@localhost ~]# ps -ef | grep   rsync
root     24759     1  0 00:38 ?        00:00:00 rsync --daemon
root     24767 16523  0 00:38 pts/0    00:00:00 grep --color=auto rsync
[root@localhost ~]# netstat  -lntup | grep   873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      24759/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      24759/rsync         

2.客户端配置

  • 在客户端安装完毕rsync服务后,是不需要启动rsync服务的。

  • 我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。

  • 该密码文件中的密码要与rsync服务器上的密码文件中的密码对应

  • 并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配

       yum -y install  rsync                  #安装rsync
       echo “123456”>>/etc/rsync.passwd       #密码到密码文件
       chmod 600 /etc/rsync.passwd            # 修改权限
       
       # 查看 rsync 守护程序分配的所有 module 列表,可以执行下面命令。
       rsync rsync://10.10.100.220
       
       #具体写法是服务器与目标目录之间使用双冒号分隔`::`
       #地址中的module并不是实际路径名,而是 rsync 守护程序指定的模块名
    

三.rsync的使用

     #把本地的文件同步到远程服务器
     #rsync [OPTION]… [SRC]… [USER@]HOST::DEST
     #rsync [选项] [--port=]  [--password-file=] [/local/path] [用户名]@服务端IP::[模块名]
     rsync -av --password-file=/etc/rsync.passwd local/       [email protected]::backup

     #把远程机器的文件同步到本地
     #rsync [OPTION]… [USER@]HOST::SRC [DEST]
     #rsync [选项] [--port=] [--password-file=] [用户名@]服务端IP::[模块名]  [/local/path]

     rsync -av --password-file=/etc/rsync.passwd [email protected]::backup local/

举例

1.将本地文件上传到服务器上

[root@localhost opt]# touch   test.txt      #创建test.txt文件
[root@localhost opt]# ll
-rw-r--r--  1 root root  0 Jul  1 05:03 test.txt
#上传文件到服务器
[root@localhost opt]#  rsync  -avz --password-file=/etc/rsync.passwd /opt/*        #[email protected]::backup 
sending incremental file list
test.txt
rsync: chgrp ".test.txt.6WNQtu" (in backup) failed: Operation not permitted (1)

sent 90 bytes  received 127 bytes  20.67 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

查看服务器(上传成功)
在这里插入图片描述

2.从服务器同步文件

查看服务器的文件
在这里插入图片描述
查看同步情况

 rsync  -avz --password-file=/etc/rsync.passwd   [email protected]::backup /opt

在这里插入图片描述

3.常用命令

-v, –verbose详细模式输出。
-a, –archive归档模式,表示以递归方式传输文件,并保持所有文件属性不变。
-z, –compress对备份的文件在传输时进行压缩处理。
--delete:删除那些DST中存在而在SRC中没有的文件。
 所有命令:
-a:–archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等。
-r:–recursive 复制所有下面的资料,递归处理。
-p:–perms 保留档案权限,文件原有属性。
-t:–times 保留时间点,文件原有时间。
-g:–group 保留原有属组。
-o:–owner 保留档案所有者(root only)。
-D:–devices 保留device资讯(root only)。
-l:–links 复制所有的连接,拷贝连接文件。
-z:–compress 压缩模式,当资料在传送到目的端进行档案压缩。
-H:–hard-links 保留硬链接文件。
-A:–acls 保留ACL属性文件,需要配合–perms。
-P:-P参数和 --partial --progress 相同,只是为了把参数简单化,表示传进度。
--version:输出rsync版本。 
-v:–verbose 复杂的输出信息。
-u:–update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件。
--port=PORT:定义rsyncd(daemon)要运行的port(预设为tcp 873)。

--delete:删除那些目标位置有的文件而备份源没有的文件。

--delete-before: 接收者在传输之前进行删除操作

--password-file=FILE :从 指定密码文件中获取密码。
--bwlimit=KBPS:限制 I/O 带宽。
--filter “-filename”:需要过滤的文件。
--exclude=filname:需要过滤的文件。
--progress:显示备份过程。

3.断点续传和限速的使用

断点续传:

–partial
默认情况下,rsync将删除所有部分传输的文件,如果传输被中断。 在某些情况下,保留部分已经传输的文件时所希望的,使用–partial参数告知rsync保留部分传输过的文件,可以使该文件剩余部分传输的更快速。

–partial-dir=DIR
保留部分传输文件时,比–partial参数更好的方法是指定一个目录来保存部分数据(而不是将其写入目标文件)。在下一个传输过程中,rsync将使用这个dir中的文件作为数据,以加快回复传输的速度,并在它达到目的后将其删除。

rsync -avz --partial  /tmp/test.txt  [email protected]::backup
rsync -avz --partial-dir=DIR   /tmp/test.txt  [email protected]::backup

rsync限速使用:

限速参数:
–bwlimit=KBPS
该参数允许最大传输速率是多少KB/s,设置为0则不限速

rsync -avz --bwlimit=100 /tmp/test.txt  [email protected]::backup

四.rsyncd.conf文件详解

1.全局参数

# 在独立运行时,用于指定的服务器运行的 IP 地址
address = IP

# 监听端口
port = 873 

# rsync 的守护进程将其 PID 写入指定的文件
pid file = /var/run/rsyncd.pid

# 指定支持 max connections 参数的锁文件
lock file = /var/run/rsync.lock

# 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog
log file = /var/log/rsyncd.log

#========== 控制参数 =============#
 # 以指定的 UID 传输文件
uid = rsync        

# 指定该模块以指定的 GID 传输文件。
gid = rsync                     

# 禁锢推送的数据至某个目录, 不允许跳出该目录,
# 默认为 yes,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下
# 这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限
# 并且不能备份指向 path 外部的符号连接所指向的目录文件
use chroot = no                

# 无需让rsync以root身份运行,允许接收文件的完整属性
fake super = yes                

# 大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试
# 默认为0 (没有限制)
max connections = 200

# 超时时间
timeout = 600                  

# 指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。
# 一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作
# 以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。
ignore errors 

# 指定是否允许客户上传文件。
# 默认为true,不允许用户上传文件,
# 若为 false 并且服务器目录也具有读写权限则允许上传。
read only = false 

# 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。
# 默认为 true,如果设置该选项为 false,可以创建隐藏的模块
list = false                  

2.模块参数

模块参数主要用于定义 rsync 服务器哪个目录要被同步。
模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。
而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

  • 基本模块参数
# 指定模块名
[backup]

# 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的
path = /backup  	

# 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户
comment = commit	
  • 模块文件筛选参数

# 指定多个由空格隔开的多个文件或目录(相对路径)
# 并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。
exclude = exclude_file

# 指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义
exclude from = exclude-file.txt

# 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。
# 这等同于在客户端命令中使用 –include 来指定模式 。
include = include-file.txt

# 指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义
include from = exclude-file.txt

# 一个模块只能指定一个exclude 参数、一个include 参数
# 结合 include 和 exclude 可以定义复杂的exclude/include 规则
# 这几个参数分别与相应的rsync 客户命令选项等价,唯一不同的是它们作用在服务器端
  • 模块用户认证参数
# rsync 默认匿名方式传输
# 若只配置匿名访问的 rsync 服务器,则无需设置下述参数

# 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。
# 这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中
auth users = user_name

# 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用
secrets file = /etc/rsync.passwd

# rsync 认证口令文件的权限一定是 600,否则客户端将不能连接服务器。
# rsync 认证口令文件中每一行指定一个 用户名:口令 对,格式为:
# username:passwd

# 一般来说口令最好不要超过8个字符

# 一个rsync配置文件中可以包含多个认证模块,同时一个密码文件中也可以存放多个用户和其对应的密码。
# 其中每一个认证模块可以对应不同的客户端。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_71163619/article/details/131456472

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法