星期三, 十二月 07, 2005
利用 rsync 備份 Wins 資料至遠端主機
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
-
- 請確定要提供存放備份資料的主機有 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: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 是否成功產生。
- 以下指令請下在同一行:
- rsync 是開放源碼程式,祇要不宣稱它是您撰寫的程式,在使用上不用擔心版權問題。
- 您可以在 http://samba.anu.edu.au/rsync/download.html下載最新版 rsync。如果您覺得麻煩,也可以從這邊下載我打包好的 rsync。
| Technorati Tags: rsync、ssh、security、備份、異地備援 |
訪客留言
雖走了一大圈,但也學了一招
剛剛看到一篇文章,它提到 server 如果有開 ssh 的話,即使未安裝 rsync server 也是可以的。所以我就試了一下,將 server 端的 rsync server 關掉,然後由 Windows 端以 rsync via ssh 進行備份,果然成功。
所以,如果要以 rsync via ssh 進行備份,那邊我這篇文章的第一部份「建置遠端主機,提供備份空間」可以整個忽略掉。這麼一來日後要做備份的準備工作就簡單多了。
祇需要將壓縮包解開,執行 mount.exe,產生公、私錀,就可以開始進行備份了,真是簡單的想要掉眼淚啊!!:)
給我轟然一擊的原文網址在此:
http://www.longren.org/archives/1943
連結修改
http://www.longren.org/archives/1943
上面那個連結移到底下那個了
http://www.longren.org/2005/07/09/quick-and-easy-remote-backups/
謝謝您的更正
anndy:
謝謝您的訊息!!
不過我是在迴響中提到連結的,所以無法更正了。^^;
但還是要感謝您專程告訴我這個訊息,謝謝!!


