작성자 : mapoo
* rsnapshot을 잘 못 조작하여 생긴 데이터 유실에 대한 책임은 제게 없습니다.
* rsnapshot을 충분히 숙지 후 사용하시기 바랍니다.
## 원리 :
rsnapshot은 perl 스트립트로 만들었으며, rsync와 기타 명령어, hardlink를 조합하여 만든 오픈소스 증분백업 프로그램이다.
rsnapshot 최초실행시 rsync로 원본볼륨을 그대로 싱크하고, 다음번 부터는 4시간 마다 hardlink를 이용해 그대로 복사 후 업데이트된 데이터만 add와 delete을 한다. 최대 4주분을 쌓되, 로테이션에 의해 가장 오래된 것부터 지우며 4주치를 넘지 않게 한다.
/etc/rsnapshot.conf 을 수정하고 crontab 스케쥴링을 첨부하면 최대 3달분도 가능하다.
## 볼륨 크기 :
백업볼륨의 크기는 4주동안 변화되는 양을 감안해서 원본의 10~20% 정도 많이 잡으면 된다.
아래 테스트서버 파티션처럼 백업볼륨을 처음부터 크게 잡던가, 아니면 원본과 백업을 같은 사이즈로 하고
몇달간 운영 후 한달 평균 데이터 변화량을 보고 원본쪽을 쿼터등을 이용해 그 양만큼 줄인 값으로 잡아둔다.
## 테스트서버 파티션 정보 :
[root@Sample-local ~]# df -kh
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 756M 121M 598M 17% /
/dev/hda1 99M 12M 83M 12% /boot
none 506M 0 506M 0% /dev/shm
/dev/hda7 122M 13M 103M 11% /tmp
/dev/hda5 2.0G 1.5G 441M 77% /usr
/dev/hda6 494M 143M 326M 31% /var
/dev/hda8 143G 2.7G 140G 2% /data0
/dev/sde1 3.6T 1.5T 2.2T 40% /home
/dev/mapper/lvm_1-data1
4.5T 1.5T 3.1T 33% /data1
원본 : /home - 3.6TB
백업본 : /data1 - 4.5TB
## 설치 :
아래 사이트에서 rpm 다운로드
http://rsnapshot.org/
Redhat 모든 버젼에서 설치 가능.
## rsnapshot 설정 파일 수정 - /etc/rsnapshot.conf :
snapshot_root /data1/Backup/.snapshots/
backup /home/Sample/ localhost/
#backup /etc/ localhost/
#backup /usr/local/ localhost/
## crontab 추가
0 */4 * * * mv /data1/Backup/\!현재백업대기중임 /data1/Backup/BackupLink/\!현재백업진행중임 ; touch /data1/Backup/BackupLink/\!현재백업진행중임 ; touch /data1/Backup/BackupLink/Backup-\(00최신00\) ; /usr/bin/rsnapshot hourly ; mv /data1/Backup/BackupLink/\!현재백업진행중임 /data1/Backup/\!현재백업대기중임
50 23 * * * /usr/bin/rsnapshot daily
40 23 * * 6 /usr/bin/rsnapshot weekly
## 싱볼릭 링크 생성 :
백업볼륨을 samba에서 한꺼번에 접근 가능하도록 링크를 걸고 symlink 파일의 소유권한 변경.
mkdir -p /data1/Backup/BackupLink
cd /data1/Backup/BackupLink
ln -s /data1/Backup/.snapshots/hourly.0/localhost/home/Sample ./Backup-\(00최신00\)
ln -s /data1/Backup/.snapshots/hourly.1/localhost/home/Sample ./Backup-\(04시간전\)
ln -s /data1/Backup/.snapshots/hourly.2/localhost/home/Sample ./Backup-\(08시간전\)
ln -s /data1/Backup/.snapshots/hourly.3/localhost/home/Sample ./Backup-\(12시간전\)
ln -s /data1/Backup/.snapshots/hourly.4/localhost/home/Sample ./Backup-\(16시간전\)
ln -s /data1/Backup/.snapshots/hourly.5/localhost/home/Sample ./Backup-\(20시간전\)
ln -s /data1/Backup/.snapshots/daily.0/localhost/home/Sample ./Backup-[1일전]
ln -s /data1/Backup/.snapshots/daily.1/localhost/home/Sample ./Backup-[2일전]
ln -s /data1/Backup/.snapshots/daily.2/localhost/home/Sample ./Backup-[3일전]
ln -s /data1/Backup/.snapshots/daily.3/localhost/home/Sample ./Backup-[4일전]
ln -s /data1/Backup/.snapshots/daily.4/localhost/home/Sample ./Backup-[5일전]
ln -s /data1/Backup/.snapshots/daily.5/localhost/home/Sample ./Backup-[6일전]
ln -s /data1/Backup/.snapshots/daily.6/localhost/home/Sample ./Backup-[7일전]
ln -s /data1/Backup/.snapshots/weekly.0/localhost/home/Sample ./Backup-{1주전}
ln -s /data1/Backup/.snapshots/weekly.1/localhost/home/Sample ./Backup-{2주전}
ln -s /data1/Backup/.snapshots/weekly.2/localhost/home/Sample ./Backup-{3주전}
ln -s /data1/Backup/.snapshots/weekly.3/localhost/home/Sample ./Backup-{4주전}
chown -h Sample.Sample *
* 링크가 깨져 보일 것이다. 아직 rsnapshot이 한번도 실행되지 않아서 원본 디렉토리가 안 만들어져서 임.
원본 볼륨에 데이터가 많은 상태에서 처음 rsnapshot 실행 시 시간이 많이 소요 됨.
## 백업알림 디렉토리, 파일 생성
* 백업 진행중임을 알리기 위한 디렉토리와 파일을 만든다. crontab에서 이 디렉토리 이동을 하면서 표시
mkdir /data1/Backup/!현재백업대기중임
touch /data1/Backup/!현재백업대기중임/백업중-00최신00은백업완료후접근
chown -R Sample.Sample /data1/Backup/!현재백업대기중임
chmod 770 /data1/Backup/!현재백업대기중임 ; chmod 660 /data1/Backup/!현재백업대기중임/*
## netatalk 설정 :
[root@Sample-local ~]# cat /usr/local/netatalk-205/etc/netatalk/AppleVolumes.backup
:DEFAULT: allow:Sample
:DEFAULT: maccharset:MAC_KOREAN
:DEFAULT: volcharset:MAC_KOREAN
:DEFAULT: fperm:0660 dperm:0770
/data1/Backup/BackupLink/!현재백업진행중임 "!현재백업진행중임" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/hourly.0/localhost/home/Sample "Backup-(00최신00)" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/hourly.1/localhost/home/Sample "Backup-(04시간전)" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/hourly.2/localhost/home/Sample "Backup-(08시간전)" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/hourly.3/localhost/home/Sample "Backup-(12시간전)" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/hourly.4/localhost/home/Sample "Backup-(16시간전)" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/hourly.5/localhost/home/Sample "Backup-(20시간전)" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/daily.0/localhost/home/Sample "Backup-[1일전]" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/daily.1/localhost/home/Sample "Backup-[2일전]" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/daily.2/localhost/home/Sample "Backup-[3일전]" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/daily.3/localhost/home/Sample "Backup-[4일전]" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/daily.4/localhost/home/Sample "Backup-[5일전]" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/daily.5/localhost/home/Sample "Backup-[6일전]" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/daily.6/localhost/home/Sample "Backup-[7일전]" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/weekly.0/localhost/home/Sample "Backup-{1주전}" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/weekly.1/localhost/home/Sample "Backup-{2주전}" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/weekly.2/localhost/home/Sample "Backup-{3주전}" allow:Sample : rolist:Sample
/data1/Backup/.snapshots/weekly.3/localhost/home/Sample "Backup-{4주전}" allow:Sample : rolist:Sample
## samba 설정 :
[Sample-Backup]
comment = Backup
path = /data1/Backup/BackupLink
force user = Sample
force group = Sample
Read only = yes
browseable = yes
guest ok = yes
create mask = 0660
directory mask = 0770
writable = no
## 백업볼륨 디렉토리 파일리스트 비교 :
1) 업데이트된 파일리스트 보기 :
rsnapshot-diff -v /data1/Backup/BackupLink/Backup-0_최신_0/ /data1/Backup/BackupLink/Backup-16시간전/
2) 별도 파일로 저장 :
rsnapshot-diff -v /data1/Backup/BackupLink/Backup-0_최신_0/ /data1/Backup/BackupLink/Backup-16시간전/ >
/data1/Backup/BackupLink/FileList.txt
3) 추가된 파일리스트만 뽑아서 보기 :
sed '/-\ Backup/d; /were\ removed,\ saving/d; s/+\ Backup-0_최신_0\///g' /data1/Backup/BackupLink/FileList.txt
4) 추가된 파일리스트만 뽑아서 별도파일로 저장 :
sed '/-\ Backup/d; /were\ removed,\ saving/d; s/+\ Backup-0_최신_0\///g' /data1/Backup/BackupLink/FileList.txt > /data1/Backup/BackupLink/AddFileList.txt
## 백업볼륨 디렉토리 전체크기 확인 :
Full path로 적용이 안됨. 따라서 해당 디렉토리에서 직접 명령어를 쳐야 함.
[root@Sample ~]# cd /data1/Backup/.snapshots/hourly.0
[root@Sample hourly.0]# rsnapshot du
## 증분백업 안내문 PDF 파일(엔드유저용) :
/data1/Backup/BackupLink/ 디렉토리에 '!증분백업 안내문.pdf' 이라는 이름으로 파일을 넣어둔다.
6695707731.pdf