2006년 05월 29일
Rsync를 이용한 Backup 시스템

번개치며 비오던 장마 어느날 저녁이었습니다.
번쩍하더니, 사무실에 전원이 깜빡 나갔다 들어오는 것이 아니겠습니까?
삐~, 삐~ 하면 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
아참, 왜 backup이 첫 이야길까요?
이제 backup은 잊어버려도 된다는 거죠
재미있는 코딩하기에도 모자란 인생이니까요.
고맙습니다.
제임스 드림
# by | 2006/05/29 00:20 | 메인스토리 | 트랙백 | 덧글(4)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
한달에 반나절 정도인데도 결국은 귀찮아 지더군요.
참, 그리고 이 블로그의 분위기를 보니 "james on software" 분위기네요?
한국의 조엘 블로그가 되시길...
'고양이가 내 소스를 삼켰어요' 라는 부분이 생각나네요..
소스날리고 관리자에게 고양이 삼켰다고 그러면 어쩌겠어요...^^