發新話題
打印

[轉貼]介紹一下 rsync 這個同步備份程式

[轉貼]介紹一下 rsync 這個同步備份程式

http://www.ntu.beautifulworldco.com/weblog/?p=385

我用 rsync 這個程式已經有一段時間了,今天終於有時間寫篇文章介紹這個好軟體!

rsync 就是 remote sync,顧名思義就是可以同步兩台機器上的檔案與目錄,而我會特別喜歡 rsync 的原因就是它可以同步 unix 與 windows 的機器,也就是可以

unix -> unix
unix -> windows
windows -> unix
windows -> windows

而且,很重要的,rsync 支援 SSH,也就是加密傳輸。

也就是說有了 rsync,想要把 windows 上的資料備份到 unix 上,以及把 unix 上的資料回存到 windows 上,就不是很困難的事情了。(不過 unix 上的檔案名稱不能是 unicode 的字元,所以 windows 下有 unicode 檔名的檔案就無法透過 rsync 同步到 unix 上,這不是 rsync 的錯)

也許有人會問,要備份用 ftp、網路芳鄰就好了,為什麼要用 rsync?簡單的說,rsync 可以很快的找出兩個檔案系統的差別,單純 備份/回存 不同的部份,所以速度會比較快。當然,也許還有別人會問「還有其他的軟體呀!」,這我知道,不過其他軟體大多都是同一台 windows 機器的備份(把一個目錄備份到另一個目錄),或是 windows 機器和 windows 機器之間的備份,而我要的是 unix 和 windows 之間使用 SSH 的備份,在不考慮一些商業軟體,像是 Sun Enterprise Backup Software 或是 Netbackup 的情形之下,rsync 是一個簡單好用的軟體。

底下來介紹 rsync 的使用方法,

1. unix -> unix

unix 機器之間的 rsync 是非常簡單的,比如說在 A 機器(192.168.1.1) 上,要把 /work 底下的資料同步到 B 機器(10.0.0.40) 的 /home/work 之下,只要在 A 機器上打這個指令就行了,

rsync -r –size-only -t -l -I -p -o -g -z –stats -v –delete /work 10.0.0.40:/home/work

如果要把 B 機器的資料同步回來也很簡單,打這個指令,

rsync -r –size-only -t -l -I -p -o -g -z –stats -v –delete 10.0.0.40:/home/work /work

以上兩個指令都會問 user 的密碼,不想每次都回答密碼的話請參考這篇文章 Rsync + SSH — 讓 Server 自動異地備援也加密

順便提一下,如果要連過去的 user 是 root,那麼在使用 rsync 的時候可能會失敗,狀況是會問密碼,但是即使輸入正確的密碼也無法連進去。這不是 rsync 的問題,而是 ssh 的問題,因為 ssh 預設是不讓 root login 的。

在此提供 Solaris 上的解決方法。首先去修改 /etc/ssh/sshd_config ,把 PermitRootLogin 後面的 no 改成 yes,然後重新起動 sshd 就行了。

在 Solaris 10 上重新起動 sshd 的方法是 svcadm disable ssh; svcadm enable ssh

2. windows -> unix 和 unix -> windows (假設 windows 的 ip 是 10.0.0.50)

首先去看一下 rsync windows 版的網頁,下載並且在 windows 上安裝 cwRsync Server (要點 Download cwRsync Server! 而不是 Download cwRsync!),裝完之後修改 C:\Program Files\cwRsyncServer\rsyncd.conf ,照著裡面的格式自己加上幾個 modules,也就是加上要 備份/回存 的目錄,

注意一下 read only,如果是 true 的話就不能回存,是 false 才能回存。另外,文件裡寫說要 Prep a Dir for Upload,不過我自己試的結果,不執行這個步驟也沒問題。

然後啟動 Openssh SSHD 和 RsyncServer 這兩個服務。

註:啟動服務的方式是在 我的電腦 上按一下滑鼠右鍵,點選管理,會出現電腦管理的視窗,然後點 電腦管理(本機) -> 服務及應用程式 -> 服務,在右邊畫面上就可以看到一堆服務,找到 Openssh SSHD 和 RsyncServer 之後,在上面按滑鼠右鍵,然後點 啟動 即可。

接下來是把 C:\Program Files\cwRsyncServer\var\SvcwRsync\.ssh\cwrsync 利用 ftp 或其他方式傳到 unix 的機器上,比如說放到 /.ssh 這個目錄下,於是我們在 unix 的機器下就有 /.ssh/cwrsync 這個檔案了。

再下來有點麻煩,因為有好幾個步驟要做,所以 cwRsync 的網站上介紹了一個 shell script 。我把那個 shell script 稍微改寫一下,改成 backup_from_windows.shrestore_to_windows.sh

backup_from_windows.sh 的用途是 windows -> unix,用法是
backup_from_windows.sh <windows_ip> <windows_module> <unix_directory>

restore_to_windows.sh 的用途是 unix -> windows,用法是
restore_to_windows.sh <windows_ip> <unix_directory> <windows_module>

不過我用的系統是 Solaris,裡面所需要用到的 ps 是 /usr/ucb/ps,其他的 unix 系統要用的應該是 /bin/ps,這個請自行修改;同時,那個 cwrsync 如果不是放在 /.ssh 之下或是檔名有改,也請自行修改這兩個 shell scripts。

另外要特別提一點,在 windows 的 rsyncd.conf 裡的一個標準的 module 寫法是像這樣

[test1]
path = /cygdrive/d/16
read only = false
transfer logging = yes

這個 module 的名稱是 test1 ,所定義的目錄是 D:\16,read only 是 false,所以除了備份之外也可以回存。所以想要在 unix 上把 windows 上的 D:\16 備份到 /work/16,就會下像這樣的指令,

backup_from_windows.sh 10.0.0.50 test1 /work/16

這樣 D:\16 下的所有目錄和檔案就會全部備份到 /work/16 去了。

但是,如果要把 /work/16 回存到 D:\16 的話,請記得要用 /work/16/ 而不是 /work/16,也就是說指令要這樣下,

restore_to_windows.sh 10.0.0.50 /work/16/ test1

如果不用 /work/16/ 而用 /work/16 的話,在 windows 裡的 D:\16 裡就會多一個目錄 D:\16\16,這就不是我們所期待的結果了。

3. windows -> windows

我不需要 windows -> windows,所以沒做過這樣的設定,有需要的人可以自己參考網站上的 這篇文件

3 Responses

  1. Gus blog online » 放棄 Samba, 改用 cwRsync Says:

    [...] 介紹一下 rsync 這個同步備份程式 [...]

  2. Lakers 火星特區 » Blog Archive » rsync: 備份DreamHost到Mac Says:

    [...] 柚可椰小站 » Blog Archive » 介紹一下 rsync 這個同步備份程式 [...]

  3. Lakers 火星特區 » Blog Archive » [相關連結]RsyncX的備份策略 Says:

    [...] 柚可椰小站 » Blog Archive » 介紹一下 rsync 這個同步備份程式 [...]

Leave a Comment


TOP

發新話題