# Mac OS X:升級rsync到最新版本
Tech Level 3
History:
July 17, 2009: 若干處修辭的修改. 添加了和TimeMachine的比較部分.
### rsync簡介
rsync是開放許可GPL開放源碼的增量數據傳輸/同步命令行工具。它采用快速算法,只把遠程文件和本地文件不同的部分傳輸,從而得到本地和遠程數據同步。作為系統管理員的一個難以置信好用的工具,它已經被接受和使用了好長時間了。
[](http://docs.google.com/File?id=dfm3jbw9_186d87gv7gw_b)
它的特點是:可以傳輸文件/文件夾/目錄樹/甚至是整個系統;可以保留符號連接/權限/硬連接/文件屬性/設備等;可以是用ssh/rsh等用于傳導;支持用于鏡象操作的匿名傳輸等等。
它在類Unix系統中廣泛存在和應用,這里引用當前最新版本3.0.6的安裝使用,因為它的更新很快,所以請持續關注/更新。了解更多的詳細信息,到它的官方網站http://samba.org/rsync/。
### 在Mac系統上的rsync
我目前的Mac OS XLeopard是10.5.7版本,它本身所帶的rsync版本是2.6.9,在3.0.5之前的版本耗費更多的內存處理文件,并且對沒有修改的resource forks也會傳輸,更致命的是有可能在處理極多數量文件(不是大文件)的時候造成內存溢出的錯誤,所以如果你沒有更新,那么應該按照下面的方法更新。
### rsync的版本更新
這里涉及很多命令行,所以適合于熟悉Terminal的技術人員.
### 1. 下載最新版本:
你可以使用瀏覽器到rsync的官方下載網站下載源程序:[http://samba.org/ftp/rsync/](http://samba.org/ftp/rsync/ "http://samba.org/ftp/rsync/"). 也可以使用下面的命令行來下載, 其中主要有兩個gz文件:
<table id="cor." style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%">$ mkdir -p /Users/Shared/rsync<br/>$ cd /Users/Shared/rsync<br/>$ curl -O http://http://samba.org/ftp/rsync/<a href="http://samba.org/ftp/rsync/rsync-3.0.6.tar.gz">rsync-3.0.6.tar.gz</a><br/>$ curl -O http://http://samba.org/ftp/rsync/<a href="http://samba.org/ftp/rsync/rsync-patches-3.0.6.tar.gz">rsync-patches-3.0.6.tar.gz</a></td></tr></tbody></table>
假設這些下載的文件保存在/Users/Shared/rsync/目錄中, 后面我們也將工作在這個目錄中.
### 2. 展開tar.gz文件:
使用下面命令解壓縮,或者是用Archive Utility.app來解壓縮:
<table id="um5b" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%">$ tar -xzvf rsync-3.0.6.tar.gz<br/>$ tar -xzvf rsync-patches-3.0.6.tar.gz</td></tr></tbody></table>
在/Users/Shared/目錄中將出現rsync-3.0.6的文件夾。
### 3. 編譯安裝:
用下面的命令來打補丁保留Mac OS X的元數據
<table id="on3g" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;">$ patch -p1 <patches/fileflags.diff<br/>$ patch -p1 <patches/crtimes.diff</span></td></tr></tbody></table>
配置編譯并安裝
<table id="jqke" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;">$ ./prepare-source<br/>$ ./configure<br/>$ make<br/>$ sudo make install</span></td></tr></tbody></table>
?
### 4. 版本驗證
<table id="guor" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;"><span style="font-family: Courier New; color: #660000;">$ /usr/local/bin/rsync --version</span><br/></span></td></tr></tbody></table>
應該輸出如下:
<table id="pz8g" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%">rsync? version <strong>3.0.6</strong>? protocol version 30<br/>Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.<br/>Web site: http://rsync.samba.org/<br/>Capabilities:<br/>??? 64-bit files, 32-bit inums, 32-bit timestamps, 64-bit long ints,<br/>??? socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,<br/>??? append, ACLs, xattrs, iconv, symtimes, file-flags<br/><br/>rsync comes with ABSOLUTELY NO WARRANTY.? This is free software, and you<br/>are welcome to redistribute it under certain conditions.? See the GNU<br/>General Public Licence for details.</td></tr></tbody></table>
注意, rsync自動安裝到/usr/local/bin/目錄中, 而Mac OS X自帶的rsync版本在/usr/bin/目錄中,你可以添加路徑或者將新版本的移動到/usr/bin/目錄中.
### 5. 清理
這時候已經用不著保存這些下載文件和源程序了,刪除他們:
<table id="zv_o" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New; color: #660000;">$ rm -fr /Users/Shared/rsync</span><br/><span style="font-family: Courier New; color: #660000;">$ sudo rm /usr/share/man/man1/rsync.1.gz</span><br/></td></tr></tbody></table>
因為最后的安裝腳本沒有考慮到需要刪除原來Mac OS X自帶的rsync.1 man文件,所以上面腳本的最后一行刪除了舊版本的man文件。
### 命令解釋
### 1. 基本形式
它的命令行的基本形式是:
rsync [OPTIONS] SRC [SRC]... DEST
其中
[OPTIONS]是參數
?SRC [SRC]... 可以指定多個文件源
DEST 最后一個參數指定目的地
當然文件源SRC和目的地DEST可以是本地,可以是其它主機,可以是rsync服務程序地址等.
### 2. 常用參數:
-a:這個參數基本上包括了多數情況需要的復制選項,它等于選項-rlptgoD,
????? -r 所有子目錄,
????? -l 復制符號連接
????? -t 保留文件修改日期
????? -g 保留group屬性
????? -o 保留擁有者屬性
????? -D 復制設備和特殊文件
????? -p 保留權限屬性
-A, --acls:復制文件的ACLs
-N, --crtimes :保留生成日期屬性
-X, --xattrs: 保留擴展屬性(extended attributes)
--fileflags:復制文件的狀態標志(Mac OS X使用)
--force-change: 取消目的地的文件和目錄的系統和用戶的immutable標志
{上面這些尤其對Mac OS X文件系統重要}
-H, --hard-links:復制硬連接
-q, --quiet:安靜模式,不輸出信息
-x, --one-file-system: 禁止復制跨文件系統的文件
-s, --protect-args: 不分析文件名,直接拷貝他們
### 3. 應用場景參數
下面根據不同的應用場景做解釋
- 對于更新大文件可以使用--inplace選項,默認的是復制新文件,在確認復制完畢后,在刪除原來舊的已經存在的文件,這樣對于大文件,基于空間的考慮,可能造成備份的錯誤。
- 有的情況是只需要更新已經存在的文件,那么使用--existing, --ignore-non-existing選項
- 如果是移動而不是備份,可以是用--remove-source-files刪除源文件
- 有的時候可能需要備份制定的文件,指定的文件在一個文件列表中,那么可以是用參數:--files-from=FILE
- 增量復制的時候,可以指定完全備份和其它增量備份的路徑,這樣本次的增量備份,只備份以前以來改變的文件,選項參數為:--compare-dest=DIR
- 壓縮傳輸,這樣數據被壓縮后傳輸,適用于低速網絡,-z, --compress
- 測試使用:
-n, --dry-run:這個參數只是模擬備份過程,而不是實際傳輸數據
-v,--vverbose:顯示備份過程
-i, --itemize-changes:輸出一個文件變化匯總。
--progress: 顯示備份字節數,百分比,傳輸速度等信息
更多的參數和使用細則可以參考:
1. 使用rsync -h或者man rsync查看幫助信息。
1. rsync命令的網上幫助:http://samba.org/ftp/rsync/rsync.html
1. rsync作為伺服程序的在線幫助:http://samba.org/ftp/rsync/rsyncd.conf.html
?
### 應用實例:
1. 簡單的在一個主機上的數據備份:
比如將/Users/Shared目錄復制到/Users/Shared.Backup
<table id="g56i" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;">$ </span><span style="font-family: Courier New;">/usr/local/bin/rsync -aANHXxs --progress </span><span style="font-family: Courier New; color: #660000;">/Users/Shared/ /Users/Shared.Backup/</span><br style="font-family: Courier New; color: #660000;"/></td></tr></tbody></table>
2. 復制整個Mac OS X系統到另外一臺機器的目錄中:
假設遠程機器和目錄是:remote_address:/Volumes/Backup/, 用戶使用root
<table id="y8hl" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="color: #000000;">$ </span>/usr/local/bin/rsync -aNHAXx --protect-args --fileflags--force-change --rsync-path="/usr/local/bin/rsync" /root@remote_address:/Volumes/Backup/<br/></td></tr></tbody></table>
3. 使用ssh避免在遠程機上的認證過程:
下面假設使用root用戶作為遠程復制的用戶.
首先檢查當前是否已經存在認證鑰匙對:
| $ sudo ls -la /var/root/.ssh |
|-----|
如果有兩個文件存在:id_dsa和id_dsa.pub, 如果不存在則運行下面的命令來生成
| $ sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "this is for rsync over ssh" |
|-----|
而id_dsa是私有鑰匙,id_dsa.pub是公開鑰匙.
現在就把id_dsa.pub公開鑰匙添加到遠程目標機上的"/var/root/.ssh/authorized_keys"中, 也可以用下面的命令添加:
| $ sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_address 'cat - >> ~/.ssh/authorized_keys' |
|-----|
完成上面的步驟兩個機器就可以使用root用戶互相信任了。
4. 使用Launchd來實現自動備份<待后續>
?
### 比較: rsync和Apple的Time Machine
大家不免要想到好多其它的備份軟件,其中對于普通Mac OS X Leopard用戶來說,當然要說是蘋果開發隨Mac OS X Leopard發布的"時間機器"(Time Machine)了.
有了時間機器還用rsync類似的第三方的備份/同步軟件嗎?
我說,對于普通用戶,時間機器提供了功能強大穩定的用戶數據備份功能,而且是在最少的用戶干預情況下(用戶到SystemPreferences里面,撥動那個開關就可以打開或者關閉它,然后就讓它自己工作了),這對于普通用戶的使用感受來說,簡直是美妙極了。相比較上面的一大堆"非人性化的惡夢般的"參數,我很佩服時間機器的開發人員對于用戶需求的高度概括抽象能力和人性化的表達能力以及付諸實施的執行力,這方面微軟的備份和恢復功能,對于用戶來說多少有點復雜和不夠人性化了。
但是對于企業用戶,或者說企業的系統管理員來說,那簡直像一個玩具,無法達到企業備份需求.
當然了,時間機器并不是不可能在企業應用中使用,它作為一種用戶個人輔助備份選擇,同樣可以發揮自己的桌面備份作用,至少是一個選項。
而rsync不僅提供了強大的功能,而且用戶可以進行再次開發,或者給于GUI的包裝,改進用戶的使用體驗,它很好地支持網絡用戶的需求,也給于了管理員很多自由度以及對于細節的控制。結合其它的技術,可以實現完全/增量備份,定時備份,遠程備份恢復,用戶數據同步,可以利用rsyncservice而對遠程數據操作等等操作.
### 注釋:
這里的命令行都以$為開始,用來標示后面是用戶輸入的命令的內容,用戶輸入命令的時候只輸入后面的命令部分;有可能因為排版問題,命令會自動換行。
- 前言
- Mac OS X:如何將個人文件夾從默認卷移到其他卷(適合OSX10.5 Leopard)
- Mac OS X:Finder菜單中的Connect to Server選項禁止和打開
- Mac OS X: 蘋果機支持的分區表類型及問題解決
- Mac OS X: 偏好Preferences基礎(1)
- Mac OS X: 如何變更Office for Mac的注冊碼
- Mac OS X: 禁止/防止網絡用戶復制app程序到桌面
- Mac OS X: 用戶帳戶的選擇
- Mac OS X: 實用腳本程序(bash scripts)系列
- Mac OS X: 共享iPhoto圖片
- Mac OS X: 實用腳本程序(bash scripts)系列-2
- Mac OS X: 實用腳本程序(bash scripts)系列-3
- Mac OS X: 實用腳本程序(bash scripts)系列-4
- Mac OS X: 實用腳本程序(bash scripts)系列-5
- Mac OS X: 實用腳本程序(bash scripts)系列-6
- Mac OS X:升級rsync和同步應用實例
- Mac OS X: XAMP在Mac上的實現
- Mac OS X瘦身多法
- Mac OS X 10.5快速系統部署實踐-計劃(2) v1
- Mac OS X 10.5快速系統部署實踐-制作核心系統鏡像(1) v1
- Mac OS X數據備份方案一例
- Mac OS X數據備份方案一例(2)
- Mac OS X 10.5快速系統部署實踐-制作核心系統鏡像(2) v1
- Mac OS X: 打印系統治療
- Mac OS X:禁止崩潰報告
- Mac OS X:Snow Leopard的幾個改動(管理員相關)
- Mac OS X排錯:雪豹的最新更新Airport可能不支持無線802.11n網絡
- Mac OS X:雪豹內置支持讀寫NTFS卷
- Mac OS X:定制生成新用戶的程序包
- Mac OS X:在Windows里面使用命令行設置啟動系統
- Mac OS X: 實用腳本程序(bash scripts)系列-7
- Mac OS X:一種從APP中獲得PKG的方法
- Mac OS X: bash腳本實現添加無線SSID(Update2009-10-09)
- Mac OS X: 實用腳本程序(bash scripts)系列-8
- Mac OS X 10.5快速系統部署實踐-制作核心系統鏡像(4) v1
- Mac OS X: 徹底刪除GeekTool(bash腳本)
- Mac OS X: 實用腳本程序(bash scripts)系列-9
- 把你的Leopard變成Mac OS X的系統發布服務器(1)
- 把你的Leopard變成Mac OS X的系統發布服務器(2)
- 把你的Leopard變成Mac OS X的系統發布服務器(3)
- Mac OS X: 訪問控制遠程CUPS服務
- Mac &amp; Win混合平臺訪問和工具
- Mac OS X: DeployStudio更新v1.0rc16
- Mac: 想當Apple菜鳥不容易(1)
- Mac: 想當 Apple菜鳥不容易(2)
- Mac: 想當 Apple菜鳥不容易(3)
- Mac: 想當 Apple菜鳥不容易(4完)
- Mac電腦上處理攝像機上的存儲內容
- Mac OS X: Google自動更新程序的卸載
- 雪豹系統和SMB不兼容的問題的解決匯總
- Mac OS X: 實用腳本程序(bash scripts)系列-10
- Mac OS X:MagicPrefs介紹
- Mac OS X: 系統部署后程序安裝的用戶提示
- Mac OS X:開啟單程序模式
- Mac OS X: 在腳本里關閉Airport
- Mac筆記本電池:十點建議和其它
- Mac OS X: Launchd執行程序的一個例子
- Mac OS X:修改SMART Utility期限限制
- Mac OS X:網絡用戶環境個性配置實例
- Mac OS X:強制退出CD/DVD盤
- Mac OS X: launchd plist在線編輯器
- Mac OS X: 實用腳本程序(bash scripts)系列-11
- Mac OS X: 實用腳本程序(bash scripts)系列-12
- Mac: 卸載Safari 5.0.2
- Mac OS X: 實用腳本程序(bash scripts)系列-13
- Mac OS X: 文件圖標制作和變更(Resource Fork)
- Mac OS X 10.6.6更新之后NTFS只讀的解決
- Mac: 網絡用戶遇到Adobe Reader 9.x/10.x異常退出的解決
- Mac OS X: airport命令的參數
- Mac OS X的Spotlight綜述
- Mac OS X:AFP和SMB共享配置詳細配置
- Mac OS X:詳細解讀Munki和應用
- Mac OS X:顯示/設置分辨率的命令(源程序)
- Mac OS X: 是否升級到Lion?
- OSX: 禁止Flash Player 10.3自動更新
- OSX腳本:禁止系統自動添加AppStore圖標到用戶Dock上
- 獅子GM版本的安裝
- OS X Lion獅子安裝盤的初步研究
- OS X Lion獅子的恢復盤的刪除二法
- OSX: Finder的側邊欄(Sidebar)不顯示已裝載的網絡共享
- OSX:隱藏文件或文件夾
- OS X: 實用腳本程序(bash scripts)系列-13
- OS X: 實用腳本程序(bash scripts)系列-14
- OSX:Lion支持登錄窗口的Policy Banner
- OSX: 讓獅子說中文