tech level 3
history:
july 17, 2009: 若干處修辭的修改. 新增了和timemachine的比較部分.
rsync是開放許可gpl開放原始碼的增量資料傳輸/同步命令列工具。它採用快速演算法,只把遠端檔案和本地檔案不同的部分傳輸,從而得到本地和遠端資料同步。作為系統管理員的乙個難以置信好用的工具,它已經被接受和使用了好長時間了。
它的特點是:可以傳輸檔案/資料夾/目錄樹/甚至是整個系統;可以保留符號連線/許可權/硬連線/檔案屬性/裝置等;可以是用ssh/rsh等用於傳導;支援用於鏡象操作的匿名傳輸等等。
我目前的mac os x leopard是10.5.7版本,它本身所帶的rsync版本是2.6.9,在3.0.5之前的版本耗費更多的記憶體處理檔案,並且對沒有修改的 resource forks也會傳輸,更致命的是有可能在處理極多數量檔案(不是大檔案)的時候造成記憶體溢位的錯誤, 所以如果你沒有更新,那麼應該按照下面的方法更新。
這裡涉及很多命令列,所以適合於熟悉terminal的技術人員.
在/users/shared/目錄中將出現rsync-3.0.6的資料夾。
用下面的命令來打補丁保留mac os x的元資料
$ patch -p1
配置編譯並安裝
$ ./prepare-source
$ ./configure
$ make
$ sudo make install
$ /usr/local/bin/rsync --version
應該輸出如下:
注意, rsync自動安裝到/usr/local/bin/目錄中, 而mac os x自帶的rsync版本在/usr/bin/目錄中,你可以新增路徑或者將新版本的移動到/usr/bin/目錄中.
$ rm -fr /users/shared/rsync
$ sudo rm /usr/share/man/man1/rsync.1.gz
因為最後的安裝指令碼沒有考慮到需要刪除原來mac os x自帶的rsync.1 man檔案,所以上面指令碼的最後一行刪除了舊版本的man檔案。
它的命令列的基本形式是:
rsync [options] src [src]... dest
其中[options]是引數
src [src]... 可以指定多個檔案源
dest 最後乙個引數指定目的地
當然檔案源src和目的地dest可以是本地,可以是其它主機,可以是rsync服務程式位址等.
-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標誌
-h, --hard-links:複製硬連線
-q, --quiet:安靜模式,不輸出資訊
-x, --one-file-system: 禁止複製跨檔案系統的檔案
-s, --protect-args: 不分析檔名,直接拷貝他們
下面根據不同的應用場景做解釋
使用rsync -h或者man rsync檢視幫助資訊。
rsync命令的網上幫助:
1. 簡單的在乙個主機上的資料備份:
比如將/users/shared目錄複製到/users/shared.backup
$ /usr/local/bin/rsync -aanhxxs --progress
/users/shared/ /users/shared.backup/
2. 複製整個mac os x系統到另外一台機器的目錄中:
假設遠端機器和目錄是:remote_address:/volumes/backup/, 使用者使用root
$ /usr/local/bin/rsync -anhaxx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_address:/volumes/backup/
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來實現自動備份《待後續》
大家不免要想到好多其它的備份軟體,其中對於普通mac os x leopard使用者來說,當然要說是蘋果開發隨mac os x leopard發布的"時間機器"(time machine)了.
有了時間機器還用rsync類似的第三方的備份/同步軟體嗎?
我說,對於普通使用者,時間機器提供了功能強大穩定的使用者資料備份功能,而且是在最少的使用者干預情況下(使用者到system preferences裡面,撥動那個開關就可以開啟或者關閉它,然後就讓它自己工作了),這對於普通使用者的使用感受來說,簡直是美妙極了。相比較上面的 一大堆"非人性化的惡夢般的"引數,我很佩服時間機器的開發人員對於使用者需求的高度概括抽象能力和人性化的表達能力以及付諸實施的執行力,這方面微軟的備 份和恢復功能,對於使用者來說多少有點複雜和不夠人性化了。
但是對於企業使用者,或者說企業的系統管理員來說,那簡直像乙個玩具,無法達到企業備份需求.
當然了,時間機器並不是不可能在企業應用中使用,它作為一種使用者個人輔助備份選擇,同樣可以發揮自己的桌面備份作用,至少是乙個選項。
而rsync不僅提供了強大的功能,而且使用者可以進行再次開發,或者給於gui的包裝,改進使用者的使用體驗,它很好地支援網路使用者的需求,也給於了管理員 很多自由度以及對於細節的控制。結合其它的技術,可以實現完全/增量備份,定時備份,遠端備份恢復,使用者資料同步,可以利用rsync service而對遠端資料操作等等操作.
這裡的命令列都以$為開始,用來標示後面是使用者輸入的命令的內容,使用者輸入命令的時候只輸入後面的命令部分;有可能因為排版問題,命令會自動換行。
公升級Mac OS X上的git
開啟iterm使用命令列檢視git版本,發現居然還是mac預設的1.9.3版本 git version git version 使用命令檢視git路徑,返回結果是 usr bin git,而實際新安裝的2.10.1版本路徑是 usr local git which git usr bin git 使...
Mac OS X 是否公升級到Lion?
看現在的版本是否是ppc編碼的,如果是,那麼你肯定無法在新系統中使用它,是否公升級的決定就要基於,是否由其它軟體代替,你是否願意投資公升級等。另外,即便編碼方式支援,某些軟體在新系統中可能依然會出現或大或小的問題,這要仔細檢視各個軟體的相容列表更新。目前 各個軟體開發商肯定在預發布版本中測試自己的軟...
Mac OS X 是否公升級到Lion?
看現在的版本是否是ppc編碼的,如果是,那麼你肯定無法在新系統中使用它,是否公升級的決定就要基於,是否由其它軟體代替,你是否願意投資公升級等。另外,即便編碼方式支援,某些軟體在新系統中可能依然會出現或大或小的問題,這要仔細檢視各個軟體的相容列表更新。目前 各個軟體開發商肯定在預發布版本中測試自己的軟...