1. Rsync基础
最后更新于:2022-04-02 07:42:53
> #### 本文由Zero小卒编写
### Rsync介绍
> 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。软件适用于unix、linux、windows等多种操作系统平台。全称为Remote Rynchronization。
ssh带的scp,但优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。
Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,类型cp命令。
Rsync还可以实现删除文件和目录的功能。
一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。
### Rsync同步
> 在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录。也可以根据权限,属主等属性的变化同步,但需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以能实现快速的同步备份数据。
版本区别:
version2版本会把要同步的文件加载和已有的文件比较,如果发生变化就同步过去。version3版本边比较边同步。
Rsync是文件系统之上,基于文件的同步;基于block的同步用drbd。
union双机互相同步,csync2多机同步。
### Rsync特性
- 支持拷贝特殊文件如链接文件、设备等。
- 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
- 可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-P。
- 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率高。
- 可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)
- 可以通过socket(进程方式)传输文件和数据。(服务端与客户端)
- 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
### Rsync企业应用
- 两台服务器之间的数据同步
- 集群服务器的数据同步
- 定时同步(cron+rsync)与实时同步(rsync+inotify、rsync+sersync)
### Rsync工作方式
- 单个主机本地之间的数据传输(此时类似于cp命令的功能)
- 借助rcp、ssh等通道来传输数据(此时类似于scp命令的功能)
- 以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)
### Rsync优缺点
- 优点:增量备份同步、支持socket(daemon)、集中备份
- 缺点:大量小文件同步的时候比对时间较长,有的时候rsync进程会停止。解决方式可以打包同步或者通过drbd方式。同步大文件(10G)这样的大文件有时候也会有问题。(发生同步中断)未完成同步前,是隐藏文件。
### 常用参数
```
语法: rsync [option...] src... [dest]
说明:
[option]为同步时的参数选项 -avz
-z --compress 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。
-v --verbose 详细模式输出,传输时的进度等信息。
-a --archive归档模式,表示以递归方式传输文件,并保持所有文件属性。等于-rtopgDl
-r --对子目录以递归模式,及目录下的所有目录都同样传输。
-t --保持文件时间信息。
-o --保持文件属主信息。
-p --保持文件权限。
-g --保持文件属组信息。
-P --显示同步的过程及传输时的进度信息。
-D --保持设备文件信息。
-l --保留软连接。
-e 使用的信道协议,指定替代rsh的shell。
--exclude=PATTERN 指定排除不需要传输的文件模式。
[src]为源,即需要拷贝的分区、文件或目录等。
[dest]为目的分区、文件或目录等。
```
### 常见使用方法
#### 单个主机本地之间的数据传输 本地传输模式(local-only mode)
```
rsync -avz /etc /tmp/ ---增量的拷贝方式
如果拷贝目录不带”/“,表示拷贝的内容包括本层目录,如果带"/"表示拷贝本层目录以下的内容。
删除(删除性的复制)--- 就是让/tmp和/data/null中的内容完全一致。
rsync -avz --delete /data/null/ /tmp/
rsync -r --delete /tmp/cc/ /tmp/data
```
#### 借助rsync命令,通过ssh通道来传输数据(此时类似于scp命令的功能)
```
推方式
rsync -avz /tools/httpd-2.2.27.tar.gz -e 'ssh -p 19527' root@192.168.119.20:/tools
/tools/libiconv-1.14.tar.gz ---本地文件
root@192.168.119.20:/tools ---远程主机的系统用户和地址、路径
拉方式
rsync -avz -e 'ssh -p 19527' root@192.168.119.20:/tools/xy /tmp/
```
### 无差异的同步
>从客户端推送内容时,客户端内容与服务器端内容一致,如果服务器端有其他内容,直接被删除与客户端内容保持一致。
从服务端拉取内容时,服务端内容与客户端内容一致,如果客户端有其他内容,直接被删除与服务端内容保持一致。
```shell
rsync -avz --delete /tmp/ rsync://rsync_backup@10.0.0.8/oldboy/ --password-file=/etc/rsync.password
```
本地目录内容会被清除:
```shell
rsync -avz --delete rsync://rsync_backup@10.0.0.8/oldboy/ /tmp --password-file=/etc/rsync.password
```
### 排除命令(只需要在一端进行配置)
```
排除单个文件(客户端)
rsync -avz --exclude=6.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
排除多个文件(客户端)
rsync -avz --exclude={1..5}.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
rsync -avz --exclude={1,2,3,4,5}.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
通过排除文件进行排除(客户端)
rsync -avz --exclude-from=paichu.log /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
```
服务端排除(配置完成后,需要重启服务)
服务端配置文件中增加
```
exclude=a b --通过空格隔开
```
### 多个模块的配置(共享多个文件夹)
将相同性内容放在一起,创建不同的框
服务端配置文件中增加
```
[backup]
path = /oldboy/
ignore errors
[backup1]
path = /oldboy1/
```
';