我的目標很簡單....要把某個目錄A,整個複製成目錄B......不過因為可能要三不五時做這件事,但是其中有改變的檔案又不多....(例如像我的資料備份硬碟就是這樣....我也不支道友沒有更好的作法啦....^^") 那 該怎麼「複製」呢?我使用以下這樣的指令:
$ rsync -rlHtpEogv --stats --delete A B
-r recurse into directories
-t preserve modification times
-l copy symlinks as symlinks
-H preserve hard links
-p preserve permissions
-E preserve executability
-o preserve owner (super-user only)
-g preserve group
-z compress file data during the transfer
-v increase verbosity
--stats give some file-transfer stats
--delete delete extraneous files from dest dirs
相關的說明都在上面了....XD 簡單解釋一下好了:
-r 因為要複製目錄,所以要recursive的同步檔案
-t 保留檔案修改時間....我猜測是,如果沒有這個參數的話,檔案修改時間會變成執行rsync的時間(我很懶惰沒有去測試:P)
-l, -H 把link都保存起來....不會變成不同檔案,如果要把資料放到不支援link的filesystem上的話應該就要拿掉!
-p, -E, -o, -g 把檔案的相關屬性(權限跟owner/group)都保存下來
-z 這個參數上面的指令沒有用到,我認為這個在透過網路備份才比較有用,他會先壓縮再傳輸。
-v 把處理了哪些檔案之類的詳細資訊都印出來,有時候要看到有東西在動才不會以為機器當掉了XD
--stats 跟上面的很像,會印出檔案傳輸相關的資訊
--delete 這個參數讓我花好多時間!之前用rsync一直有個困擾就是,他不會把我已經刪掉的檔案在備份端也刪掉.....所以備份端會一直長大,但是我的需求偏向「避免硬碟損壞或誤刪」,本來以為rsync做不到,結果後來才發現這個參數(恐怖的是,他的說明我就算查了字典還看不懂= =a)!這個參數的功能是,把SRC已經刪除的檔案也在DEST刪除!
但是請千萬注意!!!!--delete參數會把DEST裡面不相關的那些檔案全部刪掉!!!!千萬注意!!!!(建議可以先用-n(dry-run)跑跑看,確定沒問題再說)
這篇文章的主要參考資料是 柚可椰小站-介紹一下 rsync 這個同步備份程式 http://www.ntu.beautifulworldco.com/weblog/?p=385 (我是在這邊知道可以用--delete這個參數的:P)
最後補上一些今天查的資料網址(其實我根本還沒看,而且這些都在Google "rsync 教學"的第一頁XD):
資安論壇-rsync 教學(Debian) http://forum.icst.org.tw/phpbb/viewtopic.php?f=10&t=9454
酷!學園-用rsync做備份 http://phorum.study-area.org/index.php/topic,15553.html
阿邦教學網-[轉貼]--rsync 異地備援 心得筆記 http://samba.tw/xoops/htm/modules/newbb/viewtopic.php?post_id=454
(上面那篇的轉貼來源) http://freesf.tnc.edu.tw/modules/newbb/viewtopic.php?topic_id=533&forum=15
備份的方法 3 : 使用 rsync (全自動網路備份法) http://www.backup.idv.tw/good_doc/linux/backup/20030726/rsync.htm
Tsung's Blog-rsync 備份 http://plog.longwin.com.tw/my_note-app-setting/2005/12/28/rsync_ssh_backup
#最後補上一個東西好了....因為我今天在備份的是家目錄,裡面會有個.gvfs的目錄(跟GVFS有關,但我不清楚他的"底細"),他是沒辦法複製的....所以我加上了 --exclude='.gvfs' 這個參數,以避免IO error.....因為要是遇到IO error的話,rsync會自己取消掉delete的動作...也就是說,就像沒下--delete一樣,檔案只會多不會少....(一開始沒注意到,後來發現了之後,又刪掉了好些檔案XD)
#又要補充了XD" 感謝BlueT大大的指教,提供這個參數:
-a archive mode; equals -rlptgoD (no -H,-A,-X)
也就是說,可以把我本來的指令改成....
$ rsync -avHE --stats --delete A B
(但是我本來並沒有下-D這個參數) 然後.....參數一少就會開始想東想西.....-H跟-E是不是真的有必要我就不敢確定了。-H是保存hardlink...不確定這樣是不是會有什麼問題。-E是保存可執行權限,我當時其實就在想是不是-p(保存檔案權限)就已經內含這個了?或是因為安全性所以只會保存read跟write權限而已?(好啦我找時間試試看orz) 最後就是-A跟-X的問題了....他特別提出來是因為什麼呢?XD"
#2010.06.03補充:好啦我試過了....-av (不加-E)也可以保存executable的權限...所以大概可以簡化成:
$ rsync -av --delete A B
這樣子吧.....
如果想用GUI介面,不想學指令的話,gnome 裡有 grsync 套件可用喔!
回覆刪除