Unix

rdiff-backup 예제 스크립트

ForceCore 2016. 9. 30. 06:52

예전에 ( http://forcecore.tistory.com/1127 아~~ 주 오래전에) rdiff-backup에 대해 소개한 적은 있지만 예제가 없어서 무용지물에 가까울 것이다. 스크립트를 제시하고 실전 예제를 보여주겠다?


스크립트


/root/script/cron/backup.sh :

#!/bin/bash


# have archived backup... :S

function backup

{

src=$1

dest=$2

RDIFF_BACKUP='/usr/bin/rdiff-backup'

$RDIFF_BACKUP \

--exclude $src/.snapshots \

$src $dest

$RDIFF_BACKUP \

--remove-older-than 2W \

--force $dest 2>&1

}


echo "Starting backup"

date


backup /etc     /export/backup/etc

backup /root    /export/backup/root

backup /home    /export/backup/home


echo "Done backup"

date

요렇다.


/etc, /root, /home 정도는 백업을 해주는게 좋다, 전체 시스템을 백업하진 않아도.


/etc : 제어판 설정을 복사해두는 느낌으로 백업해둔다. 그러면 시스템을 새로 설치 해도, 에전에 썼던 좋은 세팅을 가져다 쓰기 좋다.


/root : 관리자 성형마다 다르겠지만, 시스템에 설치한 커스텀 패키지나, crontab 에 관리자 권한으로 실행하는 스크립트들을 나는 여기에 두는 편이다.

(위의 rdiff backup 스크립트만 해도 /root/script/cron/backup.sh 로 저장해두고, sudo crontab -e 로 root의 crontab에 작업을 걸어두는 편이다.)


/home : 당연히 백업해야 하는데... 필자는 snapper를 쓰기 때문에 (http://forcecore.tistory.com/1323) /home/.snapshots 디렉토리가 생긴다는 것이다. rdiff-backup이 스냅샷까지 복사하려고 들기 때문에 (그러면 실제 하드 용량의 10배? 100배?는 먹게 된다) 문제가 발생하는데 이를 위의 --exclude $src/.snapshots parameter 등록으로 막아준다.


위 스크립트는 한 컴퓨터 안에서 다른 디스크로 백업을 시키는 것이다. 물론 디렉토리 대신에 다른 서버의 디렉토리를 입력해주면 다른 서버로 백업이 이루어지게 될 것이다. 이렇게 한 경우 타 서버에 ssh로 자동로그인을 할 수 있어야 한다. ssh-copy-id 명령어를 쓰면 매우 간단히 할 수 있다:

http://marobiana.tistory.com/53


아래에 --remove-older-than 2W는 보면 감이 오겠지만, 2주 이상 된 내역은 없앤단 말이다.


스크립트 실행되게 하기


root로서 (sudo crontab -e 를 써도 된다)

# crontab -e 

로 크론으로 작업을 걸자. 물론 /etc/cron.daily 에다가 걸어도 되는데 취향대로...


0 4 * * * /root/script/cron/backup.sh

새벽 4시에 실행되게 했다. 아무리 밤샘 작업을 하는 중이라도 보통은, 보통은... 4시 전에는 피곤해서 잘 것이다 -_-;; 그래서 새벽 4시로 시간을 정했다.



주의사항

스크립트를 만들고 나서 한 번은 수동으로 스크립트를 실행해서 문제가 있나 없나 체크하는게 좋다.

그리고 또 일주일 뒤 쯤에 백업이 성공적으로 되었는지 백업이 있는 곳에 들어가서 체크해보자. 그 어떠한 백업 프로그램을 써도 이 것은 적용된다.

그리고 가끔 생각날 때 백업이 되고 있나 체크해보자. 가끔씩 별 이유 없이 백업이 안 되는 경우가 있다 으아아아아 (그래서 백업이 필요한 때 없더라)



살리기

서버를 운영하다보면 꼭, 사용자들이 "나 파일 날려먹었어요, 어젠 있었는데" 라고 찾아온다. 그럴 땐 우쭐대면서 파일을 살려주자.


1. 스크립트가 실행된 후 24시간 내에 있었던 변화는 그냥 백업 폴더에 파일로서 있다. cp로 복사하면 그만이다.

2. rdiff-backup -r 3D /export/backup/home/[살려내고싶은파일/디렉토리] [살려낸것의 새 이름]

이런 식으로 살리게 된다. 실전에서 해봤더니 잘 된다. (후 이것도 실전으로 해봤다니)