rsync是被普遍使用的數據同步工具,因其使用delta-transfer算法,只傳輸源文件和目標文件之間有差別的部分,可大大減少網絡傳輸的數據量,提升同步效率。廢話很少說,開始作相關小結。算法
1.使用方法shell
共有七種使用方法,適用於本地複製數據、從本地同步數據到遠程、從遠程同步數據到本地三種狀況,但不能實現數據從遠程到遠程流動。windows
該工具可使用rsync進程和遠程shell兩種訪問方式,結合上述三種傳輸方向,七種使用方法以下所示:
服務器
本地複製:網絡
rsync [OPTION...] SRC... [DEST]ssh
從遠程拉數據:
socket
經過remote shellide
rsync [OPTION...] [USER@]HOST:SRC... [DEST]工具
經過rsync daemonui
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推數據到遠程:
經過remote shell
rsync [OPTION...] SRC... [USER@]HOST:DEST
經過rsync daemon
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
當遠程路徑使用雙冒號「::」或 rsync://格式時,遠程主機需開啓rsync daemon;使用單冒號「:」格式時,則使用remote shell,默認使用SSH認證。
如下爲經常使用選項:
-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 傳輸結束之後再刪除DST中應刪除的文件
--ignore-errors 及時出現IO錯誤也進行刪除
--max-delete=NUM 最多刪除NUM個文件
--max-size=SIZE 不傳輸超過指定大小的文件,SIZE的單位可爲B、K、M、G,默認單位爲B
--min-size=SIZE 不傳輸小於指定大小的文件,SIZE的單位可爲B、K、M、G,默認單位爲B
--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中的文件來決定是否須要備份
--progress 顯示備份過程
-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服務端口
-stats 給出某些文件的傳輸狀態
--progress 在傳輸時現實傳輸過程
--log-format=formAT 指定日誌文件格式
--password-file=FILE 從FILE中獲得密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second
-h, --help 顯示幫助信息
2.使用舉例
1) rsync -avz /opt/test/s/ ./
源地址和目標地址均在本地,複製s目錄下的內容,但不包括s目錄自己。
注:若源地址結尾沒有「/」,則連同目錄自己一塊兒複製。
2) rsync -avz --progress rs@192.168.10.121:/opt/test/s ./
使用SSH方式從遠程複製數據到本地,包括s目錄自己。
注:若SSH使用的不是默認端口,則需指定端口,使用命令rsync -avz -e 'ssh -p 1234'
rs@192.168.10.121:/opt/test/s ./
3) rsync --list-only rs@192.168.10.121:/opt/test/s/
經過SSH認證,僅列出源地址的內容。
4) rsync -avHz ./ 192.168.10.121::test
使用rsync-daemon認證,將本地數據傳至遠程,等同於rsync -avHz ./ rsync://192.168.10.121/test 。
5) rsync -avHz --password-file=secret.txt 192.168.10.121::test /cygdrive/f/temp
使用rsync-daemon認證,從遠程傳輸至Windows本地。其中密碼文件權限爲600,內容僅包含密碼,不需用戶名。注意windows路徑的寫法,如F:\temp應寫成/cygdrive/f/temp。
3.配置服務
要開啓rsync守護進程,須要進行相關的配置
1) 在Linux上配置
配置文件模板位於/usr/share/doc/rsync/examples/rsyncd.conf,將其複製至/etc目錄下,修改基本的配置信息
cat /etc/rsyncd.conf
#motd file=/etc/motd
log file=/var/log/rsyncd
pid file=/var/run/rsyncd.pid
#syslog facility=daemon
#socket options=
# MODULE OPTIONS
[test]
comment = Hello,rsync.
path = /opt/test/s
use chroot = yes
max connections=20
lock file = /var/lock/rsyncd
# the default for read only is yes...
read only = no
list = yes
uid = rs
gid = rs
# exclude =
# exclude from =
# include =
# include from =
# auth users =
secrets file = /etc/rsyncd.secrets
strict modes = yes
hosts allow = 192.168.10.250 192.168.10.251
# hosts deny =
ignore errors = no
ignore nonreadable = yes
transfer logging = no
# log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
修改密碼文件,格式爲用戶名:密碼,設置權限爲600,
cat /etc/rsyncd.secrets
rs:123456
使用service rsync start 或rsync --daemon開啓服務,可以使用--config指定配置文件。
在Debian上須要修改/etc/default/rsync 才能使用service rsync start,其中
RSYNC_ENABLE=true
RSYNC_CONFIG_FILE=/etc/rsyncd.conf
2) 在Windows上配置
windws服務端程序是cwRsyncServer.exe,客戶端cwRsync.exe,配置文件默認位於C:\Program Files (x86)\ICW\rsyncd.conf,修改後以下:
use chroot = false
strict modes = false
log file = rsyncd.log
pid file = rsyncd.pid
port = 873 #指定端口873
uid = 0 #不指定uid,不加這一行將沒法使用任何帳戶
gid = 0 #不指定gid
max connections = 10 #最大鏈接數10
[hehe]
lock file = rsyncd.lock
path = /cygdrive/D/tmp/rs/
read only = false
transfer logging = yes
hosts allow=192.168.10.51
auth users = SvcCWRSYNC
secrets file = /cygdrive/D/tmp/rsync.passwd
rsync.passwd文件格式爲用戶名:密碼
客戶端使用以下批處理命令
@echo off
set RSYNC_HOME="D:\cwRsync_5.5.0_x86_Free\bin"
cd %RSYNC_HOME%
D:
rsync -av --delete --progress --password-file=/cygdrive/E/temp/test/rsync.passwd SvcCWRSYNC@192.168.10.63::hehe /cygdrive/e/temp/test
pause
其中rsync.passwd文件只須要包含密碼。