rsync介紹
#
rsync 是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份工具。
rsync
簡介#
rsync
英文全稱為Remote synchronization 服務軟件
,縮寫為rsync
rsync
是一款開源的、快速的、多功能的可以實現全量以及增量的本地或者遠程的數據同步(拷貝)備份的優秀工具,是文件同步的火藍匕首。
rsync
是 Linux 系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync
可以遠程同步,支持本地複製,或者與其他SSH
、rsync
主機同步。
目前,已經支持跨平台,可以在Windows
與Linux
間進行數據同步。
rsync
特性#
rsync
支持很多特性:
- 可以鏡像保存整個目錄樹和文件系統文件。
- 可以很容易做到保持原有文件的權限、時間、軟硬鏈接等。
- 無需特殊權限即可安裝。
- 快速:第一次同步時,
rsync
會複製全部內容,但下一次只傳輸修改過的文件和新建的文件。rsync
在文件傳輸數據的過程中可以實行壓縮及解壓操作,因此可以使用更少的帶寬,降低網絡的壓力。 - 安全:可以使用
scp
、SSH
等方式來傳輸文件,當然也可以通過直接的socket
連接。 - 支持匿名傳輸,以方便進行網站鏡像。
總結:一個 rsync 的命令相當於集成了scp
、cp
、rm
命令,但是又比scp
、cp
、rm
更加靈活。
- 快速:第一次同步時,
rsync
三種工作方式#
local
本地模式 --cp
Access via remote shell
透過遠程shell
訪問 --scp
daemon
守護進程模式 -- 最常用
rsync
文件同步的模式#
- 全量:將全部數據進行傳輸覆蓋
- 增量:只傳輸差異部分的數據,rsync 通過獨特的
quick check
算法,實現增量數據傳輸
rsync
功能介紹#
- 類似與
cp
命令 —— 本地備份傳輸數據 - 類似於
scp
命令 —— 遠程備份傳輸數據 - 類似於
rm
命令 —— 實現無差異同步備份 - 類似於
ls
命令 —— 本地文件信息查看
rsync
的認證協議#
使用rsync
命令來同步文件之前需要先登錄remote
主機認證,認證過程中用到的協議有兩種:
ssh
協議rsync
協議
在平時使用過程中,我們使用最多的是rsync-daemon
方式。
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
中定義的同步文件夾; - 不需要用
873
端口進行傳輸。
注意:ssh
認證方式,不需要服務器和客戶端配置rsync
配置文件,只需要雙方都安裝rsync
服務,並且也不需要雙方啟動rsync
。
#
rsync server 端不用啟動 rsync 的 damon 進程,只要獲取remote host 的用戶名和密碼可以直接 rsync 同步文件
#
rsync server 端因為不啟動 daemon 進程,所以也不用配置文件 /etc/rsyncd.conf
ssh
認證協議跟scp
的原理是一樣的,如果同步過程中不想輸入密碼就用ssh-keygen -t -rsa
打通通道。
//這種方式默認是省略了 -e ssh 的,與下面等價:
rsync -avz /SRC -e ssh [email protected]:/DEST
-a //文件宿主變化,時間戳不變
-V //顯示詳細信息的過程
-z //壓縮數據傳輸
//當遇到要修改端口的時候,我們可以:
#修改了ssh 協議的端口,默認是22
rsync -avz /SRC -e "ssh -p2222" [email protected]:/DEST
rsync
命令#
安裝rsync
命令#
一般來說,RedHat
、CentOS
都自帶這個工具,如果沒有,直接使用yum install -y rsync
安裝即可。
#查看rsync命令需要哪個包
[root@node1 ~]# yum provides */bin/rsync
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:00:27 ago on Mon 10 May 2021 03:27:01 PM CST.
rsync-3.1.3-9.el8.x86_64 : A program for synchronizing files over a network
Repo : @System
Matched from:
Filename : /usr/bin/rsync
rsync-3.1.3-9.el8.x86_64 : A program for synchronizing files over a network
Repo : base
Matched from:
Filename : /usr/bin/rsync
#安裝rsync命令
[root@node1 ~]# yum -y install rsync
#安裝成功
[root@node1 ~]# which rsync
/usr/bin/rsync
rsync
命令格式#
//Rsync的命令格式常用的有以下三種:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
//對應於以上三種命令格式,rsync有三種不同的工作模式:
1)拷貝本地文件。當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啟動這種工作模式.
#命令示例
[root@localhost ~]# rsync -avz abc /opt/123
2)使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包 \
含單個冒號":"分隔符時啟動該模式。
#命令示例
[root@localhost ~]# ssh [email protected] 'ls -l /root'
3)使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑 \
包含單個冒號":"分隔符時啟動該模式。
#命令示例
[root@localhost ~]# rsync -avz [email protected]:/etc/yum.repos.d /root/
rsync
命令參數詳情#
-v, --verbose 詳細模式輸出
-q, --quiet 精簡輸出模式
-c, --checksum 打開校驗開關,強制對文件傳輸進行校驗
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD
-r, --recursive 對子目錄以遞歸模式處理
-R, --relative 使用相對路徑信息
-b, --backup 創建備份,也就是對於目的已經存在有同樣的文件名時,將舊的文件重新命名為~filename。可以使用--suffix選項來指定不同的備份文件前綴。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結
-L, --copy-links 像對待常規文件一樣處理軟鏈接
--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈接
--safe-links 忽略指向SRC路徑目錄樹以外的鏈接
-H, --hard-links 保留硬鏈接
-p, --perms 保持文件權限
-o, --owner 保持文件屬主信息
-g, --group 保持文件屬組信息
-D, --devices 保持設備文件信息
-t, --times 保持文件時間信息
-S, --sparse 對稀疏文件進行特殊處理以節省DST的空間
-n, --dry-run 顯示哪些文件將被傳輸
-W, --whole-file 拷貝文件,不進行增量檢測
-x, --one-file-system 不要跨越文件系統邊界
-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節
-e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步
--rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息
-C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件
--existing 僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件
--delete 刪除那些DST中SRC沒有的文件
--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件
--delete-after 傳輸結束以後再刪除
--ignore-errors 即使出現IO錯誤也進行刪除
--max-delete=NUM 最多刪除NUM個文件
--partial 保留那些因故沒有完全傳輸的文件,以是加快隨後的再次傳輸
--force 強制刪除目錄,即使不為空
--numeric-ids 不將數字的用戶和組ID匹配為用戶名和組名
--timeout=TIME IP超時時間,單位為秒
-I, --ignore-times 不跳過那些有同樣的時間和長度的文件
--size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認為0
-T --temp-dir=DIR 在DIR中創建臨時文件
--compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份
-P 等同於 --partial
--progress 顯示備份過程
-z, --compress 對備份的文件在傳輸時進行壓縮處理
--exclude=PATTERN 指定排除不需要傳輸的文件模式
--include=PATTERN 指定不排除而需要傳輸的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 綁定到特定的地址
--config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件
--port=PORT 指定其他的rsync服務端口
--blocking-io 對遠程shell使用阻塞IO
-stats 給出某些文件的傳輸狀態
--progress 在傳輸時顯示傳輸過程
--log-format=formAT 指定日誌文件格式
--password-file=FILE 從FILE中得到密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second
-h, --help 顯示幫助信息
rsync
配置#
rsync
使用有三種方式:
- 模式一:
local
本地模式 - 模式二:
Access via remote shell
透過遠程shell
訪問 - 模式三:
daemon
守護進程模式(最常用)
模式一:本地模式#
本地模式直接使用命令就可以了
# 命令格式
rsync [OPTION...] SRC... [DEST]
模式二:透過遠程shell
訪問#
這種模式一般就是本地透過遠程shell
命令進行推送和拉取
# 命令格式
# 拉取:pull
rsync [OPTION...] [USER]@HOST:SRC... [DEST]
# 推送:push
rsync [OPTION] SRC... [USER]@HOST:DEST
注意:訪問端和被訪問端都需要安裝rsync
命令
說明:在傳輸文件的時候,會首先對比源目錄和目的目錄下的文件特徵碼,只有當特徵碼不同的時候,才會進行傳輸。
重點:實際場景中通常都是用rsync+ssh
密鑰認證方式,目的是為了使用免密登錄。
模式三:守護進程模式#
守護進程模式可以進行異地實時同步。與前兩種模式對比,更複雜,也更強大。
注意:這種模式需要在源服務端安裝應用:rsync
+ inotify-tools
工具或者rsync
+ sersync
工具;目標服務端安裝rsync
即可。