이 방법에서는 rsync를 사용하는데, 바로 직전에 백업된 데이터와 비교해서 변하지 않은 파일들은 직전 백업된 파일과 하드링크로 연결하고, 변경된 파일만 새로 백업하는 방식을 사용한다. 따라서 incremental backup을 구현할 수 있고, 또 이전에 백업된 디렉토리를 삭제해도 하드링크 카운트를 파일시스템에서 관리하기 때문에 최근에 백업된 데이터에 영향을 주지 않는다. (프로그래밍의 레퍼런스 카운터와 같은 개념)
그리고 참고 사이트의 아이디어를 약간 변형해서 계속 데이터가 쌓이지 않고, 최근 일주일간의 데이터만 유지되도록 했다. 단, 이 방법에서는 컴퓨터 사용 빈도에 따라서 백업 디렉토리의 순서가 일관적이지 않을 수 있으니 자세한 내용은 스크립트의 주석을 참조한다.
1. 백업 스크립트 (/usr/local/bin/timemachine_backup.sh)
#!/bin/sh
# 이미 실행중인 프로세스가 있으면 그대로 종료
ps -ef | grep -v "grep" | grep "timemachine_backup.sh" > /dev/null
if [ $? = 0 ]; then
exit 0
fi
# "요일(0~6)-시간(0~23)"으로 디렉토리를 만들어서 일주일치 데이터를 보관한다.
# 단, 이 방법의 단점은 컴퓨터를 켜놓는 시간에 따라서 백업 디렉토리의 순서가
# 달라질 수 있다는 점이다. 예를 들어서 한 주 동안 매일 컴퓨터를 켜서 백업이
# 이상적으로 이루어진 후, 그 다음 주에는 수요일에만 컴퓨터를 켰다면 월요일,
# 화요일에 백업된 데이터는 이번 주가 아닌 일주일 전 데이터를 가지고 있는 것이다.
# 따라서 복구를 할 때는 백업 디렉토리를 날짜별로 정렬해서 원하는 복구 지점을
# 선택해야 한다. (백업디렉토리/BACKUP_TIMESTAMP_FILE의 생성 시간 참조)
date=`date "+%u-%H"`
BACKUP_BASE_DIR=/backup
# 일주일전 데이터 제거
rm -rf $BACKUP_BASE_DIR/$date
# 비정상 종료된 임시 디렉토리 제거
rm -rf $BACKUP_BASE_DIR/*.tmp
# 임시 디렉토리로 백업
rsync -aP \
--exclude-from=/usr/local/bin/timemachine_backup_excluded.list \
--link-dest=$BACKUP_BASE_DIR/current \
/ \
$BACKUP_BASE_DIR/$date.tmp
# 임시 디렉토리 제거
mv $BACKUP_BASE_DIR/$date.tmp $BACKUP_BASE_DIR/$date
# current를 방금 백업한 디렉토리로 재설정
rm -f $BACKUP_BASE_DIR/current
ln -s $BACKUP_BASE_DIR/$date $BACKUP_BASE_DIR/current
touch $BACKUP_BASE_DIR/$date/BACKUP_TIMESTAMP_FILE
2. 백업 배제 파일 리스트 (/usr/local/bin/timemachine_backup_excluded.list)
/dev
/backup
/proc
/cdrom
/lost+found
/media
/mnt
/home/superkkt/.VirtualBox
/home/superkkt/vmware
/home/superkkt/.gvfs
/sys
3. crontab에 매 시간 실행되도록 등록
$ sudo vi /etc/crontab
..중략..
1 * * * * root /usr/local/bin/timemachine_backup.sh
<References>

comments
comments rss (+댓글 쓰러가기)