번개치며 비오던 장마 어느날 저녁이었습니다.
번쩍하더니, 사무실에 전원이 깜빡 나갔다 들어오는 것이 아니겠습니까?
삐~, 삐~ 하면 Reset되는 컴퓨터 소리.  몇시간 작업하던 내용이 다 날라갔습니다. 으~~
그 다음부터 Ctrl-S를 수없이 누르는 버릇이 생겼고,
UPS를 모든 PC, Linux서버, 그리고 Workstation에 설치했습니다.


그리고 나서도 이런 고민에서 자유롭지 못했죠.
지금 사용하는 Linux서버나 Workstation이 다운 되버린다면?
누군가의 PC를 도난 당하거나, 떨어뜨려서 Hard가 완전히 망가진다면?
게다가 사무실 건물에 화재가 나서 모든 시스템이 없어진다면?


생각해도 끔찍합니다.
Veritas같은 tool을 사용할 수 있는 경우야 다행이지만, 그렇지 않다면 비용이 거의 들지 않는
다음 방법을 사용해보시기 바랍니다.  리눅스 서버 하나에 하드만 충분히 추가하시면 됩니다.


backup program은 rsync를 사용합니다. 
rsync의 GNU community에 감사드립니다.  (http://samba.anu.edu.au/rsync/)
rsync는 remote copy와 동일하며 sub directory 또한 모두 복사합니다.
cp -r (linux | solaris) 혹은 xcopy (win)과 유사합니다.  rcp와도 비슷하죠.
rsync가 다른 점은 동일한 내용은 복사에서 제외한다는 것입니다.
매번 full backup을 해도, incremental backup만큼의 bandwidth만을 사용하는 것이죠.


이제 본론으로 들어가죠.  (길게 쓰는 것 않좋아 합니다)




위의 그림과 같이 <rsync서버>와 <remote rsync서버>가 존재합니다.
windows, linux, workstation은 <rsync서버>에 매일 backup을 합니다.
<rsync서버>는 매주 <remote rsync서버>에 backup을 합니다.
<remote rsync서버>에는 primary와 secondary backup을 가지고 있습니다.
primary는 매주 backup되고 secondary는 매달 한번씩 backup됩니다.


backup에서 가장 중요한 것이 '자동' 으로 되게 하는 것입니다.  사람은 게을러 지니까요.
Linux나 workstation에는 crontab을 사용하면 됩니다.  Windows에도 crontab이 있지만,
cygwin을 설치해야 하기 때문에, DeltaCopy를 사용합니다.  또한 감사드립니다.
(http://www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp)
Cygwin을 이미 설치하는 분은 DeltaCopy를 추가로 설치하면서 고생을 하실겁니다.
버전 때문입니다.  해결 못하시면 알려주세요.


마찬가지로 <rsync서버>에서 <remote rsync서버>로의 backup에도 crontab을 사용하면 됩니다.
근데 crontab은 매달 첫주에는 secondary로 backup을 표현하기가 거의 불가능합니다.
따라서 shell script를 사용합니다.  /usr/local/script/rsync-run의 내용입니다.
매주 토요일에 crontab에서 수행되며, 매달의 첫주에는 secondary에 나머지 주에는 primary에
backup됩니다.  결과 확인을 위해 /usr/local/script/rsync-hist에 내용이 저장됩니다.
주의 : <remote IP>는 원격 서버의 IP로 바꾸시면 됩니다.


#!/bin/sh
#
# Script written by James '2006 3
#        modified by James '2006 4
#


script_file="/usr/local/script/rsync-hist"


#echo $(date +%d)


case $(date +%d) in
01|02|03|04|05|06|07)
echo First Saturday
primary=0
;;
08|09|10|11|12|13|14)
echo Second Saturday
primary=1
;;
15|16|17|18|19|20|21)
echo Third Saturday
primary=1
;;
22|23|24|25|26|27|28)
echo Fourth Saturday
primary=1
;;
29|30|31)
echo Fifth Saturday
primary=1
;;
*)
echo error…
exit 1
;;
esac


if [ $primary -eq 1 ]; then
echo `date` : weekly run to primary
echo `date` : weekly run to primary >> $script_file
echo rsync rosso
rsync -Cavz --delete /disk1 <remote IP>::pc_primary
echo `date` : finished
echo `date` : finished >> $script_file
else
echo `date` : monthly run to secondary
echo `date` : monthly run to secondary >> $script_file
echo rsync rosso
rsync -Cavz --delete /disk1 <remote IP>::pc_secondary
echo `date` : finished
echo `date` : finished >> $script_file
fi

유용한 rsync 스크립트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다