rsync 는 다들 알고 있을거라 생각하고...
너무 귀차니즘이 있다. (find 로 modify time 찾아내서 그파일들만 tar로 묶는등)
백업이 정상적으로 갖추어 진다고 볼 수 있어 귀찮음이 있다.
요즘은 그래서 rsnapshot 과 rdiff-backup 을 많이 이용하고, 추천한다.
1. Rsnapshot ( http://www.rsnapshot.org )
뭐 snapshot 이라곤 하지만 이미지를 찍어서 스냅샷 뜨는것과는 조금 다르게,
단순히 rsync 를 이용한 스크립트들의 라이브러리모음이라고 보면 된다.
rsync 를 통한 각종 옵션들을 /etc/rsnapshot.conf 에 셋트해 놓고,
단순한 명령으로 백업(snapshot) 을 수행하는 기능을 담당하는 단순한 구조이다.
config 파일에 rsnapshot_root 항목으로 스냅샷이 저장될 위치를 정해 놓으면
그 아래에 Logrotate 형식으로 서브디렉토리를 생성하여 로테이션 백업을 한다.
즐거운점은 처음 실행시에는 물론 Hardlink 로 풀백업을 실행하지만,
그 다음 주기에서부터는 기존 스냅샷디렉토리와 비교하여 변경된 점만
백업한다는 점이고, hourly, daily, weekly, monthly 등의 검색 & 백업주기를
config 파일에 등록해 놓으면 크론탭으로 단순히 스케쥴을 맞춰만 놓으면
알아서 설정파일의 주기대로만 백업한다는 점이다. +.,+
원래 소개만하고 사용예는 안가르쳐주려고 했으나, 남들과 같이 쪼잔해지면
의미가 없기에 살짝 예를 뿌리겠다 ( 어차피 맨페이지에 있다 쿨럭 )
mirr@Mirr ~] sudo rsnapshot -v hourly
echo 5482 > /var/run/rsnapshot.pid
mkdir -m 0700 -p /data/.snapshots/
mkdir -m 0755 -p /data/.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home \
/data/.snapshots/hourly.0/localhost/
rsync: readlink_stat("/home/mirr/.gvfs") failed: Permission denied (13)
IO error encountered -- skipping file deletion
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1042) [sender=3.0.7]
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \
/data/.snapshots/hourly.0/localhost/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local /data/.snapshots/hourly.0/localhost/
touch /data/.snapshots/hourly.0/
rm -f /var/run/rsnapshot.pid
[mirr@Mirr ~]
봤나? 저렇게 실행된다. -v 로 상세보기를 해서 보면 결국 rsync 옵션이고,
이것역시 rsnapshot.conf 에 쉽게 정의하여 사용 할 수 있다.
또한 hourly.0 hourly.1 식으로 로그로테이트와 유사한 형식으로 관리되는점도
매우 재미있고, rsnapshot du 라는 명령으로 스냅샷부분의 용량만도 따로
확인이 가능하다. +.,+
백업할 Location 도 여러가지 종류로 지정 할 수 있으며 재밌는건 잘 이용하면
rsync 외의 scp 나 cp 혹은 그 외 써드파티 백업스크립트도 postscript 혹은
exescript 식으로 사용이 가능 할것 같다는 점...
또한 lvm 관련 명령어 셋들도 제공한다.
즉 lvm volume 이나 vg device 수준역시 백업관리가 가능하다는 것!.
아무튼 rsnapshot.conf 의 설정파일은 단순 정의수준이라 직관적으로 쉽다.
rsnapshot-diff 로 각 스냅샷디렉토리들도 비교 가능하고,
복구는 sync 로 하면 또 쉽게 되는데, man 페이지를 반드시 살펴보기 바란다.
2. rdiff-backup (
http://www.nongnu.org/rdiff-backup/index.html )
이녀석도 무지무지하게 많이 쓰는 녀석들이다 요즘(?).
이녀석은 내가 매우 좋아하는 Python 으로 되어있다. (요즘 C보다 더 좋다 흑..)
rsync 를 편하게 만들어놓은 python 으로 된 프론트엔드라고 하는게 맞을려나?
어쨋든 rsync 를 이용한 단순 백업의 경우 오래전 파일들을 원하는 시간대로
되돌리거나, 차례로 복구해보는, 오래된 백업들의 저장주기또한 생각보다
귀찮고 - 스크립트를 만들어야하므로 - 실수를 할 가능성도 많기 때문에,
rdiff-backup 을 이용하면 훨씬 간단하게 백업, 복구 할 수 있을 것이다.
이거에 대한 설명은 구지 할 필요는 없을것 같다 (사실 난 rsnapshot 이 좋다. )
호불호가 너무 갈리는 성격인건가? ㅎㅎ
고객이 자동화된 백업스크립트를 요구한다고 해서 백업스크립트를 다 그대로
작성해 주는것은 유지보수측면에서 별로 권장하고 싶지 않은 대응으로 본다.
고객이 그 스크립트를 이용했을때 생기는 문제는 어찌 책임 질 것이며,
추후로 수정하고자 할때 매번 요구대로 들어줄 것인가?
게다가 이런건 사실 들춰내면 쓰라린 부분이겠지만, 엔지니어들중 자신의
스크립트를 마음대로 공개하고 싶은 사람들이 과연 몇이나 될까?
내가 봐온 엔지니어들 대부분은 자신이 스크립트를 만들어 줄때도 완벽하거나
깔끔하다고 자신하지 않으며, 오히려 살짝 부끄러워하며 유지보수를 꺼려했다.
그럴바엔 미리 정의되어 있는 rsnapshot 이나 rdiff-backup 등을 이용하는게
표준화된 방법을 고객에게 제공 하는 올바른 대응이라고 생각하는것이다..
표준화된 방법과 올바른 방법을 항상 찾아 제공하는게 오픈소스 엔지니어의
자세라고 생각한다.