rsync增量複製命令用法和守護程序的配置
實驗系統 rhel6.5
從本地到本地 《========》 cp
rsync -avz src dst
rsync -avz src/ dst
從遠端到本地
rsync -avz -e "ssh -p 52113" [email protected]:/etc/passwd /tmp/ -e "ssh -p 52113" 這個引數意思就是加密通道的意思
mkdir /abc
rsync --avz -e "ssh -p 52113" [email protected]:/etc/ /abc
mkdir /bcd
rsync -avz -e "ssh -p 52113" [email protected]
mkdir /ddd
touch /ddd/{a,b,c,d,e}.txt
echo ,dhfakebfaksejflafnaler9qor903289473289 >> /bcd/a.txt
cat /bcd/a.txt
rsync -avz /ddd/ /bcd
cat /bcd/a.txt
echo sdjfhalfjawleurwerjh9q834rhqakfawn >> /bcd/c.txt
rsync -avzu /ddd/ /bcd
從本地到遠端
rsync -avz -e "ssh -p 52113" /etc/passwd
例如: rsync是增量複製的
[[email protected] ~]# mkdir src
[[email protected] ~]# touch src/{a,b,c,d,e,f,g,h,i,j,k}.txt
[[email protected] ~]# mkdir dst
[[email protected] ~]# ls dst
[[email protected] ~]# rsync -r src/ dst/ -r引數src/下面的所有資料,並且還不會保留source資料原來的屬性資訊,比如是在root使用者將普通使用者的資料放到root的家目錄,那麼此時普通的使用者資料的屬性都會變成跟其他原來root其他檔案一樣的屬性
[[email protected] ~]# rm -rf dst/*
[[email protected] ~]# rsync -avz src dst/ -avz在生產環境是經常用的,也是差不多必須要加的。-a引數是保留source的所有屬性資訊,-v是輸出資訊,-z是傳輸過程為了加速就做的壓縮技術 第一個src最後的有斜槓“/”是說把src下面的所有資料都給dst目錄,不包括src這個目錄,相當於cp -r src/* dst/;第二個src沒有 "/" 相當於cp -r src dst/.
[[email protected] ~]# echo "sd2342a8954329475kf923" >> dst/a.txt
[[email protected] ~]# rsync -avz src dst/ 加上-u引數的意思就是如果源資料跟目標有一樣的檔名的時候源資料放到目標處的時候不覆蓋目標資料原來的檔案。
[[email protected] ~]#cat dst/a.txt
-u引數的例子:
[[email protected] ~]# echo "sdfjhalkfjasdfhawkerhakefnawerhaweuf" >> dst/a.txt
[[email protected] ~]# rsync -avzu src dst/ 一個沒有-u引數,一個有-u引數
[[email protected] ~]#cat dst/a.txt 看看跟第一個的引數有沒有區別
[[email protected] ~]# rsync -avz --include 'p*' --exclude 'f*' [email protected]:/etc/ dst/ 意思是把遠端的/etc/目錄下的除了f開頭的不能推到本地目錄來之外,其他的都可以,並不是因為 --include 'p*' 這個東東就只把遠端etc的p開頭的拿過來,是說除了/etc/除了f開頭的不能推到本地目錄來之外,/etc下的所有檔案目錄都可以推送到本地來目錄來
[[email protected] ~]# rsync -avz --bwlimit='10K' [email protected]:/etc/ dst/ 這是說限最大的檔案大小是10k,大於10k的檔案不讓傳輸
引數用法
-a 保留source的所有資訊
-v 顯示資訊
-z 對要備份的檔案在傳輸時進行壓縮處理,但並不是說會對source的檔案進行壓縮。從source傳過來的檔案是怎樣的到target也是怎樣的。只是在傳輸過程對檔案進行了壓縮一下而已,但並不會改變檔案的原本狀態
-c, --checksum 開啟校驗開關,強制對檔案傳輸進行校驗。
-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 顯示幫助資訊。
來自: http://man.linuxde.net/rsync
上面介紹的是rsync的命令 接下來介紹rsync的daemon模式
[[email protected] ~]# rpm -qa rsync | grep rsync 如果沒有正確資訊的話 執行 yum -y install rsync
[[email protected] ~]# vim /etc/rsyncd.conf 此檔案預設是沒有的,要自己建立並編輯一下內容
port=899 # 指定rsync埠。預設873 uid = rsync #rsync服務的執行使用者,預設是nobody,檔案傳輸成功後屬主將是這個uid 不管使用者名稱是什麼,一定要檢視服務端uid,gid跟客戶端的uid,gid的數字是不是一樣 gid = rsync # rsync服務的執行組,預設是nobody,檔案傳輸成功後屬組將是這個gid use chroot = no # rsync daemon在傳輸前是否切換到指定的path目錄下,並將其監禁在內 max connections = 200 # 客戶端最大連線數量,0表示沒有限制 timeout = 300 # 在這個時間內客戶端跟服務端沒有任何資料傳輸就斷開,0表示永遠等待 file = /var/rsyncd/rsync.motd # 客戶端連線過來顯示的訊息 pid file = /var/run/rsyncd.pid # 指定rsync daemon的pid檔案 lock file = /var/run/rsync.lock # 指定鎖檔案 log file = /var/log/rsyncd.log # 指定rsync的日誌檔案,而不把日誌傳送給syslog dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 指定哪些檔案不用進行壓縮傳輸 ###########下面指定模組,並設定模組配置引數,可以建立多個模組########### [fangyl] # 模組ID path = /fangyl/ # 指定該模組的路徑,該引數必須指定。啟動rsync服務前該目錄必須存在。rsync請求訪問模組本質就是訪問該路徑。 ignore errors # 在資料傳輸的時候報錯或是有異常就忽略的意思 read only = false # 指定該模組是否可讀寫,即能否上傳檔案,false表示可讀寫,true表示可讀不可寫。所有模組預設不可上傳 write only = false # 指定該模式是否支援下載,設定為true表示客戶端不能下載。所有模組預設可下載 list = false # 客戶端請求顯示模組列表時,該模組是否顯示出來,設定為false則該模組為隱藏模組。預設true hosts allow = 192.168.0.0/24 # 指定允許連線到該模組的機器,多個ip用空格隔開或者設定區間 hosts deny = 0.0.0.0/32 # 指定不允許連線到該模組的機器 auth users = rsync_backup # 指定連線到該模組的使用者列表,只有列表裡的使用者才能連線到模組,使用者名稱和對應密碼儲存在secrts file中, # 這裡使用的不是系統使用者,而是虛擬使用者。不設定時,預設所有使用者都能連線,但使用的是匿名連線 secrets file = /etc/rsyncd.passwd # 儲存auth users使用者列表的使用者名稱和密碼,每行包含一個username:passwd。由於"strict modes" 如果要是客戶端跟服務端的許可權不一樣的話,那麼在客戶端加上--password-file=/etc/rsyncd.passwd這個引數的話還是要讓你手動輸入密碼 # 預設為true,所以此檔案要求非rsync daemon使用者不可讀寫。只有啟用了auth users該選項才有效。 [fangyy] # 以下定義的是第二個模組 path=/fangyy/ read only = false ignore errors comment = anyone can access
如果像上面這樣直接就把內容寫進/etc/rsyncd.conf檔案的話,那麼客戶端執行的時候會報錯的,要把中文的xinetd改了disabled = no 還是不能管理rsync
[[email protected] ~]#mkdir /fangyl ; touch /fangyl/{a,b,c,d,e,f,g}.txt
[[email protected] ~]#chown -R rsync.rsync /fangyl
[[email protected] ~]#chmod 600 /etc/rsyncd.passwd
[[email protected] ~]#echo 'rsync_backup:helloworld' > /etc/rsyncd.passwd
[[email protected] ~]#useradd -s /sbin/nologin rsync
[[email protected] ~]#rsync --daemon
[[email protected] ~]#lsof -i :873
[[email protected] ~]#id rsync
客戶端認證
顯示推的方式 去掉這個引數就要自己輸密碼--password-file=/etc/rsync.passwd 放到最後面
[[email protected] ~]#echo 'helloworld' > /etc/rsync.passwd
[[email protected] ~]#chmod 600 /etc/rsyncd.passwd
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]#rsync -avz /etc/passwd [email protected]::fangyl --password-file=/etc/rsync.pass 這是推的方式。 這句話的意思就是將本地的passwd檔案推送到模組下目錄裡
Access via rsync daemon:
Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST
rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST
拉的方式只是換一下路徑而已。