2006년 4월 1일 토요일

리눅스 자동 백업 스크립트

fsck 를 잘 못 쓰는 바람에 연구실 서버를 완전히 날려먹었다.
그안에 포함되어 있던 선배들 자료와 수천만원짜리 소스도 날렸다.
내 인생의 최대의 실수다. fsck 를 잘못 쓴거보다는..
백업을 안했다는게 너무 괴롭다.
소잃고 외양간 고친다고... 백업 스크립트라도 하나 만들어서
다시는 그런 실수를 하지 않도록 해야겠다.
-----------------------------------------------------------------------------------
백업이라는것이 모든 관리자들이 해야 하지만 그렇게 안되는게 사실 귀찮아서 이다.

귀찮아서 백업을 않하는것이다.

그러다 이지경까지 왔지만...

백업을 받는 컴퓨터는 따로 둔다.
왜냐면 하나를 날려먹어도 하나는 살려둬야 하잖아.
그리고 서버 사용시간대를 피한 아침 6시

기본 발상은 이렇다.
일단 crond 데몬으로 아침 6마다 백업 스크립트를 실행하는데
그 백업 스크립트는 특정 디렉토리를 tar.gz 로 압축하고
그걸 백업 서버의 ftp 로 접속해서 저장한다.
이정도만 되더라도 사용자들의 데이터는 안전하게 유지할수 있는것이다.

그럼 먼저 crond 을 보도록 하자
crond 는 특정 시간이나 날짜(좀 복잡하게도 가능)에 정해진 일을 수행하는 데몬이다.
자세한거는 직접들 찾아보시고

# crontab -e 0 6 * * * /bin/backup.sh

이렇게 명령을 주게되면 crond 에 매일 아침 6시에 /bin/backup.sh 를 실행하라는
것을 의미한다. 자세한 의미는 굳이 설명하지 않겠다.
이러면 crond 는 매일 아침 6정각에 /bin/backup.sh 를 실행한다.

다음은 backup.sh 의 내용이다.

#!/bin/bash
dstring="backup_`date +'%y%m%d'`.tar.gz"  # 파일명을 만들어낸다.
                                                             # 04년06월21일같은경우에
                                                             # backup_040621.tar.gz 를 만든다.
wall < /bin/start_backup_message             # 접속되어있는 모든 사용자에게
                                                             # 백업이 시작됨을 알리고
/etc/init.d/network stop                            # 네트워크 서비스를 중지시킨다.
tar cfz $dstring "/home"                        # home 디렉토리를 파일명으로 압축한다.
/etc/init.d/ network start                           # 네트워크 서비스 재개

Server="Backup Server Address"   # 서버IP
Password="PASSWORD"              # backup 받는 유저의 패스워드
UsrID="USERID"                           # ID

ftp -n $Server <<End-Of-Session  # ftp 에 접속 -n 옵션은 자동로그인을 안한다.
user $UsrID $Password                # 로그인
binary
put "$dstring"
bye
End-Of-Session

rm -f $dstring                               # 백업파일 삭제

wall < /bin/end_backup_message  # 백업이 끝났음을 알린다

네트워크 서비스를 중지시키는 이유는 간단하다.
백업이 진행될동안 서버에 파일을 올리지 않게 하기 위해서이다.
백업도중에 데이터의 용량이 커져버리면 왠지 모르게 문제가 생길것 같다.

이렇게 해서 테스트 해본결과 backup 서버의 특정 계정에
백업된 데이터가 들어왔다.

다른사람들도 꼭 한번 해보길 바란다... 나처럼 데이터 날려먹고 울지말고..

댓글 없음:

댓글 쓰기