banner
十一

十一

Stay hungry, stay foolish.

文件同步的火藍匕首:rsync

rsync介紹#

rsync 是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份工具。

rsync簡介#

rsync英文全稱為Remote synchronization 服務軟件,縮寫為rsync
rsync是一款開源的快速的多功能的可以實現全量以及增量的本地或者遠程數據同步(拷貝)備份的優秀工具,是文件同步的火藍匕首
rsync是 Linux 系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地複製,或者與其他SSHrsync主機同步。
目前,已經支持跨平台,可以在WindowsLinux間進行數據同步

rsync特性#

rsync支持很多特性:

  • 可以鏡像保存整個目錄樹和文件系統文件。
  • 可以很容易做到保持原有文件的權限、時間、軟硬鏈接等。
  • 無需特殊權限即可安裝。
    • 快速:第一次同步時,rsync會複製全部內容,但下一次只傳輸修改過的文件和新建的文件。rsync在文件傳輸數據的過程中可以實行壓縮及解壓操作,因此可以使用更少的帶寬,降低網絡的壓力。
    • 安全:可以使用scpSSH等方式來傳輸文件,當然也可以通過直接的socket連接。
    • 支持匿名傳輸,以方便進行網站鏡像。
      總結:一個 rsync 的命令相當於集成了scpcprm命令,但是又比scpcprm更加靈活。

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)#

  • rsyncrsync-daemon認證方式下,默認監聽TCP873端口;
  • rsync-daemon認證方式是rsync的主要認證方式,這個也是我們經常使用的認證方式;
  • 並且也只有在此中模式下,rsync才可以把密碼寫入到一個文件中。
    注意:rsync-daemon認證方式,需要服務器和客戶端都安裝rsync服務,並且只需要rsync服務器端啟動rsync,同時配置rsync配置文件。客戶端可以不啟動rsync服務,都不影響同步的正常進行。

ssh認證#

  • rsyncssh認證下,可以通過系統用戶進行認證,即在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命令#

一般來說,RedHatCentOS都自帶這個工具,如果沒有,直接使用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即可。

rsync + inotify-tools 方式#

rsync + sersync 方式#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。