#### 一、概念
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