scp完全复制 rsync服务搭建

本文详细介绍了全量备份、差异备份和增量备份三种类型的备份策略及其优缺点,以及在恢复数据时的效率。同时,文章探讨了常用的备份工具,如scp和rsync。其中,rsync因其高效的数据同步特性而被重点讲解,包括其全量和增量备份的实现、本地和远程同步的使用方法,以及rsync如何通过对比文件差异来节省资源。此外,还介绍了rsync的权限验证、限速选项和远程传输的实现方式。
摘要由CSDN通过智能技术生成

备份的三种类型

  1. 全量备份
备份数据:
		每次都把当前数据完整的copy一份
恢复数据:
		只需要找到对应的时间点那一份数据,覆盖当前数据即可
  1. 差异备份
备份数据:
		每次备份都用当前的数据跟第一次的全量备份数据进行比较,找出差异,然后进行备份
恢复数据:
		只需要先恢复第一次备份的结果,然后再恢复对应时间点的差异备份结果即可
  1. 增量备份
备份数据:
		每次备份都是用当前的数据跟上一次的数据进行比较,找出差异,然后进行备份
恢复数据:
		全量备份+增量1+增量2+增量3...+当前增量数据
  • 三种备份方式的对比
备份数据的过程,从占用资源的角度对比 : 全量备份占用的资源 > 差异备份占用的资源 > 增量备份占用的资源

恢复数据的过程,从恢复效率的角度对比 : 全量备份恢复数据的效率 > 差异备份恢复数据的效率 > 增量备份恢复是数据的效率
  • 常用的备份工具
1. cp复制(可以,但是cp只能在本地拷贝,所以不会用它来进行备份)		
2. scp远程传输
3. rsync远程传输
	
 三种备份工具的差异: 
    cp和scp只支持全量备份 
    rsync可以支持全量备份,也可以支持增量备份

scp复制介绍

  • scp = cp + ssh (只支持全量备份 ! ! !)
格式: scp -r 源路径 目标路径

mkdir /test
touch /test/{1..5}.txt

- 上传
1. 传输目录 
scp -r /test root@192.168.80.120:/opt			将本地test目录(包含目录本身)传输到192.168.80.120的opt目录下

2. 传输文件
scp -r /test/* root@192.168.80.120:/opt				将本地test目录下的文件传输到192.168.80.120的opt目录下

ls /opt
# 1.txt  2.txt  3.txt  4.txt  5.txt  test

- 下载
1. 下载目录
scp -r root@192.168.80.120:/opt /aaa			将192.168.80.120的opt目录下载到本地aaa目录下

2. 下载文件
scp -r root@192.168.80.120:/opt/* /aaa			将192.168.80.120的opt目录下的文件下载到本地aaa目录下

ls scp -r root@192.168.80.120:/opt/* /aaa
# 1.txt  2.txt  3.txt  4.txt  5.txt  opt  test

rsync介绍

  • rsync是Linux/Unix下的一个远程数据同步工具。它可以用过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以较少数据的传输。rcync支持全量备份和增量备份

    1. rsync第一次会全量传输,后续会对比两个文件的不同,只传输文件更新的部分,传输速度比一般工具快(底层是通过算法来实现对比的)。

    2. rsync支持在本地计算机与远程计算机之间同步数据(包括本地推到远程,远程拉到本地两种同步方式),不支持源路径与目标路径都是远程路径(scp可以实现)。

    3. rsync的远程同步是跨平台的

      inux --> windows 
      windows --> linux 
      linux --> mac 
      mac --> linux 
      mac --> windows
      
    4. rsync虽然是远程同步,但也支持两个本地目录之间的同步文件,因此它也可以当作文件复制工具,代替cp和mv命令

  • rsync = cp + scp

  • 验证rsync底层原理(1)

echo 111>a.txt
cp -a a.txt a1.txt				-a不更改文件属性进行复制a.txt 

stat a1.txt						查看a1的文件属性
# Change: 2021-04-15 21:08:54.998161802 +0800

\cp -a a.txt a1.txt				\cp取消别名"-i",-a不更改文件属性进行复制
stat a1.txt
# Change: 2021-04-15 21:09:37.937162777 +0800

rsync -a a.txt a1.txt			使用rsync进行本地拷贝
stat a1.txt
# Change: 2021-04-15 21:09:37.937162777 +0800

- 结论:源文件的数据没有变化,rsync并没有对文件的数据进行覆盖,可以看出rsync备份只传输数据更新的部分
  • rsync既能支持本地拷贝,也能支持远程传输

1. 本地模式

格式:rsync 选项 源数据 目标数据
常用的选项:  -a		归档模式,表示递归传输并保持文件属性
		   -v		显示rsync过程中的详细信息
		   -z		传输时进行压缩提高效率(提升计算机的io效率)
		   -c   	打开校验开关,强制对文件传输进行校验(会降低网络传输的效率)
		   -n		测试备份,不做实际修改
	       --delete	  		删除目标文件夹内多余的文档(数据的同步)
		   --exclude		排除某些文件或目录
		   --include		指定某些的文件模式,往往与--exclude结合使用

mkdir /a
mkdir /b
echo 111>/a/1.txt
echo 222>/a/2.txt
ls /a			
# 1.txt  2.txt

rsync -a /a/ /b				/目录/ 	表示拷贝目录下的文件
ls /b
# 1.txt  2.txt
rsync -a /a /b				/目录 	表示拷贝目录本身以及目录下的文件
ls /b
# 1.txt  2.txt  a


- 验证底层原理(2)
stat /b
# Change: 2021-04-15 21:31:14.802192228 +0800
echo 123>/a/1.txt
rsync -a /a /b
stat /b
# Change: 2021-04-15 21:31:14.802192228 +0800
stat /b/1.txt
# Change: 2021-04-15 21:31:08.174192078 +0800

- 结论:我们通过rsync命令更改目录下的文件属性,目录本身的属性是不会发生变化的,变更目录下的文件属性发生了变化。
- 更加证实了rsync备份只传输数据更新的部分的结论

=======================================================================================================================
 
 --exclude				排除某些文件或目录
ls /a		
# 1.jpg  1.mp4  1.txt  2.jpg  2.mp4  2.txt  3.jpg  3.mp4  3.txt
rsync -a --exclude="*.mp4" /a/ /b/				备份a目录下除了*.mp4以外的所有文件
ls /b
# 1.jpg  1.txt  2.jpg  2.txt  3.jpg  3.txt

rm -rf /b/*
ls /b
mkdir /a/xxx
touch /a/xxx/{a..z}.log
rsync -a --exclude="xxx/*" /a/ /b/				备份除了/a/xxx/*目录下的其他所有文件				
ls /b
# 1.jpg  1.mp4  1.txt  2.jpg  2.mp4  2.txt  3.jpg  3.mp4  3.txt  xxx
ls /b/xxx						/b/xxx的内容显示为空

--delete				数据同步,删除目录下多余的文件
mkdir /c
touch /c/1.txt
rsync -a --delete /c/ /b/
ls /b
# 1.txt

--include				指定某种文件的模式,与exclude意思相反
rsync -a --include="*.log" --exclude="*" /test/ /test2/
ls /test2
# a.log  b.log  c.log  d.log

2. 远程模式

本地与远程均需要安装rsync
yum -y intall rsync

关闭防火墙和selinux
setforce 0
systemctl stop firewalld

远程传输需要经过验证才可以,验证的方式有两种

  1. ssh认证
1. 本地与远程都需要安装rsync软件
2. 远程主机需要开启sshd服务
3. 需要用到的账号是远程主机的系统账号密码==》有风险(基于ssh协议,需要知道对方的系统账号和密码)
4. 不受文件夹的限制==》不安全

格式: 
	rsync 选项 源路径 目标路径
	rsync -az /abc/ root@192.168.80.120:/opt			()/abc目录下的文件传输给192.168.80.120的opt目录
	rsync -az root@192.168.80.120:/opt/ /abc			()将192.168.80.120的opt目录下的文件传输给/abc目录
  1. 基于守护进程(rsync-daemon)认证
1. 本地与远程都需要安装rsync软件
2. 远程主机不需要开启sshd服务,但是远程主机需要开启rsync守护进程
3. 修改配置文件
  • 校验用户身份原理图 :
    在这里插入图片描述

  • 修改rsync配置文件/etc/rsyncd.conf

  • rsync协议分为两个部分: 1. 验证用户身份(/etc/rsync.passwd) ;2. 将数据读写至指定的目录(/lala_bak)

1. 验证用户身份
	验证用户身份与服务端有关,(当前登陆的用户身份)开启了进程,谁就是该进程的属主,与配置文件中的gid,uid无关。
2. 将数据写入指定的目录
	控制客户端的虚拟用户(对应的真实系统身份)对指定目录(数据备份)的权限,配置文件中的uid与gid是为了控制客户端对于备份目录的权限。
  • rsync协议传输数据的格式
(上传):   rsync 选项 源路径 虚拟用户身份@IP地址::模块名
	       rsync 选项 源路径 rsync://虚拟用户身份@IP地址:端口号/模块名
  • 搭建服务(服务端)
1. 修改配置文件
vim /etc/rsyncd.conf
	uid = rsync						真实的系统用户身份
	gid = rsync						真实的系统用户组
	port = 873						端口
	fake super = yes				是否允许转换成root用户身份启动软件,yes是普通用户身份,no是root身份
	use chroot = no					安全机制
	max connections = 200			最大连接数
	timeout = 600					超时时间(超时断开连接)
	ignore errors					忽略错误
	read only = false				关闭只读
	list = false					查看模块列表
	auth users = lala				指定虚拟用户(对应的是rsync真实用户身份)
	secrets file = /etc/rsync.passwd			指定虚拟用户的密码文件
	log file = /var/log/rsyncd.log				指定虚拟用户的日志文件
	#################################################################################
	[2008]											模块名
	comment = "备份文件的目录"						备注
	path = /lala_bak								指定服务端备份文件的目录路径

2. 创建启动守护进程时所用的的用户与组
useradd rsync -s /sbin/nologin -M				
# -s指定用户的登陆解释器(/sbin/nologin:禁止用户登陆系统);-M(不创建家目录)

3. 配置虚拟用户lala的密码文件
echo "lala:123" > /etc/rsync.passwd			
# 密码文件格式 用户名:密码
chmod 600 /etc/rsync.passwd				修改虚拟用户密码文件的权限

4. 创建模块[2008]的真实目录
mkdir /lala_bak
chown rsync:rsync /lala_bak				修改备份文件的目录路径的属主和属组

5. 启动守护进程
rsync --daemon				开启守护进程(当前登陆的用户是谁,谁就是这个rsync守护进程的属主)
  • 客户端
  1. 交互式上传数据
mkdir /a
echo 111 > /a/1.txt
echo 222 > /a/2.txt

方式1:
rsync -az /test/ lala@192.168.80.100::2008	

方式2:
rsync -az /test/ rsync://lala@192.168.80.100:873/2008	

- 切换到服务端查看备份数据指定的目录
ls /lala_bak/
# 1.txt  2.txt  
  1. 免交互式上传数据
- 客户端命令
vim /etc/a.pwd
	123   			# 服务端的密码

方式1:
--password-file=(指向客户端保存服务端密码的文件的路径)
chmod 600 /etc/a.pwd					设置保存服务端密码的文件权限
rsync -az /test/ lala@192.168.80.100::2008 --password-file=/etc/a.pwd		

方式2:
export RSYNC_PASSWORD=123				设置环境变量
rsync -az /test/ lala@192.168.80.100::2008
# 永久开启只需要把export RSYNC_PASSWORD=123写入/etc/profile配置文件中即可
  • 命令补充
    针对一些数据量比较大的数据,我们可以通过选项对数据的发送进行限速
--bwlimit=100 选项:限制传输数据的平均速度为100kb/s	
-P 选项:显示同步过程及传输时的进度等信息
dd if=/dev/zero of=/test/xxx.bak bs=100M count=5			在test目录下创建一个500M的xxx.bak空文件,文件大小为500M
# 5+0 records in
# 5+0 records out
# 524288000 bytes (524 MB) copied, 0.288425 s, 1.8 GB/s
ll /test										
# total 512000
# -rw-r--r-- 1 root root 524288000 Apr 18 19:50 xxx.bak
rsync -avzP --bwlimit=100 /test/ lala@192.168.80.100::2008			--bwlimit指定速度传输,限制传输数据的平均速度为100kb/s	
# sending incremental file list
# ./
# xxx.bak
#    524,288,000 100%  100.74MB/s    0:00:04 (xfr#1, to-chk=0/2)

# sent 509,993 bytes  received 46 bytes  78,467.54 bytes/sec
# total size is 524,288,000  speedup is 1,027.94

谁开启了进程,谁就是该进程的属主 ! ! !

- 验证
1. 将服务端的密码文件权限设置成000
chmod 000 /etc/rsync.passwd

2. 切换到客户端,客户端向服务端传数据	
mkdir /aaa/
touch /aaa/1.txt
rsync -az /aaa/ lala@192.168.80.100::2008				基于rsync协议传输数据
# Password: 

3. 切换到服务端,查看指定目录下文件有没有备份成功
ls /lala_bak
# 1.txt

我们在客户端向服务端传输数据的时候,服务端需要先通过/etc/rsync.passwd验证虚拟用户的身份。
我们将/etc/rsync.passwd文件权限设置成了000,那么所有人都是无法拿到密码文件的内容进行校验的,也就是说按理来说,数据是无法备份成功的。
但是最终数据是备份成功的,也就说明服务端的开启的守护进程的属主是root身份,因为root身份是具备最高权限的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值