SSH + Rsync的備份機制




SSH + Rsync的備份機制
卓國興 2011/05/21



備份流程示意圖:

ssh+rsync的備份機制

為何要備份,又,備份的資料與方法要如何決定呢?有哪些備份機制可以快速簡單呢?



備份是個很重要的工作,電腦周邊硬體你無法去保證他是天天『平安無事』的,就算不是硬體造成的,也有可能發生在你的不小心誤刪、中毒或被入侵的不可預期的情況而遺失資料,此時,備份的資料就是你的救星。
要知道,系統與軟體損毀,重灌就好,資料遺失,就像『大江東去』。
Linux
上的備分方法有很多種,端視個人的需求去取用,可以複雜,可以簡單,dd tar cpio dump等指令,都是不錯的備份工具,若要達到快速、簡單又安全,那麼,依小弟的個人淺見,把rsync加上ssh的加密機制,將是很好的選擇。
rsync
使用所謂『rsync演算法』,進 行 檔 案 比 對 、 傳 輸 與 複 製,可以很快的比對來源與目的端檔案的異動部份,非每次都進行完整的備份,所以,速度與頻寬的利用,都相當優異。
rsync
是撰寫來取代rcpscp的。可以用來實現透過rsync/ssh,從多個client端以鏡像(mirror)備份到伺服器。搭配cron排程,任何人皆可排程讓多台電腦與伺服器間使用自動加密過、基於rsync的鏡像備份。
要備份哪些目錄,端是個人的需求,通常有網站,會備份/var/www /var/lib/mysql等放置資料檔案的地方,若要備份設定檔案,則會字加入/etc/apache2 /etc/php5等的目錄
不需要備份的目錄:
linux系統中,就算是整個/都要備份,但也需忽略掉一些特殊的目錄,像是/proc這個程序執行的目錄
/mnt
/media 用來掛載了其他的裝置的目錄,不需要備份
/dev
設備檔目錄這個也可以不去理會
/tmp
這個暫存檔目錄也是無需備份的


Linux端使用 ssh+rsync 的備份方法
Server
端:
只要啟動 ssh server
/etc/init.d/ssh start
rcconf
ssh設為開機啟動

client
端執行:(註:如果你使用linux系統,並且要備份具特殊權限的東西(mysql),那麼需以root身份執行以下動作)
ssh-keygen [-t dsa|rsa](
不要輸入passphares的密碼)於自家目錄下產生~/.ssh/id_rsa id_rsa.pub
cat  ~/.ssh/id_rsa.pub | ssh -l root  serverIP "cat - >> ~/.ssh/authorized_keys"
ssh -l root serverIP (
確認不需密碼可以登入,就可以進行以下的備份動作了)

備份與取回
ssh -l root serverIP ‘mkdir /root/backup’ (
登入遠端,並建立backup目錄) 

備份到遠端
rsync -av --delete --backup --backup-dir=/root/backu/recycle/`date +%F` --rsh=ssh --stats
目錄1  目錄2 --numeric-ids  root@遠端ip:/root/backup

 取回備份
rsync -v -u -a --numeric-ids --delete --backup --backup-dir=/root/backu/recycle/`date +%F` --rsh=ssh --stats root@
遠端ip:/root/backup/目錄1 :/root/backup/目錄2 .
注意,不同的linux作業系統應使用 --numeric-ids, 這是因為相同的使用者名稱,在不同的系統可能有不同的uid/gid,如mysql,以此參數健行備份與還原,方能維持還原回來的資料為原來的uid /gid,不過,若是你更換或升級系統,有可能造成還原的資料的uid/gid對應的使用者錯誤,例如mysql,此時,你可以手動 chown -R mysql /var/lib/mysql來還原使用者身份。
--numeric-ids
不將傳送端檔案的uidgid,與目的端的使用者/群組進行配對. 若傳送端並沒有uidgid的對應名稱(:原帳號群組被刪除的遺留檔案), 或目的端沒有相對應的帳號/群組,保留數字型態的uid/gid

 另外,使用 --backup --backup-dir=/root/backu/recycle/`date +%F`, 則是一個使用類似資源回收統的機制,來對同步的動作做一個保護機制,當本地端新編修或刪除的程式碼,經同步後,與端的目的目錄就會跟本地端相同了,若你欲 取回之前的舊的、刪除的程式碼,就可以透過此機制,去backup-dir所指定的目錄(如:/root/backup/recycle /2001-05-21)取回了
-b, --backup
目的地端先前已經存在的檔案在傳輸或刪除前會被備份.  

--backup-dir=DIR 設定備份的資料夾.   

--suffix=SUFFIX 指定備份的檔案名稱字尾形式(預設為~).

--bwlimit=KBPS
定義傳輸頻寬的大小(KBytes/),這個可以限定你進行同步時,使用的頻寬,如果家裡的電腦是多人使用的環境,可以使用此參數限制上傳或下載的頻寬,以免讓家裡面其他使用電腦的人,覺得上網的速度受到影響
 

使用crontab做定時備份
設定 crontab , 定時執行備份
sudo gedit /root/bkeclass.sh


/root/bkeclass.sh的內容如下:
#! /bin/sh
rsync -av  --delete --backup --backup-dir=/root/backu/recycle/`date +%F` --rsh=ssh --stats
目錄1  目錄2  --numeric-ids root@遠端ip:/root/backup


加入可執行權限:
sudo chmod u+x /root/bkeclass.sh
定時備份:
sudo crontab -e
0 3 * * * /root/bkeclass.sh
註:每日 3 時執行 bkeclass.sh 以備份資料
列出定時備份
sudo crontab -l
rcconf
cron選起來

下載使用快速設定工具 ensshRsync.sh工具
修改:gedit ensshRsync.sh,把以下的紅字的部份改為適合自己的參數
#
本地端要備份的目錄
backuplist="/var/www /srv/ftp"
#
遠端備份主機的IP OR DomainName
remote="192.168.1.2"
#
備份的目錄名稱
remoteDIR="/root/backupFTP3"
#
頻寬設定
limit=5000
......................................
 
執行這個shell程式,就可以以無須密碼的方式以rsync + ssh 進行遠端備份的工作,並建立一個名為getMyBackup.sh,取回遠端備份的指令
當然,你也可以使用任何可以透過 22port 的連線軟體,來取回你的資料,如使用跨平台的FileZilla使用sftp來登入並取回


Windows使用 ssh+rsync 的備份方法

備份windows端的資料,可以備份到linux系統的某user的目錄下,因為資料沒有uid/gid的問題
 
安裝cygwinrsync ssh cron 選起來安裝



執行ssh-keygen.exe
ssh -l user serverIP ‘mkdir .ssh backup’ (
登入遠端,並建立backup.ssh目錄)
cat  ~/.ssh/id_rsa.pub | ssh -l user  serverIP "cat - >> ~/.ssh/authorized_keys"
rsync -av --delete --rsh=ssh --stats /cygdrive/c/Users/Administrator/Vid
os user@ServerIP:/home/user/backup/



注意:cygwinAdministratorwindowsAdministrator是不同的人,一個是在/home/Administrator下,一個在c:\Users\Administrator(Win7),對cygwin而言,c:\就等於/cygdrive/c,所以要備份c:\Users\Administrator的資料,在cygwin下要寫成/cygdrive/c/Users/Administrator

安裝madedit
http://sourceforge.net/projects/madedit/

下載ensshrsync.ssh,並以madedit編輯(不可以使用wordpad編輯,因為斷行的符號不同)
#!/bin/bash
#Author: kawsing
#Date:2011/05/17
#
本地端要備份的目錄
backuplist="/cygdrive/c/Users/Administrator/Videos/  
資料夾1  資料夾2"
#
遠端備份主機的IP OR DomainName
remote="
遠端主機"
#
備份的目錄名稱
remoteDIR="/home/user/backupmyWIN7DATA"
#
頻寬設定
limit=5000
..........................................................
..........................................................

設定cron

cron-config
Enter the value of CYGWIN for the daemon: [ ]ntsec
Do you want the cron daemon to run as yourself? (yes/no)yes
Please enter the password for user 'Administrator':(
輸入此使用者的Windows密碼)
Reenter:(
再次輸入密碼)
Running cron_diagnose ...
WARNING: You do not currently have a crontab file.
... no problem found.
Do you want to start the cron daemon as a service now? (yes/no) yes

crontab.exe -e
:wq!
寫好的檔案會存在c:\cygwin\var\cron\tabs你可以使用madedit編輯

./getMyBackuo.sh,
檔案會被還原到c:\cygwin\home\Administrator
你也可以透過FileZillawinscp等軟體,以22 port連上主機,取回個人資料

cygwin
服務的啟動與關閉
cygrunsrv -S cron
cygrunsrv -E cron



Android手機也來囉
Android的手機上,去Market,下載安裝 rsync backup for Android,也可以使用此方法來進行備份,相當有趣



留言

熱門文章