#### 一、概念
Rsync(remote sync)是UNIX 及类UNIX 平台下一款神奇的数据镜像备份软件,它不 像FTP 或其他文件传输服务那样需要进行全备份,Rsync 可以根据数据的变化进行差异备 份,从而减少数据流量,提高工作效率。你可以使用它进行本地数据或远程数据的复制, Rsync 可以使用SSH 安全隧道进行加密数据传输。Rsync 服务器端定义源数据,Rsync 客 户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被 删除,则客户端数据也会被删除,以确保主机之间的数据是同步的。Rsync 使用TCP 873 端口。
* rsync功能
* 作为命令,实现本地-远程文件同步
* 作为服务,实现本地-远程文件同步
* rsync特点
* 可以镜像保存整个目录树和文件系统
* 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
* 传输效率高,使用同步算法,只比较变化的
* 支持匿名传输,方便网站镜像;也可以做验证,加强安全
* rsync同类服务
* sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
* async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
* rsync 远程同步:remote synchronous
#### 二、安装
使用CentOS 7 系统安装部署Rsync 非常方便,安装光盘以及YUM 源中都提供了rsync 软件包,使用YUM 方式安装即可。
~~~
[root@centos7 ~]# yum -y install rsync
[root@centos7 ~]# vim /etc/rsync.conf
~~~
#### 三、配置文件详解
~~~
#/etc/rsyncd.conf
#设置服务器信息提示文件名称,在该文件中编写提示信息
motd file = /etc/rsyncd.motd
#开启Rsync 数据传输日志功能
transfer logging = yes
#设置日志文件名称,可以通过log format 参数设置日志格式
log file =/var/log/rsyncd.log
#设置Rsync 进程号保存文件名称
pid file =/var/run/rsyncd.pid
#设置锁文件名称
lock file =/var/run/rsync.lock
#设置服务器监听的端口号,默认为873
port = 873
#设置服务器所监听网卡接口的IP 地址,这里服务器IP 地址为192.168.0.254
address = 192.168.0.254
#设置进行数据传输时所使用的账户名称或ID 号,默认使用nobody
uid = nobody
#设置进行数据传输时所使用的组名称或GID 号,默认使用nobody
gid = nobody
#设置user chroot 为yes 后,rsync 会首先进行chroot 设置,将根映射到path
参数路径下,对客户
#端而言,系统的根就是path 参数所指定的路径。但这样做需要root 权限,并
且在同步符号
#连接资料时仅会同步名称,而内容将不会同步。
use chroot = no
#是否允许客户端上传数据,这里设置为只读。
read only = yes
#设置并发连接数,0 代表无限制。超出并发数后,如果依然有客户端连接请
求,则将会收
#到稍后重试的提示消息
max connections = 10
#模块,Rsync 通过模块定义同步的目录,模块以[name]的形式定义,这与Samba
定义共
#享目录是一样的效果。在Rsync 中也可以定义多个模块
[common]
#comment 定义注释说明字串
comment = Web content
#同步目录的真实路径通过path 指定
path = /common
#忽略一些IO 错误
ignore errors
#exclude 可以指定例外的目录,即将common 目录下的某个目录设置为不同步
数据
#exclude = test/
~~~
#### 四、rsync三种工作方式
##### 4.1、本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
~~~
Local: rsync [OPTION...] SRC... [DEST]
~~~
##### 4.2、本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
~~~
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
~~~
##### 4.3、本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。
~~~
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
~~~
> 前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。
>
> 但是,通过远程shell也能临时启动一个rsync daemon,这不同于方式(3),它不要求远程主机上事先启动rsync服务,而是临时派生出rsync daemon,它是单用途的一次性daemon,仅用于临时读取daemon的配置文件,当此次rsync同步完成,远程shell启动的rsync daemon进程也会自动消逝。此通信方式的命令行语法格式同"Access via rsync daemon",但要求options部分必须明确指定"--rsh"选项或其短选项"-e"。
#### 五、常用参数
> 由于rsync支持一百多个选项,所以此处只介绍几个常用选项
~~~
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
~~~
#### 六、示列
##### 6.1、本地传输
~~~
[root@ansible-server /]# rsync /tmp/ /home/ #将/tmp下所有文件传输到/home下
[root@ansible-server /]# rsync /tmp /home/ #将/tmp下所有文件包含文件夹tmp传输到/home下
#使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。
~~~
##### 6.2、从服务器到本地
~~~
[root@ansible-server /]# rsync -r 172.16.3.40:/tmp /tmp #将远程服务器172.16.3.40上的/tmp目录传输到本地服务器/tmp路径下
~~~
##### 6.3、从本地到远程服务器
~~~
[root@ansible-server /]# rsync -r /tmp 172.16.3.40:/tmp # 将本地/tmp目录拷贝到远程主机172.16.3.40的/tmp下,以保证远程/tmp目录和本地/etc保持同步
~~~
- Linux
- linux常用命令
- awk
- cp
- scp
- mv
- screen工具
- rsync
- Linux设置静态IP
- vim常用
- ssh免密登录
- linux挂载磁盘和开机自动挂载
- 文件的时间戳
- 重定向
- 防火墙
- Vultr 服务器利用快照更换IP
- ss
- node-yarn
- ES安装向导
- lnmp/lamp
- windows安装mysql
- windows安装nginx
- Let'sEncrypt 免费通配符/泛域名SSL证书
- 开机自动挂载硬盘
- 普通用户提权
- ELK日志分析系统
- Docker
- docker
- centos7安装docker
- Centos7安装redis
- CentOS 7 使用Docker搭建Nginx
- CentOS 7 使用Docker搭建Jenkins
- CentOS 7 使用Docker搭建Zookeeper
- CentOS 7 使用Docker搭建Tomcat
- CentOS 7 使用Docker搭建Mysql
- CentOS 7 使用Docker搭建PHP环境
- 使用docker搭建Swagger
- docker阿里云私有仓库
- docker zookeeper集群
- docker部署ES
- docker之java容器运行外置springboot-jar
- docker部署owncloud云盘
- ETCD
- centos7部署etcd节点
- Dockerfile
- Docker-compose
- gitlab.yml
- db.yml
- 安装docker-compose
- gitlab-docker-compose.yml
- nginx-docker-compose.yml
- Mysql
- mysql开启远程访问及相关权限控制
- mysql授权
- mysql快速导出导入大数据
- mysql单机备份
- binlog日志
- shell
- 经典案例
- 俄罗斯方块游戏
- 系统初始化
- 服务器监控
- go基础环境
- shell.监控日志.elk
- shell.检查各服务脚本
- shell.删除文件脚本
- shell.守护进程
- shell.数据库
- shell.Ansible
- shell.dev
- shell.ftp环境
- shell.docker环境
- shell.k8s环境
- k8s.二进制安装
- K8s.一主多从
- k8s.三主两从高可用
- k8s.检查服务与配置
- k8s.jenkins
- k8s.gitlab
- go-install.sh
- jenkins-install.sh
- node-install.sh
- redis-install.sh
- zabbix-install.sh
- zabbix-dockerfile.sh
- nginx-install.sh
- shell变量
- 用户自定义变量
- 环境变量
- shell特殊变量
- shell条件判断
- 流程控制
- shell运算符
- Shell _printf
- shell_test
- shell函数
- 输出重定向
- 网络相关
- 安全相关
- 堡垒机部署
- 区块链威胁情报共享平台
- 签名与验签
- 浅谈区块链
- 智能合约
- 黄金币GTF智能合约
- 节点
- 以太坊公链私链geth同步
- 比特节点同步
- BTC节点错误解决方法
- eth硬分叉
- omni钱包节点搭建
- 架构
- K8s
- 搭建k8s集群完整篇
- 二进制部署k8s
- Devops
- git
- Jenkins
- svn
- 禅道
- CI/CD
- docker+jenkins+golang持续集成持续交付(CI/CD)
- 项目部署
- config.env
- docker-compose.yml
- Dockerfile模板
- .dockerignore
- run.sh
- nginx.conf模板
- 跨域
- jenkins配置
- 测试
- Python