[2008-12-29]: 新增batch file, 寫入log
一直在找一個可以自動backup 到網路的軟體, 但 Mozy 只有2G
只計算我的相片已經 25G 以上....
我還想backup 一些常修改的, 日常會幫助我的小程式..
要求簡單:
- 自動定時 backup
- backup 到網路上
- 網路硬碟當然越大越好
最後, 我將我的資料都定時backup 到我 dreamhost 的 350G 網路空間上了
近來我在做website 的backup 的時候,
使用過rsync 這一個linux 的命令, 發覺它很也強大
- 使用rsync 算法的增量式backup, 在只有檔案經過修改或者新增的時候才傳送, 否則略過
- 可以使用ssh 傳送, 防止傳送時檔案資料外洩
- 使用ssh 傳送也即是可以使用ssh key pair 作自動authorize, 不用輸入密碼
- 第一次的上傳可以使用ftp (會比用ssh 快, 第一次上傳25G 的資料可痛苦了...)
google 一下 "rsync windows",
便開始了一個竟然要花一星期空餘時間才完成的工作.....(是我太慢)
地雷相當的多...
而且網上的教學大都是本地linux 機, windows 機的實例少而且沒有詳盡說明...
rsync in windows 的實現方法有使用 deltacopy 或者 cygwin
但我的電腦使用 deltacopy 一直連不到 host, 可能是使用了 non-installer 的關係
我打開 deltacopy 發覺其實都是一個 cygwin
而且有現成的 rsync.exe ssh.exe 可以使用 (估計直接來自cygwin)
那唯有自己手動做命令行....
先試 rsync 命令: (有需要的話, 要手動加環境變數....)
rsync.exe -avz [localDir] [user]@[host]:[remoteDir]輸入密碼
沒問題的話, remoteDir 內應該已經同步了 (可以先用細小的檔案試)
這樣便完成了手動的部份
要使用安全的連線, 當然是使用ssh
rsync.exe -avz [localDir] -e ssh [user]@[host]:[remoteDir]但仍然要輸入密碼, 不能自動化
要免除輸入密碼, 便要使用ssh key 了
地雷都在這.....
要使用ssh key:
rsync.exe -avz [localDir] -e "ssh -i [private.ppk]" [user]@[host]:[remoteDir]但一直不能正確的輸入passphrase
連沒有passphrase 的 key pair 都一直在問passphrase
這問題我一直不能解決
上網也找不到相同的個案...
PuTTygen 的key pair 在不知道原因之下,
ssh.exe 一定會問passphrase, 而我一直使用之前一直使用的 private key
一直問passphrase, 但明明 這private key 已經是沒有passphrase 的...
最後安裝了一個完整的cygwin, openssh 都沒有幫助
最後死氣的連command line keygen 都一併跟著做:
使用了cygwin 的 ssh-keygen (openssh package)
ssh-keygen -t rsarsync.exe -avz [localDir] -e "ssh -i [id_rsa]" [user]@[host]:[remoteDir]天呀....
再schedule bat file:
FOR /f "tokens=1-4 delims= " %%D in ('echo %date:/= %') do set DATEN=%%F%%E%%D
rsync.exe -avz [localDir] -e "ssh -i [id_rsa]" [user]@[host]:[remoteDir] >> "log/backup_%DATEN%"
rsync.exe -avz log -e "ssh -i [id_rsa]" [user]@[host]:[remoteDir]/log留意第一行是設定一個用日期作檔名的log file
第二行將rsync 的輸出寫到log file
最後將log file 都sync 到server

Comments
Joe
Joe 你好
會繞到你的Blog是因為要找一些Drupal入門的文件
無意間看到你這篇文章
我也曾經為了要把資料從winxp備份到Linux上(via sftp)傷透腦筋
剛開始是用samba service 掛一台網路磁碟來本機,不過一出區網就沒輒
cygwin配上rsync我也玩過,但是安裝cygwin很多問題我搞不定
現在我用的方案是winscp,這是目前我找到"唯一"可以透過sftp來做檔案同步的軟體
可以在http://winscp.net/eng/docs/lang:cht 下載
安裝完以後,只要寫一個 .bat file 如下即可
@echo on (將執行中的訊息印出來)
cd c:\program files\winscp (再把工作目錄轉到 winscp的安裝目錄)
winscp.com /command "option transfer automatic" "option echo on" "open sftp://username:password@11.22.33.44:22" "synchronize remote -mirror -delete -criteria=both d:/somedir /myhome/remotedir" "close " "exit"
其中一對quotation mark代表一個指令
前面兩個option設定transfer mode(option transfer automatic), 並印出執行間的訊息(option echo on)
再來用ssh的帳號(e.g. username)密碼(password,請用你自己的) 走sftp,port22登入 (open sftp://username:password@11.22.33.44:22)
最後 "synchronize remote -mirror -delete -criteria=both d:/somedir /myhome/remotedir"
做synchronize 採單向備分(參數remote),如果有檔案在遠端 (/myhome/remotedir)目錄下,卻不在local (d:\somedir) 裡,就將其刪除 (參數 -delete)
完成以後利用 "close" 關閉這一個session,再利用 "exit"離開 winscp
最後再排程執行即可
因為電腦只有我自己一個人會用,所以登入的部分我還是用輸入密碼的方式,private key的方法我沒有試過,不確定winscp有沒有解決的方法
此外,謝謝你寫的Drupal文件,以前寫網站都是一個人用php從頭到尾自己做
看起來drupal可以省去我很多麻煩事 :)
強! 我自己有用winscp
強!
我自己有用winscp 的,
因為管files, 連putty 都真的很方便
但就沒有想過用 cmd line winscp 的方式做
我會研究一下, 先謝了
有没有更为简便的方
有没有更为简便的方式呢?
Post new comment