1.什麼是rsync
rsync是 Linux / UNIX 系統下的檔案同步和資料傳輸工具,通過rsync可以将同一個伺服器的資料從一個分區備份到另外一個分區,也可以将本地系統的資料通過網絡傳輸方式備份到任何一個遠端主機上,可以執行完整備份或增量備份。
2.rsync的安裝與基本操作
2.1 yum安裝rsync,或源碼包安裝
[[email protected] ~]# yum -y install rsync
2.2 rsync的基本操作
指令用法 :rsync 選項 源目錄 目标目錄
選項:
-a 歸檔模式,相當于-rlptgoD
-v 顯示同步過程詳細資訊
-z 傳輸過程啟用壓縮
-H 保留硬連接配接檔案
-A 保留檔案的ACL權限
-n 測試同步過程,不做實際修改
--delete 修改目标檔案夾的多餘檔案,保持源目錄與目标目錄的一緻
2.3 本地同步
格式:
# rsync 選項 本地目錄1 本地目錄2//将本地目錄1同步到本地目錄2的檔案夾中
# rsync 選項 本地目錄1/ 本地目錄2//将本地目錄1的子檔案同步到本地目錄2的檔案夾中
2.4 rsync + ssh 同步
2.4.1 用戶端與ssh服務端同步:
下行:rsync 選項 [email protected]:源目錄 本地目錄
上行:rsync 選項 本地目錄 [email protected]:目标目錄
2.4.2 服務端的要求
1)服務端應開啟sshd服務,并提供授權的使用者,密碼
2)此使用者必須對服務端的目錄具有相應的權限
2.5 rsync + rsync 同步
2.5.1 用戶端與rsync服務端同步
下行:rsync 選項 [email protected]::共享名 本地目錄
上行:rsync 選項 本地目錄 [email protected]::共享名
2.5.2 服務端要求
1)服務端主機運作 rsync 服務模式
2)指定要分享的檔案夾,并設定分享名,分享權限
3)根據需要啟用使用者驗證
2.5.3 rsync服務端配置
1)建立rsync賬戶
# vim /etc/rsyncd_users.db
user1:pwd123
user2:pwd456
# chmod 600 /etc/rsyncd_users.db
2)配置rsyncd.conf 檔案
# vim /etc/rsyncd.conf
[tools] // 共享名
path = /usr/src
commet = Rsync Share Test
read onlu = yes
dont compress = *.gz *.bz2 *.tgz *.zip
auth users = user1
secrets file = /etc/rsyncd_users.db
3)啟用rsync共享服務
# yum -y install xinetd
# chkconfig rsync on
# chkconfig xinetd on
# service xinetd start
# rsync 192.168.14.1:://檢視服務端192.168.14.1的共享資源
# rsync [email protected]::tools//驗證密碼後可檢視tools共享檔案夾的資源
# rsync --password-file=密碼檔案//将密碼儲存在檔案中,免除互動式驗證
3.inotify 實時同步
3.1 源碼包安裝inotify
# tar -xzf inotify-tools-3.13.tar.gz
# cd inotify-tools-3.13
# ./configure
# make && make install
3,2 inotifywait 監控指令
基本用法: inotifywait 選項 目标檔案夾
選項:
-m 啟用監控
-r 遞歸監控,監控本目錄以及所有子目錄
-q 減少輸出資訊
-e 設定要監視的事件類型
事件類型:modify, move, create, delete, attrib
//監控檔案夾 /opt,當/opt 發生變動時,會輸出相應資訊
# inotifywait -mrq -e modify,move,create,delete,attrib /opt
3.3 inotify + rsync 實作實時同步
基本思路:
- inotifywait 監控檔案夾 | while 檢測,同步
# vim /root/rsync.sh
#!/bin/bash
TARGET_DIR="/data/opt/"
RSYNC_CMD="rsync -az --delete /data/opt/ /data/opt2/"
inotifywait -mrq -e create,move,modify,delete,attrib $TARGET_DIR |
while read -n5 X
do
eval $RSYNC_CMD
done &
# chmod u+x /root/rsync.sh
# /root/rsync.sh