Nothing 2007-7-24 09:06
rsync 資料同步介绍
[b]◎敘述:[/b]
rsync和rcp的模式很相似,不過rsync有需多參數可以使用來加速檔案傳送.
rsync遠端更新協定(remote-update protocol)可以透過網路來傳輸兩端檔案不同的地方.
[b]◎語法:[/b]
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
[b]◎使用模式:[/b]
o 當來源端或目的端的路徑都未包含 : 這個分隔符號時,表示複製本地端的檔案.
o 當目的端路徑包含單個 : 這個分隔符號時,表示複製本地端檔案到遠端機器(透過ssh或rsh).
o 當來源端路徑包含 : 這個分隔符號時,表示複製遠端檔案到本地端.
o 當來源端路徑包含 :: 或 rsync:// 這個符號時,表示從遠端rsync伺服器複製檔案到本地端.
o 當目的端路徑包含 :: 或 rsync:// 這個符號時,表示從本地端複製檔案到rsync伺服器.
o 當來源端路徑包含 :: 和加上--rsh=COMMANS (-e COMMAND)參數,表示使用遠端shell程式(remote shell)
並透過遠端的rsync伺服器,複製遠端檔案到本地端
o 當目的端路徑抱含 :: 和加上--rsh=COMMAND 參數,表示使用遠端shell程式並透過遠端的rsync伺服器,
複製本地端檔案到遠端機器
o 列出遠端機器的檔案,跟rsync傳輸相同,只不過把本地端的目的地位置留空.
注意: 在所有狀況下(列出遠端機器檔案除外),來源端及目的端的路徑最少要有一個是本地端路徑.
[b]◎使用方式:[/b]
[color=red]rsync[/color] [color=blue]-t[/color] *.c foo:src/
傳輸目前路徑下所有符合*.c檔案,到foo這台機器的src資料夾.
[color=red]rsync[/color] [color=blue]-avz[/color] foo:src/bar /data/tmp
傳輸foo機器src/bar資料夾下的所有檔案到 /data/tmp 資料夾.
[color=blue]-a[/color] 表示archive模式,也就是保持原有的檔案權限.
[color=blue]-z[/color] 表示傳輸時壓縮資料.
檔案傳輸來源後加上一個/可以避免再目的資料夾下額外建立出一個資料夾.
你可以把來源有沒有/這個符號結尾,想像成"複製這個資料夾下的內容"和"複製這個資料夾".
如: [color=red]rsync[/color] [color=blue]-av[/color] /src/foo /dest 則會在 /dest產生一個foo資料夾;
[color=red]rsync[/color] [color=blue]-av[/color] /src/foo/ /dest 則不會.
[b]◎安裝方式:[/b]
安裝了rsync服務,就可以透過remote shell來比對傳輸機器間的檔案.
預設rsync使用ssh在機器間溝通及傳輸.(可以透過 -e 參數修改)
需要注意的是,來源端和目的端的機器都必須安裝有rsync
[b]rysnc client端[/b]:安裝rsync只是為了取得rsync這個執行檔案.
路徑: [color=green]/usr/ports/net/rsync/[/color]
[img]http://ohaha.ks.edu.tw/images/rsync/rsync01.gif[/img]
安裝完成後,會看到如下的畫面告訴您要如何啟動rsync服務,及執行檔位置.
[img]http://ohaha.ks.edu.tw/images/rsync/rsync02.gif[/img]
a.設定用來和rsync伺服端連結的密碼檔,內容為密碼.(密碼要和伺服端相同)
路徑: [color=green]/usr/local/etc/rsyncd.secret[/color]
(檔案名稱及路徑可以自行變更,執行時在--password-file 指定即可)
[img]http://ohaha.ks.edu.tw/images/rsync/rsync07.gif[/img]
某些rsync伺服器需要進行身分認證,當您與這些伺服器連結時,系統會要求您輸入密碼.
您可以透過設定密碼到 RSYNC_PASSWORD 這個環境變數,來避免此狀況發生.
(這個在FreeBSD上面好像是無效的.)
[b]rsync伺服端[/b]:伺服端的機器也要安裝 (路徑:[color=green]/usr/ports/net/rsync/[/color] ,安裝方式同client端).
a.設定 [color=green]/usr/local/etc/rsyncd.conf[/color] rsyncd 的設定檔:
[img]http://ohaha.ks.edu.tw/images/rsync/rsync03.gif[/img]
說明:
[ohaha]: rsync區段的設定名稱
path: 備份資料存放的路徑
auth users: 連結rsync服務的帳號
uid,gid: 採用何種身分進行檔案存取
secerts file: 帳號密碼檔位置
read only: 是否唯讀
b.設定給rsync client端傳輸用的帳號及密碼,並且更改權限為root唯讀(600)
格式: 帳號:密碼 (每行一組,帳號和密碼用:分隔,此例帳號為ohaha密碼為ohahabackup)
路徑: [color=green]/usr/local/etc/rsyncd.secret[/color]
(檔案名稱及路徑可以自行變更,與rysncd.conf中的設定相同即可)
[img]http://ohaha.ks.edu.tw/images/rsync/rsync04.gif[/img]
c.修改 [color=green]/etc/rc.conf[/color] 新增 [color=#0067c8]rsyncd_enble="YES"[/color] (開機自動執行)
[img]http://ohaha.ks.edu.tw/images/rsync/rsync05.gif[/img]
d.啟動 rsyncd 服務
[img]http://ohaha.ks.edu.tw/images/rsync/rsync06.gif[/img]
[b]◎參數:[/b]
[color=blue]-h[/color] , [color=blue]--help[/color] 顯示rsync求助資訊.
[color=blue]--version[/color] 顯示rsync版本.
[color=blue]-v[/color] , [color=blue]--verbose[/color] 複雜的輸出訊息.
[color=blue]-q[/color] , [color=blue]--quiet[/color] 安靜模式,幾乎沒有訊息產生.常用在以cron執行rsync.
[color=blue]-I[/color], [color=blue]--ignore-times[/color] 通常rsync為了加快速度會忽略同樣檔案大小且同樣存取時間點的檔案.
可以透過此參數關閉此快速檢查.
[color=blue]--size-only[/color] rsync只檢查檔案大小是否改變,不管時間存取點是否改變.
通常用在mirror,且對方時間不太正確時.
[color=blue]-c[/color], [color=blue]--checksum[/color] 在傳送之前透過128bit的md4檢查碼來檢查所有要傳送的檔案.(會拖慢速度.)
[color=blue]-a[/color], [color=blue]--archive[/color] archive mode 權限保存模式,相當於 -rlptgoD 參數.
很快速的保存幾乎所有的權限設定,除了硬式連結(透過-H設定).
[color=blue]-r[/color], [color=blue]--recursive[/color] 複製所有下層的資料(遞迴)
[color=blue]-R[/color], [color=blue]--relative[/color] 使用相對路徑.
如: rsync foo/bar/foo.c remote:/tmp/ 在遠端產生/tmp/foo.c檔案
rsync -R foo/bar/foo.c remote:/tmp/ 在遠端產生/tmp/foo/bar/foo.c 檔案
[color=blue]-R[/color], [color=blue]--relative[/color] 不使用相對路徑.
[color=blue]-b[/color], [color=blue]--backup[/color] 目的地端先前已經存在的檔案在傳輸或刪除前會被備份.
[color=blue]--backup-dir=DIR[/color] 設定備份的資料夾.
[color=blue]--suffix=SUFFIX[/color] 指定備份的檔案名稱字尾形式(預設為~).
[color=blue]-K[/color], [color=blue]--keep-dirlinks[/color] 接收方將連結到資料夾的檔案視為資料夾處理
[color=blue]-l[/color], [color=blue]--links[/color] 複製所有的連結
[color=blue]-H[/color], [color=blue]--hard-links[/color] 保留硬式連結
[color=blue]-p[/color], [color=blue]--perms[/color] 保留檔案權限
[color=blue]-o[/color], [color=blue]--owner[/color] 保留檔案擁有者(root only)
[color=blue]-g[/color], [color=blue]--group[/color] 保留檔案群組
[color=blue]-D[/color], [color=blue]--devices[/color] 保留device資訊(root only)
[color=blue]-t[/color], [color=blue]--times[/color] 保留時間點
[color=blue]-n[/color], [color=blue]--dry-run[/color] 不實際執行傳送,只顯示將會有的傳輸動作
[color=blue]-S[/color], [color=blue]--sparse[/color] 嘗試去處理稀疏的檔案,讓這些檔案在目的端佔去較少的磁碟空間.
[color=blue]-W[/color], [color=blue]--whole-file[/color] 複製所有的檔案,不額外作檢查.
[color=blue]--no-whole-file[/color] 關閉 --whole-file 參數
[color=blue]-x[/color], [color=blue]--one-file-system[/color] 不要跨越檔案系統分界(只在一個檔案系統處理)
[color=blue]-B[/color], [color=blue]--block-size=SIZE[/color] 強制透過rsync程式去比對修復block-sizeforce
[color=blue]-e[/color] [color=blue]--rsh=COMMAND[/color] 定義所使用的remote shell
[color=blue]--rsync-path=PATH[/color] 定義rsync在遠端機器存放資料的路徑
[color=blue]--existing[/color] 只比對更新目的端已經存在的檔案
[color=blue]--ignore-existing[/color] 忽略目的端已經存在的檔案(也就是不更新)
[color=blue]--delete[/color] 刪除傳送端已經不存在,而目的端存在的檔案
[color=blue]--delete-excluded[/color] 除了把傳送端已經不存在,而目的端存在的檔案刪除之外,
也刪除 --exclude 參數所包含的檔案.
[color=blue]--delete-after[/color] rsync預設會在檔案傳送前進行相關刪除動作確保接收端有足夠的檔案空間,
但可以透過 --delete-after 讓刪除動作在檔案傳送後再行刪除.
[color=blue]--ignore-errors[/color] 忽略任何錯誤既使是I/O error 也進行 --delete 刪除動作.
[color=blue]--max-delete=NUM[/color] 定義rsync不要刪除超過 NUM 個檔案.
[color=blue]--partial[/color] rsync若遇到傳輸過程中斷時,會把那些已經傳輸的檔案刪除.
在某種狀況下保留那些部分傳送的檔案是令人高興的.
你可以透過 --partial 參數達到這個目的.
[color=blue]--partial-dir=DIR[/color] 在 --partial 參數啟動時,你還可以定義rsync把那些部分傳送的檔案
寫入定義的資料夾,而非直接寫入目的端.需要注意的是,
此資料夾不應該被其他使用者可以寫入.(如:/tmp)
[color=blue]--force[/color] 當目的端資料夾被傳送端非資料夾名稱覆蓋時,強制rsync刪除資料夾,
即使該資料夾不是空的.
[color=blue]--numeric-ids[/color] 不將傳送端檔案的uid及gid值,與目的端的使用者/群組進行配對.
若傳送端並沒有uid及gid的對應名稱(如:原帳號群組被刪除的遺留檔案),
或目的端沒有相對應的帳號/群組,保留數字型態的uid/gid
[color=blue]--timeout=TIMEOUT[/color] 設定 I/O 逾時的時間(秒). 超過這個秒數而沒有資料傳送,rsync將會結束.
預設為0,也就是沒有定義逾時時間.
[color=blue]-T[/color], [color=blue]--temp-dir=DIR[/color] 定義rsync在接收端產生暫時性的複製檔案時使用資料夾暫存.
預設是直接在接收端資料夾直接產生暫存檔案.
[color=blue]--compare-dest=DIR[/color] 定義rsync在目的端建立資料夾來比對傳送過來的檔案.
[color=blue]--link-dest=DIR[/color] 與 --compare-dest 相同,但同時會針對無法改變的檔案建立硬式連結.
[color=blue]-z[/color], [color=blue]--compress[/color] 壓縮模式,當資料在傳送到目的端進行檔案壓縮.
[color=blue]-P[/color] -P參數和 --partial --progress 相同.只是為了把參數簡單化.
[color=blue]-C[/color], [color=blue]--cvs-exclude[/color] 排除那些通常不希望傳送的檔案.定義的方式與CVS傳送相同:
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state
.nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej
.del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/
符合以上條件的都會被忽略而不傳送.
[color=blue]--exclude=PATTER[/color] 符合PATTERN(規則表示式)樣式的檔案不進行傳送
[color=blue]--exclude-from=FILE[/color] 和--exclude參數相同,不過是把不進行傳送的檔案事先寫入某一檔案.
執行時,透過此參數讓rsync讀取.
(; #開頭的行列或空白行會被rsync忽略)
[color=blue]--include=PATTERN[/color] 定義rsync不要排除符合pattern樣式的檔案.
[color=blue]--include-from=FILE[/color] 和--include參數相同,只不過把要包含的檔案寫到某一檔案.
[color=blue]--files-from=FILE[/color] 把要傳送的檔案名稱都精確的寫入某一檔案,讓rsync讀取.
如: rsync -a --files-from=/tmp/foo /usr remote:/backup
[color=blue]-0[/color] [color=blue]--from0[/color] 定義檔案所要讀取的檔案是null字元結尾.
[color=blue]--version[/color] 顯示版本訊息.
[color=blue]--daemon[/color] 定義rsync以daemon型態執行.
[color=blue]--no-detach[/color] 當以daemon型態執行時,不要進行分裂且變成背景程序.
[color=blue]--address=ADDRESS[/color] 定義所要連結(bind)的ip位址或是host名稱(daemon限定)
[color=blue]--config=FILE[/color] 定義所要讀取的設定檔rsyncd.conf位置(daemon限定)
預設值為 [color=green]/usr/local/etc/rsyncd.conf[/color]
[color=blue]--port=PORT[/color] 定義rsyncd(daemon)要執行的port(預設為tcp 873)
[color=blue]--blocking-io[/color] 使用blocking I/O連結遠端的shell,如rsh , remsh
[color=blue]--no-blocking-io[/color] 使用non-blocking連結遠端的shell,如ssh (預設值)
[color=blue]--stats[/color] 顯示檔案傳送時的資訊狀態
[color=blue]--progress[/color] 顯示傳送的進度.(給檔案傳送時,怕無聊的人用的..)
[color=blue]--log-format=FORMAT[/color] 定義log的格式(在rsyncd.conf設定)
[color=blue]--password-file=FILE[/color] 從檔案讀取與遠端rsync伺服器連結的密碼
[color=blue]--bwlimit=KBPS[/color] 定義傳輸頻寬的大小(KBytes/秒)
[color=blue]--write-batch=FILE[/color] 把紀錄資料寫入一個檔案(給其他相同環境且相同需求的機器使用)
[color=blue]--read-batch=FILE[/color] 透過讀取紀錄檔案來進行傳輸.(檔案由 --write-batch 參數產生)
[color=blue]--checksum-seed=NUM[/color] 定義檔案 checksum-seed 的大小(byte)
[color=blue]-4[/color] [color=blue]--ipv4[/color] 使用IPv4協定
[color=blue]-6[/color] [color=blue]--ipv6[/color] 使用IPv6協定
[b]◎傳輸實作:[/b]
實例:備份 ohaha.ks.edu.tw 的所有網頁內容([color=green]/usr/local/www/data/[/color]).
rsync 伺服端: backup.mlc.edu.tw
rsync client: ohaha.ks.edu.tw
分別設定好伺服端(bakcup)及client端機器(ohaha)的rsync服務.
在client端(ohaha)透過以下指令,把[color=green]/usr/local/www/data/[/color]的所有資料透過rsync放到伺服端的
[color=green]/backup/ohaha/data/[/color] 資料夾下.
指令: [color=red]rsync[/color] [color=blue]-rvlHpogDtS[/color] --password-file=/usr/local/etc/rsyncd.secrets /usr/local/www/data/ [email=ohaha@backup.mlc.edu.tw]ohaha@backup.mlc.edu.tw[/email]::ohaha
說明: rsync 指令
rvlHpogDtS 參數 (部分參數可以用-a取代)
--password-file=/usr/local/etc/rsyncd.secrets 所要讀取的密碼檔位置(檔案內容只有密碼)
/usr/local/www/data/ 要備份的資料來源
[email=ohaha@backup.mlc.edu.tw]ohaha@backup.mlc.edu.tw[/email]::ohaha 透過ohaha這個帳號,連結rsync伺服端(backup)的[ohaha]設定值.
順利的話就會看到如下的畫面,rsync正在建立檔案表列.
[img]http://ohaha.ks.edu.tw/images/rsync/rsync08.gif[/img]
依照檔案的大小與多寡,經過一段時間之後會看到最後的結尾.
顯示傳輸狀況及結果:
[img]http://ohaha.ks.edu.tw/images/rsync/rsync10.gif[/img]
若client端的密碼檔的權限設定有問題(非600,root所有)就會出現如下的畫面,
並要求手動輸入連結的密碼.
[img]http://ohaha.ks.edu.tw/images/rsync/rsync09.gif[/img]
[b]◎檔案:[/b]
設定檔: /usr/local/etc/rsyncd.conf 或 rsyncd.conf
[b]◎作者:[/b]
Andrew Tridgell 和 Paul Mackerras.
[url=http://lists.samba.org/][color=#0000ff]http://lists.samba.org[/color][/url]