rsync命令大全
1、什么是Rsync
Rsync(remote synchronize)是一個(gè)遠(yuǎn)程數(shù)據(jù)同步工具,可通過(guò)LAN/WAN快速同步多臺(tái)主機(jī)間的文件。Rsync使用所謂的“Rsync算法”來(lái)使本地和遠(yuǎn) 程兩個(gè)主機(jī)之間的文件達(dá)到同步,這個(gè)算法只傳送兩個(gè)文件的不同部分,而不是每次都整份傳送,因此速度相當(dāng)快。
Rsync本來(lái)是用于替代rcp的一個(gè)工具,目前由rsync.samba.org維護(hù),所以rsync.conf文件的格式類(lèi)似于samba的 主配置文件。Rsync可以通過(guò)rsh或ssh使用,也能以daemon模式去運(yùn)行,在以daemon方式運(yùn)行時(shí)Rsync server會(huì)打開(kāi)一個(gè)873端口,等待客戶(hù)端去連接。連接時(shí),Rsync server會(huì)檢查口令是否相符,若通過(guò)口令查核,則可以開(kāi)始進(jìn)行文件傳輸。第一次連通完成時(shí),會(huì)把整份文件傳輸一次,以后則就只需進(jìn)行增量備份。
Rsync支持大多數(shù)的類(lèi)Unix系統(tǒng),無(wú)論是Linux、Solaris還是BSD上都經(jīng)過(guò)了良好的測(cè)試。此外,它在windows平臺(tái)下也有相應(yīng)的版本,如cwRsync和Sync2NAS等工具。
Rsync的基本特點(diǎn)如下:
1.可以鏡像保存整個(gè)目錄樹(shù)和文件系統(tǒng);
2.可以很容易做到保持原來(lái)文件的權(quán)限、時(shí)間、軟硬鏈接等;
3.無(wú)須特殊權(quán)限即可安裝;
4.優(yōu)化的流程,文件傳輸效率高;
5.可以使用rsh、ssh等方式來(lái)傳輸文件,當(dāng)然也可以通過(guò)直接的socket連接;
6.支持匿名傳輸。
2、Rsync同步算法
Rsync只所以同步文件的速度相當(dāng)快,是因?yàn)椤癛sync同步算法”能在很短的時(shí)間內(nèi)計(jì)算出需要備份的數(shù)據(jù),關(guān)于Rsync的同步算法描述如下:
假定在1號(hào)和2號(hào)兩臺(tái)計(jì)算機(jī)之間同步相似的文件A與B,其中1號(hào)對(duì)文件A擁有訪(fǎng)問(wèn)權(quán),2號(hào)對(duì)文件B擁有訪(fǎng)問(wèn)權(quán)。并且假定主機(jī)1號(hào)與2號(hào)之間的網(wǎng)絡(luò)帶寬很小。那么rsync算法將通過(guò)下面的五個(gè)步驟來(lái)完成:
1、2號(hào)將文件B分割成一組不重疊的固定大小為S字節(jié)的數(shù)據(jù)塊,最后一塊可能會(huì)比S 小。
2、2號(hào)對(duì)每一個(gè)分割好的數(shù)據(jù)塊執(zhí)行兩種校驗(yàn):一種是32位的滾動(dòng)弱校驗(yàn),另一種是128位的MD4強(qiáng)校驗(yàn)
3、2號(hào)將這些校驗(yàn)結(jié)果發(fā)給1號(hào)。
4、1號(hào)通過(guò)搜索文件A的所有大小為S的數(shù)據(jù)塊(偏移量可以任選,不一定非要是S的倍數(shù)),來(lái)尋找與文件B的某一塊有著相同的弱校驗(yàn)碼和強(qiáng)校驗(yàn)碼的數(shù)據(jù)塊。這項(xiàng)工作可以借助滾動(dòng)校驗(yàn)的特性很快完成。
5、1號(hào)發(fā)給2號(hào)一串指令來(lái)生成文件A在2號(hào)上的備份。這里的每一條指令要么是對(duì)文件B經(jīng)擁有某一個(gè)數(shù)據(jù)塊而不須重傳的證明,要么是一個(gè)數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊肯定是沒(méi)有與文件B的任何一個(gè)數(shù)據(jù)塊匹配上的。
3、Rsync參數(shù)說(shuō)明
3.1 rsyncd.conf配置文件
-、全局參數(shù)
在文件中[module]之前的所有參數(shù)都是全局參數(shù),當(dāng)然也可以在全局參數(shù)部分定義模塊參數(shù),這時(shí)候該參數(shù)的值就是所有模塊的默認(rèn)值。
port
指定后臺(tái)程序使用的端口號(hào),默認(rèn)為873。
motd file
"motd file"參數(shù)用來(lái)指定一個(gè)消息文件,當(dāng)客戶(hù)連接服務(wù)器時(shí)該文件的內(nèi)容顯示給客戶(hù),默認(rèn)是沒(méi)有motd文件的。
log file
"log file"指定rsync的日志文件,而不將日志發(fā)送給syslog。比如可指定為“/var/log/rsyncd.log”。
pid file
指定rsync的pid文件,通常指定為“/var/run/rsyncd.pid”。
syslog facility
指 定rsync發(fā)送日志消息給syslog時(shí)的消息級(jí)別,常見(jiàn)的消息級(jí)別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默認(rèn)值是daemon。
二、模塊參數(shù)
主要是定義服務(wù)器哪個(gè)目錄要被同步。其格式必須為“[module]”形式,這個(gè)名字就是在rsync 客戶(hù)端看到的名字,其實(shí)有點(diǎn)象Samba服務(wù)器提供的共享名。而服務(wù)器真正同步的數(shù)據(jù)是通過(guò) path 來(lái)指定的。我們可以根據(jù)自己的需要,來(lái)指定多個(gè)模塊,模塊中可以定義以下參數(shù):
comment
給模塊指定一個(gè)描述,該描述連同模塊名在客戶(hù)連接得到模塊列表時(shí)顯示給客戶(hù)。默認(rèn)沒(méi)有描述定義。
path
指定該模塊的供備份的目錄樹(shù)路徑,該參數(shù)是必須指定的。
use chroot
如 果"use chroot"指定為true,那么rsync在傳輸文件以前首先chroot到path參數(shù)所指定的目錄下。這樣做的原因是實(shí)現(xiàn)額外的安全防護(hù),但是缺 點(diǎn)是需要以roots權(quán)限,并且不能備份指向外部的符號(hào)連接所指向的目錄文件。默認(rèn)情況下chroot值為true。
uid
該選項(xiàng)指定當(dāng)該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的uid,配合gid選項(xiàng)使用可以確定哪些可以訪(fǎng)問(wèn)怎么樣的文件權(quán)限,默認(rèn)值是"nobody"。
gid
該選項(xiàng)指定當(dāng)該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的gid。默認(rèn)值為"nobody"。
max connections
指定該模塊的最大并發(fā)連接數(shù)量以保護(hù)服務(wù)器,超過(guò)限制的連接請(qǐng)求將被告知隨后再試。默認(rèn)值是0,也就是沒(méi)有限制。
list
該選項(xiàng)設(shè)定當(dāng)客戶(hù)請(qǐng)求可以使用的模塊列表時(shí),該模塊是否應(yīng)該被列出。如果設(shè)置該選項(xiàng)為false,可以創(chuàng)建隱藏的模塊。默認(rèn)值是true。
read only
該選項(xiàng)設(shè)定是否允許客戶(hù)上載文件。如果為true那么任何上載請(qǐng)求都會(huì)失敗,如果為false并且服務(wù)器目錄讀寫(xiě)權(quán)限允許那么上載是允許的。默認(rèn)值為true。
exclude
用來(lái)指定多個(gè)由空格隔開(kāi)的多個(gè)文件或目錄(相對(duì)路徑),并將其添加到exclude列表中。這等同于在客戶(hù)端命令中使用--exclude來(lái)指定 模式,一個(gè)模塊只能指定一個(gè)exclude選項(xiàng)。但是需要注意的一點(diǎn)是該選項(xiàng)有一定的安全性問(wèn)題,客戶(hù)很有可能繞過(guò)exclude列表,如果希望確保特定 的文件不能被訪(fǎng)問(wèn),那就最好結(jié)合uid/gid選項(xiàng)一起使用。
exclude from
指定一個(gè)包含exclude模式的定義的文件名,服務(wù)器從該文件中讀取exclude列表定義。
include
用來(lái)指定不排除符合要求的文件或目錄。這等同于在客戶(hù)端命令中使用--include來(lái)指定模式,結(jié)合include和exclude可以定義復(fù)雜的exclude/include規(guī)則。
include from
指定一個(gè)包含include模式的定義的文件名,服務(wù)器從該文件中讀取include列表定義。
auth users
該 選項(xiàng)指定由空格或逗號(hào)分隔的用戶(hù)名列表,只有這些用戶(hù)才允許連接該模塊。這里的用戶(hù)和系統(tǒng)用戶(hù)沒(méi)有任何關(guān)系。如果"auth users"被設(shè)置,那么客戶(hù)端發(fā)出對(duì)該模塊的連接請(qǐng)求以后會(huì)被rsync請(qǐng)求challenged進(jìn)行驗(yàn)證身份這里使用的 challenge/response認(rèn)證協(xié)議。用戶(hù)的名和密碼以明文方式存放在"secrets file"選項(xiàng)指定的文件中。默認(rèn)情況下無(wú)需密碼就可以連接模塊(也就是匿名方式)。
secrets file
該 選項(xiàng)指定一個(gè)包含定義用戶(hù)名:密碼對(duì)的文件。只有在"auth users"被定義時(shí),該文件才有作用。文件每行包含一個(gè)username:passwd對(duì)。一般來(lái)說(shuō)密碼最好不要超過(guò)8個(gè)字符。沒(méi)有默認(rèn)的 secures file名,需要限式指定一個(gè)(例如:/etc/rsyncd.passwd)。注意:該文件的權(quán)限一定要是600,否則客戶(hù)端將不能連接服務(wù)器。
strict modes
該選項(xiàng)指定是否監(jiān)測(cè)密碼文件的權(quán)限,如果該選項(xiàng)值為true那么密碼文件只能被rsync服務(wù)器運(yùn)行身份的用戶(hù)訪(fǎng)問(wèn),其他任何用戶(hù)不可以訪(fǎng)問(wèn)該文件。默認(rèn)值為true。
hosts allow
該選項(xiàng)指定哪些IP的客戶(hù)允許連接該模塊。客戶(hù)模式定義可以是以下形式:
單個(gè)IP地址,例如:192.167.0.1
整個(gè)網(wǎng)段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0
多個(gè)IP或網(wǎng)段需要用空格隔開(kāi),“*”則表示所有,默認(rèn)是允許所有主機(jī)連接。
hosts deny
指定不允許連接rsync服務(wù)器的機(jī)器,可以使用hosts allow的定義方式來(lái)進(jìn)行定義。默認(rèn)是沒(méi)有hosts deny定義。
ignore errors
指定rsyncd在判斷是否運(yùn)行傳輸時(shí)的刪除操作時(shí)忽略server上的IO錯(cuò)誤,一般來(lái)說(shuō)rsync在出現(xiàn)IO錯(cuò)誤時(shí)將將跳過(guò)--delete操作,以防止因?yàn)闀簳r(shí)的資源不足或其它IO錯(cuò)誤導(dǎo)致的嚴(yán)重問(wèn)題。
ignore nonreadable
指定rysnc服務(wù)器完全忽略那些用戶(hù)沒(méi)有訪(fǎng)問(wèn)權(quán)限的文件。這對(duì)于在需要備份的目錄中有些文件是不應(yīng)該被備份者得到的情況是有意義的。
lock file
指定支持max connections參數(shù)的鎖文件,默認(rèn)值是/var/run/rsyncd.lock。
transfer logging
使rsync服務(wù)器使用ftp格式的文件來(lái)記錄下載和上載操作在自己?jiǎn)为?dú)的日志中。
log format
通過(guò)該選項(xiàng)用戶(hù)在使用transfer logging可以自己定制日志文件的字段。其格式是一個(gè)包含格式定義符的字符串,可以使用的格式定義符如下所示:
%h 遠(yuǎn)程主機(jī)名
%a 遠(yuǎn)程IP地址
%l 文件長(zhǎng)度字符數(shù)
%p 該次rsync會(huì)話(huà)的進(jìn)程id
%o 操作類(lèi)型:"send"或"recv"
%f 文件名
%P 模塊路徑
%m 模塊名
%t 當(dāng)前時(shí)間
%u 認(rèn)證的用戶(hù)名(匿名時(shí)是null)
%b 實(shí)際傳輸?shù)淖止?jié)數(shù)
%c 當(dāng)發(fā)送文件時(shí),該字段記錄該文件的校驗(yàn)碼
默認(rèn)log格式為:"%o %h [%a] %m (%u) %f %l",一般來(lái)說(shuō),在每行的頭上會(huì)添加"%t [%p] "。在源代碼中同時(shí)發(fā)布有一個(gè)叫rsyncstats的perl腳本程序來(lái)統(tǒng)計(jì)這種格式的日志文件。
timeout
通過(guò)該選項(xiàng)可以覆蓋客戶(hù)指定的IP超時(shí)時(shí)間。通過(guò)該選項(xiàng)可以確保rsync服務(wù)器不會(huì)永遠(yuǎn)等待一個(gè)崩潰的客戶(hù)端。超時(shí)單位為秒鐘,0表示沒(méi)有超時(shí)定義,這也是默認(rèn)值。對(duì)于匿名rsync服務(wù)器來(lái)說(shuō),一個(gè)理想的數(shù)字是600。
refuse options
通過(guò)該選項(xiàng)可以定義一些不允許客戶(hù)對(duì)該模塊使用的命令參數(shù)列表。這里必須使用命令全名,而不能是簡(jiǎn)稱(chēng)。但發(fā)生拒絕某個(gè)命令的情況時(shí)服務(wù)器將報(bào)告錯(cuò)誤信息然后退出。如果要防止使用壓縮,應(yīng)該是:"dont compress = *"。
dont compress
用來(lái)指定那些不進(jìn)行壓縮處理再傳輸?shù)奈募?#xff0c;默認(rèn)值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
3.2 Rsync命令
在對(duì)rsync服務(wù)器配置結(jié)束以后,下一步就需要在客戶(hù)端發(fā)出rsync命令來(lái)實(shí)現(xiàn)將服務(wù)器端的文件備份到客戶(hù)端來(lái)。rsync是一個(gè)功能非常強(qiáng)大的工具,其命令也有很多功能特色選項(xiàng),我們下面就對(duì)它的選項(xiàng)一一進(jìn)行分析說(shuō)明。
Rsync的命令格式可以為以下六種:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
對(duì)應(yīng)于以上六種命令格式,rsync有六種不同的工作模式:
1)拷貝本地文件。當(dāng)SRC和DES路徑信息都不包含有單個(gè)冒號(hào)":"分隔符時(shí)就啟動(dòng)這種工作模式。如:rsync -a /data /backup
2)使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來(lái)實(shí)現(xiàn)將本地機(jī)器的內(nèi)容拷貝到遠(yuǎn)程機(jī)器。當(dāng)DST路徑地址包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。如:rsync -avz *.c foo:src
3)使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來(lái)實(shí)現(xiàn)將遠(yuǎn)程機(jī)器的內(nèi)容拷貝到本地機(jī)器。當(dāng)SRC地址路徑包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。如:rsync -avz foo:src/bar /data
4)從遠(yuǎn)程rsync服務(wù)器中拷貝文件到本地機(jī)。當(dāng)SRC路徑信息包含"::"分隔符時(shí)啟動(dòng)該模式。如:rsync -av root@172.16.78.192::www /databack
5)從本地機(jī)器拷貝文件到遠(yuǎn)程rsync服務(wù)器中。當(dāng)DST路徑信息包含"::"分隔符時(shí)啟動(dòng)該模式。如:rsync -av /databack root@172.16.78.192::www
6)列遠(yuǎn)程機(jī)的文件列表。這類(lèi)似于rsync傳輸,不過(guò)只要在命令中省略掉本地機(jī)信息即可。如:rsync -v rsync://172.16.78.192/www
rsync參數(shù)的具體解釋如下:
-v, --verbose 詳細(xì)模式輸出
-q, --quiet 精簡(jiǎn)輸出模式
-c, --checksum 打開(kāi)校驗(yàn)開(kāi)關(guān),強(qiáng)制對(duì)文件傳輸進(jìn)行校驗(yàn)
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD
-r, --recursive 對(duì)子目錄以遞歸模式處理
-R, --relative 使用相對(duì)路徑信息
-b, --backup 創(chuàng)建備份,也就是對(duì)于目的已經(jīng)存在有同樣的文件名時(shí),將老的文件重新命名為~filename??梢允褂?-suffix選項(xiàng)來(lái)指定不同的備份文件前綴。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴
-u, --update 僅僅進(jìn)行更新,也就是跳過(guò)所有已經(jīng)存在于DST,并且文件時(shí)間晚于要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結(jié)
-L, --copy-links 想對(duì)待常規(guī)文件一樣處理軟鏈結(jié)
--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹(shù)以外的鏈結(jié)
--safe-links 忽略指向SRC路徑目錄樹(shù)以外的鏈結(jié)
-H, --hard-links 保留硬鏈結(jié)
-p, --perms 保持文件權(quán)限
-o, --owner 保持文件屬主信息
-g, --group 保持文件屬組信息
-D, --devices 保持設(shè)備文件信息
-t, --times 保持文件時(shí)間信息
-S, --sparse 對(duì)稀疏文件進(jìn)行特殊處理以節(jié)省DST的空間
-n, --dry-run現(xiàn)實(shí)哪些文件將被傳輸
-W, --whole-file 拷貝文件,不進(jìn)行增量檢測(cè)
-x, --one-file-system 不要跨越文件系統(tǒng)邊界
-B, --block-size=SIZE 檢驗(yàn)算法使用的塊尺寸,默認(rèn)是700字節(jié)
-e, --rsh=COMMAND 指定使用rsh、ssh方式進(jìn)行數(shù)據(jù)同步
--rsync-path=PATH 指定遠(yuǎn)程服務(wù)器上的rsync命令所在路徑信息
-C, --cvs-exclude 使用和CVS一樣的方法自動(dòng)忽略文件,用來(lái)排除那些不希望傳輸?shù)奈募?br />--existing 僅僅更新那些已經(jīng)存在于DST的文件,而不備份那些新創(chuàng)建的文件
--delete 刪除那些DST中SRC沒(méi)有的文件
--delete-excluded 同樣刪除接收端那些被該選項(xiàng)指定排除的文件
--delete-after 傳輸結(jié)束以后再刪除
--ignore-errors 及時(shí)出現(xiàn)IO錯(cuò)誤也進(jìn)行刪除
--max-delete=NUM 最多刪除NUM個(gè)文件
--partial 保留那些因故沒(méi)有完全傳輸?shù)奈募?#xff0c;以是加快隨后的再次傳輸
--force 強(qiáng)制刪除目錄,即使不為空
--numeric-ids 不將數(shù)字的用戶(hù)和組ID匹配為用戶(hù)名和組名
--timeout=TIME IP超時(shí)時(shí)間,單位為秒
-I, --ignore-times 不跳過(guò)那些有同樣的時(shí)間和長(zhǎng)度的文件
--size-only 當(dāng)決定是否要備份文件時(shí),僅僅察看文件大小而不考慮文件時(shí)間
--modify-window=NUM 決定文件是否時(shí)間相同時(shí)使用的時(shí)間戳窗口,默認(rèn)為0
-T --temp-dir=DIR 在DIR中創(chuàng)建臨時(shí)文件
--compare-dest=DIR 同樣比較DIR中的文件來(lái)決定是否需要備份
-P 等同于 --partial
--progress 顯示備份過(guò)程
-z, --compress 對(duì)備份的文件在傳輸時(shí)進(jìn)行壓縮處理
--exclude=PATTERN 指定排除不需要傳輸?shù)奈募J?br />--include=PATTERN 指定不排除而需要傳輸?shù)奈募J?br />--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 綁定到特定的地址
--config=FILE 指定其他的配置文件,不使用默認(rèn)的rsyncd.conf文件
--port=PORT 指定其他的rsync服務(wù)端口
--blocking-io 對(duì)遠(yuǎn)程shell使用阻塞IO
-stats 給出某些文件的傳輸狀態(tài)
--progress 在傳輸時(shí)現(xiàn)實(shí)傳輸過(guò)程
--log-format=formAT 指定日志文件格式
--password-file=FILE 從FILE中得到密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second
-h, --help 顯示幫助信息
4、Rsync使用實(shí)例
4.1、SSH方式
1、首先在服務(wù)端啟動(dòng)ssh服務(wù):
service sshd start
啟動(dòng) sshd: [確定]
2、使用rsync進(jìn)行同步
接下來(lái)就可以在客戶(hù)端使用rsync命令來(lái)備份服務(wù)端上的數(shù)據(jù)了,SSH方式是通過(guò)系統(tǒng)用戶(hù)來(lái)進(jìn)行備份的,如下:
rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync
work@172.16.78.192's password:
receiving file list ...
5 files to consider
test/
a
0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)
b
67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)
c
0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)
dd
100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)
sent 96 bytes received 98190 bytes 11563.06 bytes/sec
total size is 100663363 speedup is 1024.19
上面的信息描述了整個(gè)的備份過(guò)程,以及總共備份數(shù)據(jù)的大小。
4.2 、后臺(tái)服務(wù)方式
1、啟動(dòng)rsync服務(wù)
編輯/etc/xinetd.d/rsync文件,將其中的disable=yes改為disable=no,并重啟xinetd服務(wù),如下:
vi /etc/xinetd.d/rsync
#default: off
description: The rsync server is a good addition to an ftp server, as it \
allows crc checksumming etc.
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
/etc/init.d/xinetd restart
停止 xinetd: [確定]
啟動(dòng) xinetd: [確定]
2、創(chuàng)建配置文件
默認(rèn)安裝好rsync程序后,并不會(huì)自動(dòng)創(chuàng)建rsync的主配置文件,需要手工來(lái)創(chuàng)建,其主配置文件為“/etc/rsyncd.conf”,創(chuàng)建該文件并插入如下內(nèi)容:
vi /etc/rsyncd.conf
uid=root
gid=root
max connections=4
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
secrets file=/etc/rsyncd.passwd
hosts deny=172.16.78.0/22
[www]
comment= backup web
path=/www
read only = no
exclude=test
auth users=work
3、創(chuàng)建密碼文件
采用這種方式不能使用系統(tǒng)用戶(hù)對(duì)客戶(hù)端進(jìn)行認(rèn)證,所以需要?jiǎng)?chuàng)建一個(gè)密碼文件,其格式為“username:password”,用戶(hù)名可以和密碼可以隨便定義,最好不要和系統(tǒng)帳戶(hù)一致,同時(shí)要把創(chuàng)建的密碼文件權(quán)限設(shè)置為600,這在前面的模塊參數(shù)做了詳細(xì)介紹。
echo "work:abc123" > /etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd
4、備份
完成以上工作,現(xiàn)在就可以對(duì)數(shù)據(jù)進(jìn)行備份了,如下:
rsync -avz --progress --delete work@172.16.78.192::www /databack/experiment/rsync
Password:
receiving file list ...
6 files to consider
./ files...
a
0 100% 0.00kB/s 528:20:41 (1, 50.0% of 6)
b
67 100% 65.43kB/s 0:00:00 (2, 66.7% of 6)
c
0 100% 0.00kB/s 528:20:41 (3, 83.3% of 6)
dd
100663296 100% 37.49MB/s 0:00:02 (4, 100.0% of 6)
sent 172 bytes received 98276 bytes 17899.64 bytes/sec
total size is 150995011 speedup is 1533.75
5、恢復(fù)
當(dāng)服務(wù)器的數(shù)據(jù)出現(xiàn)問(wèn)題時(shí),那么這時(shí)就需要通過(guò)客戶(hù)端的數(shù)據(jù)對(duì)服務(wù)端進(jìn)行恢復(fù),但前提是服務(wù)端允許客戶(hù)端有寫(xiě)入權(quán)限,否則也不能在客戶(hù)端直接對(duì)服務(wù)端進(jìn)行恢復(fù),使用rsync對(duì)數(shù)據(jù)進(jìn)行恢復(fù)的方法如下:
rsync -avz --progress /databack/experiment/rsync/ work@172.16.78.192::www
Password:
building file list ...
6 files to consider
./
a
b
67 100% 0.00kB/s 0:00:00 (2, 66.7% of 6)
c
sent 258 bytes received 76 bytes 95.43 bytes/sec
total size is 150995011 speedup is 452080.87
5、示例腳本
這里這些腳本都是rsync網(wǎng)站上的例子:
1、每隔七天將數(shù)據(jù)往中心服務(wù)器做增量備份
#!/bin/sh
This script does personal backups to a rsync backup server. You will end up
with a 7 day rotating incremental backup. The incrementals will go
into subdirectories named after the day of the week, and the current
full backup goes into a directory called "current"
tridge@linuxcare.com
directory to backup
BDIR=/home/$USER
excludes file - this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes
the name of the backup machine
BSERVER=owl
your password on the backup server
export RSYNC_PASSWORD=XXXXXX
########################################################################
BACKUPDIR=date +%A
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current
2、備份至一個(gè)空閑的硬盤(pán)
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=date "+%A"
rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY
3、對(duì)vger.rutgers.edu的cvs樹(shù)進(jìn)行鏡像
#!/bin/bash
cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin
RUN=lps x | grep rsync | grep -v grep | wc -l
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog
sum1=sum $HOME/ChangeLog
sum2=sum /var/www/cvs/vger/CVSROOT/ChangeLog
if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi
rsync -az --delete --force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0
6、FAQ
Q:如何通過(guò)ssh進(jìn)行rsync,而且無(wú)須輸入密碼?
A:可以通過(guò)以下幾個(gè)步驟
通過(guò)ssh-keygen在server A上建立SSH keys,不要指定密碼,你會(huì)在~/.ssh下看到identity和identity.pub文件
在server B上的home目錄建立子目錄.ssh
將A的identity.pub拷貝到server B上
將identity.pub加到~[user b]/.ssh/authorized_keys
于是server A上的A用戶(hù),可通過(guò)下面命令以用戶(hù)B ssh到server B上了
e.g. ssh -l userB serverB
這樣就使server A上的用戶(hù)A就可以ssh以用戶(hù)B的身份無(wú)需密碼登陸到server B上了。
Q:如何通過(guò)在不危害安全的情況下通過(guò)防火墻使用rsync?
A:解答如下:
這通常有兩種情況,一種是服務(wù)器在防火墻內(nèi),一種是服務(wù)器在防火墻外。無(wú)論哪種情況,通常還是使用ssh,這時(shí)最好新建一個(gè)備份用戶(hù),并且配置 sshd僅允許這個(gè)用戶(hù)通過(guò)RSA認(rèn)證方式進(jìn)入。如果服務(wù)器在防火墻內(nèi),則最好限定客戶(hù)端的IP地址,拒絕其它所有連接。如果客戶(hù)機(jī)在防火墻內(nèi),則可以簡(jiǎn) 單允許防火墻打開(kāi)TCP端口22的ssh外發(fā)連接就ok了。
Q:我能將更改過(guò)或者刪除的文件也備份上來(lái)嗎?
A:當(dāng)然可以:
你可以使用如:rsync -other -options -backupdir = ./backup-2000-2-13 ...這樣的命令來(lái)實(shí)現(xiàn)。
這樣如果源文件:/path/to/some/file.c改變了,那么舊的文件就會(huì)被移到./backup-2000-2-13/path/to/some/file.c,
這里這個(gè)目錄需要自己手工建立起來(lái)
Q:我需要在防火墻上開(kāi)放哪些端口以適應(yīng)rsync?
A:視情況而定
rsync可以直接通過(guò)873端口的tcp連接傳文件,也可以通過(guò)22端口的ssh來(lái)進(jìn)行文件傳遞,但你也可以通過(guò)下列命令改變它的端口:
rsync --port 8730 otherhost::
或者
rsync -e 'ssh -p 2002' otherhost:
Q:我如何通過(guò)rsync只復(fù)制目錄結(jié)構(gòu),忽略掉文件呢?
A:rsync -av --include '/' --exclude '' source-dir dest-dir
Q:為什么我總會(huì)出現(xiàn)"Read-only file system"的錯(cuò)誤呢?
A:看看是否忘了設(shè)"read only = no"了
Q:為什么我會(huì)出現(xiàn)'@ERROR: invalid gid'的錯(cuò)誤呢?
A:rsync使用時(shí)默認(rèn)是用uid=nobody;gid=nobody來(lái)運(yùn)行的,如果你的系統(tǒng)不存在nobody組的話(huà),就會(huì)出現(xiàn)這樣的錯(cuò)誤,可以試試gid = nogroup或者其它
Q:綁定端口873失敗是怎么回事?
A:如果你不是以root權(quán)限運(yùn)行這一守護(hù)進(jìn)程的話(huà),因?yàn)?024端口以下是特權(quán)端口,會(huì)出現(xiàn)這樣的錯(cuò)誤。你可以用--port參數(shù)來(lái)改變。
Q:為什么我認(rèn)證失敗?
A:從你的命令行看來(lái):
你用的是:
bash$ rsync -a 144.16.251.213::test test
Password:
@ERROR: auth failed on module test
I dont understand this. Can somebody explain as to how to acomplish this.
All suggestions are welcome.
應(yīng)該是沒(méi)有以你的用戶(hù)名登陸導(dǎo)致的問(wèn)題,試試rsync -a max@144.16.251.213::test test
轉(zhuǎn)載于:https://blog.51cto.com/chenfei123/1613882
總結(jié)
- 上一篇: [程序员面试题精选100题]19.反转链
- 下一篇: postgresql中表的继承及分区表(