2005年12月7日 星期三

利用 rsync 備份 Wins 資料至遠端主機

rsync 是 Un*x like 系統上常見的遠端備份程式。

它可以比較原始資料與備份資料之間有哪些檔案有更新過,然後祇將這些檔案進行更新,所以備份速度極快,適合每日的備份工作。

配合 SSH 加密傳輸,以及利用公開金鑰驗證,可讓 rsync 進行異地備援時安全性大為提高。所以 rsync 是一個既快速又安全備份方案。

這麼方便的備份方案不祇在 Un*x like 系統下可以使用,在 Windows 上利用 rsync 進行異地備援也是相當方便的。

要利用 rsync 進行 Windows 資料備份,則需進行下列數項工作:

  1. 建置遠端主機,提供備份空間
  2. 設定 rsync 以 ssh 進行連接
  3. 設定本機要備份的資料夾與檔案
  4. 測試備份是否成功
  5. 測試成功後將備份工作加入定時排程中
  1. 建置遠端主機,提供備份空間

    1. 安裝 rsync 套件,依您的系統自行尋找 rpm 或 deb 安裝,這邊不再說明。
    2. 修改 /etc/xinetd.d/rsync ,使 rsync server 以 daemon 方式啟動:
      service rsync
      {
      disable = no
      socket_type = stream
      wait = no
      user = root
      server = /usr/bin/rsync
      server_args = --daemon
      log_on_failure += USERID
      }
    3. 修改 /etc/rsyncd.conf ,設定備份方案:
      [backup_01]
      comment = Backup Notebook //備份註解
      path = /backup //備份檔案要貯存的目錄
      use chroot = no
      read only = no
      uid = nobody
      gid = nogroup
      auth users = yourname
      strict modes = yes
      hosts allow = 192.168.1.0/24 localhost
      hosts deny = * //其他節點全部擋掉
      transfer logging = yes
      dont compress = *.rar *.zip //不壓縮的檔案
    4. 重啟 xinetd,使 rsync 開始服務:/etc/init.d/xinetd restart
  2. 設定 rsync 以 ssh 進行連接

    1. 請確定要提供存放備份資料的主機有 ssh 服務。
    2. 從這邊下載打包好的 rsync for Windows,將檔案解開至 c:\cygwin 目錄下。
    3. 解開壓縮檔,執行 mount.exe (不需加任何參數)。它會自動將 c:\ 掛在 /cygdrive/c 、d:\ 掛在 /cygdirve/d ……(依此類推),如此一來我們就能夠使用 rsync 進行 Wins 資料備份。
    4. 利用壓縮包內的 ssh-keygen.exe 建立公鑰及私鑰 (我試過以 putty 的姐妹程式 puttygen.exe 建立公、私錀,但使用時 rsync 一直要我輸入密碼。使用 ssh-keygen 建立公、私錀就一切正常,所以還是用 ssh-keygen 建立加密錀匙):
      [z:cygwin]ssh-keygen -t dsa -b 1024 -f /cygdrive/c/go.dss
      //產生公、私錀,並存放為 c:\go.dss
      //金錀的副檔名任意但不能省略,否則無法使用。
    5. 接著就會看到類似的畫面,要求輸入密碼時直接按 Enter 跳過,以免日後要進行備份時還需要輸入密碼:
      Generating public/private dsa key pair.
      Enter passphrase (empty for no passphrase):[直接按 Enter]
      Enter same passphrase again:[直接按 Enter]
      Your identification has been saved in /cygdrive/c/go.dss.
      Your public key has been saved in /cygdrive/c/go.dss.pub.
      The key fingerprint is:
      80:ed:7a:17:d8:e8:f4:74:40:58:d6:56:de:c8:d1:46 john@JOHN
    6. 此時即產生錀匙。公錀存於 c:\go.dss.pub、私錀存為 c:\go.dss。
    7. 將 go.dss.pub 上傳至遠端主機的 ~/.ssh 下,並更名為 authorized_keys2
      [c:cygwin]scp -S ./ssh.exe /cygdrive/c/go.dss.pub yourname@your.rsync.server:~/.ssh/authorized_key2
    8. 測試是否不需密碼即可 ssh 登入遠方主機:
      [c:cygwin]ssh -i /cygdrive/c/go.dss yourname@your.rsync.server
  3. 設定本機要備份的資料夾與檔案

    1. 比方說 c:temp 內的所有檔案均要備份至遠端主機 /backup/temp/ 下。
  4. 測試備份是否成功

    1. 以下指令請下在同一行:
      [c:cygwin]rsync.exe -azr -e "/cygdrive/c/cygwin/ssh.exe -i /cygdrive/c/go.dss" --delete /cygdrive/c/temp/ yourname@your.rsync.server:/backup/temp/
    2. 參數 -azr 使 rsync 備份檔案時進行壓縮,並將 C:temp 目錄下的所有子目錄進行備份。
    3. 參數 -e 呼叫 ssh 進行連線。
    4. 參數 --delete 告訴 rsync 若近端檔案、目錄刪除時,也將遠端相應檔案、目錄刪除。若無此參數,則遠端主機會保留所有檔案。
    5. 執行後登入遠端主機看看 /backup/temp 是否成功產生。
  5. 測試成功後將備份工作加入定時排程中

    1. 可以將備份工作寫成 backup.bat,讓 Windows 定時排程程式定時執行它,這樣就可以將檔案定時進行異地備援嘍!!

附註:

  1. rsync 是開放源碼程式,祇要不宣稱它是您撰寫的程式,在使用上不用擔心版權問題。
     
  2. 您可以在 http://samba.anu.edu.au/rsync/download.html下載最新版 rsync。如果您覺得麻煩,也可以 從這邊下載我打包好的 rsync

Technorati : , , , , ,