rsync 是 Un*x like 系統上常見的遠端備份程式。
它可以比較原始資料與備份資料之間有哪些檔案有更新過,然後祇將這些檔案進行更新,所以備份速度極快,適合每日的備份工作。
配合 SSH 加密傳輸,以及利用公開金鑰驗證,可讓 rsync 進行異地備援時安全性大為提高。所以 rsync 是一個既快速又安全備份方案。
這麼方便的備份方案不祇在 Un*x like 系統下可以使用,在 Windows 上利用 rsync 進行異地備援也是相當方便的。
要利用 rsync 進行 Windows 資料備份,則需進行下列數項工作:
-
建置遠端主機,提供備份空間
- 安裝 rsync 套件,依您的系統自行尋找 rpm 或 deb 安裝,這邊不再說明。
- 修改 /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
} - 修改 /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 //不壓縮的檔案 - 重啟 xinetd,使 rsync 開始服務:/etc/init.d/xinetd restart
-
設定 rsync 以 ssh 進行連接
- 請確定要提供存放備份資料的主機有 ssh 服務。
- 從這邊下載打包好的 rsync for Windows,將檔案解開至 c:\cygwin 目錄下。
- 解開壓縮檔,執行 mount.exe (不需加任何參數)。它會自動將 c:\ 掛在 /cygdrive/c 、d:\ 掛在 /cygdirve/d ……(依此類推),如此一來我們就能夠使用 rsync 進行 Wins 資料備份。
- 利用壓縮包內的 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
//金錀的副檔名任意但不能省略,否則無法使用。 - 接著就會看到類似的畫面,要求輸入密碼時直接按 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 - 此時即產生錀匙。公錀存於 c:\go.dss.pub、私錀存為 c:\go.dss。
- 將 go.dss.pub 上傳至遠端主機的 ~/.ssh 下,並更名為 authorized_keys2
[c:cygwin]scp -S ./ssh.exe /cygdrive/c/go.dss.pub yourname@your.rsync.server:~/.ssh/authorized_key2 - 測試是否不需密碼即可 ssh 登入遠方主機:
[c:cygwin]ssh -i /cygdrive/c/go.dss yourname@your.rsync.server
-
設定本機要備份的資料夾與檔案
- 比方說 c:temp 內的所有檔案均要備份至遠端主機 /backup/temp/ 下。
-
測試備份是否成功
- 以下指令請下在同一行:
[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/ - 參數 -azr 使 rsync 備份檔案時進行壓縮,並將 C:temp 目錄下的所有子目錄進行備份。
- 參數 -e 呼叫 ssh 進行連線。
- 參數 --delete 告訴 rsync 若近端檔案、目錄刪除時,也將遠端相應檔案、目錄刪除。若無此參數,則遠端主機會保留所有檔案。
- 執行後登入遠端主機看看 /backup/temp 是否成功產生。
- 以下指令請下在同一行:
-
測試成功後將備份工作加入定時排程中
- 可以將備份工作寫成 backup.bat,讓 Windows 定時排程程式定時執行它,這樣就可以將檔案定時進行異地備援嘍!!
附註:
- rsync 是開放源碼程式,祇要不宣稱它是您撰寫的程式,在使用上不用擔心版權問題。
- 您可以在 http://samba.anu.edu.au/rsync/download.html下載最新版 rsync。如果您覺得麻煩,也可以 從這邊下載我打包好的 rsync。
剛剛看到一篇文章,它提到 server 如果有開 ssh 的話,即使未安裝 rsync server 也是可以的。所以我就試了一下,將 server 端的 rsync server 關掉,然後由 Windows 端以 rsync via ssh 進行備份,果然成功。
回覆刪除所以,如果要以 rsync via ssh 進行備份,那邊我這篇文章的第一部份「建置遠端主機,提供備份空間」可以整個忽略掉。這麼一來日後要做備份的準備工作就簡單多了。
祇需要將壓縮包解開,執行 mount.exe,產生公、私錀,就可以開始進行備份了,真是簡單的想要掉眼淚啊!!:)
給我轟然一擊的原文網址在此:
http://www.longren.org/2005/07/09/quick-and-easy-remote-backups/