作者簡介
一、什麼是rsync
rsync:“remote sync”是一個本地遠端同步檔案的工具。在第一次連通完成時,會把整份檔案傳輸一次,下一次就只傳送兩個檔案之間不同的部分。
二、rsync同步的兩種方式
1)直接使用rsync命令,使用SSH協議,預設為22埠
2)rsync daemon形式,使用rsync協議,預設為873埠
三、同步命令
三種方法的同步命令之間的區別就是“:”的個數,本地同步無“:”,命令行同步一個“:”,daemon形式的同步兩個”:“。
1)本地檔案同步
rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
2)本地與遠端同步
pull方法:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
push方法rsync [OPTION...] SRC... [USER@]HOST:DEST
3)使用rsync程序方式
pull方法
rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
push方法:
rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST)
四、詳細描述
remote sync 是一個數據映象備份工具,採用rsync演算法,可以將一個客戶機和遠端檔案伺服器之間的檔案進行同步,也可以在本地系統中將資料從一個分割槽備份到另一個分割槽。如果rsync在備份過程中出現了資料傳輸中斷,恢復後可以繼續傳輸不一致的部分。rsync可以執行完整備份與增量備份。
特點:
1):可以映象儲存整個目錄樹和檔案系統
2):很容易做到保持原來檔案的許可權、時間、軟硬連線
3):無需特殊許可權即可安裝
4):可以增量同步資料,檔案傳輸效率高
5):可以使用rcp、ssh等方式來傳輸檔案,當然也可以直接透過socket連線
6):支援匿名傳輸
五、引數詳解
1)常用引數
-t :將原始檔的modify time也同步到目標機器。它會在同步前先對比兩邊檔案的時間戳和檔案大小,如果一致,則認為兩邊檔案一樣,對次檔案就不進行採取更新動作。如果目標端的檔案的時間戳,大小和源端完全一致,但恰巧內容不一樣時,rsync時發現不了的,解決這個的辦法是使用I引數。
-I:(大寫i)挨個檔案發起資料同步
-v:獲取日誌資訊
-z:先壓縮再傳輸
-r:遞迴,級聯的進行同步
-a:除了遞迴同步外,還可以同步元資訊(許可權、修改時間等)
-n:模擬命令執行的結果,並不是真正的執行命令
-l(小寫L):同步連結檔案時
-p:保持原始檔的許可權 perserve permissions
-H:同步硬連結
-g -o:保持所屬組和屬主
-exclude:排除某個檔案
-exclude-from:排除寫在某個檔案裡的所有檔名
-progress:顯示出傳輸進度資訊
-partial:斷點續傳
2、所有引數
PDF版本可下載:
rsync -av /shell/ [email protected]:/home/opt/lop
五、常用命令
1)將源目錄複製到目的端
rsync -av /shell/ [email protected]:/home/opt/lop
-a:表示要進行歸檔
-v:表示在stdout上打印出細節資訊或進度
2)壓縮傳輸
透過網路進行傳輸時,壓縮資料能夠明顯改善傳輸效率,用rsync -z指定在網路傳輸時壓縮資料
rsync -avz /shell/lll [email protected]:/home/opt/lllop --exclude "*.txt"
3)將目錄下的內容同步到另一個目錄
rsync -av /shell/ [email protected]:/home/opt/lop
4)將目錄本身同步到另一個目錄
rsync -avz /shell/lll [email protected]:/home/opt/lllop --delete
5)使用rsync進行歸檔的過程中排除部分檔案
--exclude PATTERN
rsync -avz /shell/lll [email protected]:/home/opt/lllop --exclude "*.txt"
6)使用rsync進行歸檔的過程中排除部分檔案,把不需要的檔名寫在file裡面
--exclude-from FILEPATH
rsync -avz /shell/lll [email protected]:/home/opt/lllop --exclude-from /shell/file
rsync -avz /shell/lll [email protected]:/home/opt/lllop --delete
六、daemon模式
1:daemon模式配置檔案
rsync以daemon方式執行的時候使用配置檔案為rsyncd.conf
2:服務端與客戶端
使用daemon模式的時候,一定要分清楚服務端和客戶端,與平時理解的服務端與客戶端不太一樣,被同步的一端為服務端,要把檔案同步到另一端的源端為客戶端。
3:檔案格式
1) rsyncd.conf配置檔案由模組和引數組成,一個模組以寫在方括號裡的模組名稱開始,直到下一個模組,模組裡包含由“name = value”格式的引數。
2)檔案是基於行的,每一行代表一個模組名或者引數
4:啟動方式
daemon模式執行必須啟動的時候加引數 --daemon
rsync --daemon
5:模組配置
1)服務端(目標端,被同步的一端)的配置檔案
# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:# 全域性配置uid = rootgid = rootuse chroot = nomax connections = 2pid file = /var/run/rsyncd.pidlog file = /var/log/rsyncd.loglock file = /var/run/rsyncd.lock# 模組配置[test]comment = "同步nginx的配置檔案"path = /captain/shellread only = noauth users = rsyncsecrets file = /etc/rsyncd.secretslist = no
rsync.conf包括兩部分,一部分為全域性配置,一部分為模組配置,全域性配置定義rsync的整體行為。
全域性配置
1)uid、gid:當使用非root賬號時,那麼一定要確保服務的的資料夾是否有該非root賬號寫入的許可權
2)use chroot = no :是否可以切換到root目錄,當chroot為yes的時候,客戶端連線模組的時候,先chroot到模組引數指定的目錄下,必須使用root許可權,埠號必須是1024以內,且不能備份path路徑外的連結檔案
3)max connections = 2 :表示同時最大的連線數,也就是同時只能有兩個客戶端對自己進行連線
並且此選項必須與lock file = /var/run/rsyncd.lock 共同使用,若不指定,預設為/var/run/rsyncd.lock
模組部分
每一個模組部分都是一個資料夾或者檔案的rsync同步
1)[modulname]:模組的名稱
2)path = /captain/shell:表示的是當客戶端把資料同步過來將儲存的路徑
3)read only = no :如果為只讀,那麼將不能進行寫同步,所以必須關閉
4)auth users = rsync :用來進行同步的使用者,不需要系統使用者中有,虛擬的就行
5)secrets file = /etc/rsyncd.secrets :表示的是賬號密碼檔案,此檔案可隨意指定,檔案裡必須以username:password的格式
rsync:123456
此檔案許可權必須為600,否則會報錯
6)list = no :表示的是當服務端拒絕客戶端的請求時,是否是直接顯示許可權拒絕,還是現實模組不存在,一般與hosts allow 和hosts deny一起使用,當一個被服務端拒絕的請求進來時,如果設定為 list = no,那麼直接返回模組不存在。
2、服務端賬號密碼檔案
vim /etc/rsyncd.secrets
rsync:123456
3、客戶端配置檔案
客戶端(源端,需將此臺機器上的檔案同步出去)的配置檔案只需做簡單的修改,設定日誌檔案和pid檔案路徑,然後啟動rsync即可
pid file = /var/run/rsyncd.pidlog file = /var/log/rsyncd.log
4、客戶端密碼檔案
vim /etc/rsyncd.passwd
123456
5、啟動dameon
分別在服務端和客戶端啟動rsync
rsync --daemon
6、同步命令
rsync -avz --password-file=/etc/rsyncd.passwd /data/shell/ [email protected]::test
-avz:表示同步過程中輸出資訊顯示的格式
--password-file=/etc/rsyncd.passwd :表示客戶端將拿此密碼去服務端進行認證,所以這個檔案裡的秘密為上面服務的所設定的密碼,只需passwd
/data/shell/ :表示源目錄,將要把此目錄下的所有檔案同步到遠端。
注:這裡有無/的區別:有/的時候表示的是/data/shell/目錄下的東西同步過去,而無/的時候表示的是把shell目錄同步過去
七、監控目錄變化
1、檢視核心是否支援inotify機制
6、監控指令碼
2、安裝
#!/bin/bash#目標IPip1=10.0.0.75rsync_passwd_file=/etc/rsync.secrets/usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e create,move,attrib,open,close,modify /test | while read filesdoecho $filesEVENT=`echo $files|awk -F" " '{print $1}'`echo $EVENTFile=`echo $files|awk -F" " '{print $2}'`echo $Fileif [[ $EVENT = "CREATE" ]] || [[ $EVENT = "MODIFY" ]] || [[ $EVENT = "MOVED_TO" ]] ;thenecho "Create or Modify or Moved_to" rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydatafiif [[ $EVENT = "DELETE" ]] || [[ $EVENT = "MOVED_FROM" ]] ;thenecho "Delete or Moved_From" rsync -avzcr --delete --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydatafiif [[ $EVENT = "ATTRIB" ]] ;thenecho "Attribe"if [[ ! -d $File ]] ;then rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydatafifidone
3、監控某個目錄的變化
inotifywait -rme modify,attrib,move,close_write,create,delete,delete_self /software/mminotifywait -mqr --format '%Xe %w%f' -e modify,create,delete,attrib /data/
4、監控除了某個目錄
inotifywait --exclude '^/software/mm/ll' -rme modify,move,close_write,create,delete,delete_self /software/mm
5:統計檔案目錄下的變化次數
inotifywatch -v -e access -e modify -t 120 -r /software/mm/
6、監控指令碼
#!/bin/bash#目標IPip1=10.0.0.75rsync_passwd_file=/etc/rsync.secrets/usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e create,move,attrib,open,close,modify /test | while read filesdoecho $filesEVENT=`echo $files|awk -F" " '{print $1}'`echo $EVENTFile=`echo $files|awk -F" " '{print $2}'`echo $Fileif [[ $EVENT = "CREATE" ]] || [[ $EVENT = "MODIFY" ]] || [[ $EVENT = "MOVED_TO" ]] ;thenecho "Create or Modify or Moved_to" rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydatafiif [[ $EVENT = "DELETE" ]] || [[ $EVENT = "MOVED_FROM" ]] ;thenecho "Delete or Moved_From" rsync -avzcr --delete --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydatafiif [[ $EVENT = "ATTRIB" ]] ;thenecho "Attribe"if [[ ! -d $File ]] ;then rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydatafifidone