메뉴 건너뛰기

2016.09.12 09:33

백업받기

조회 수 8010 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
cd /backup
tar cvpfz /backup/home.tar.gz /home --exclude=/home/test

일반적으로 tar 로 백업시 사용되는 확장자 규칙은 압축되지 않고 단순히 하나의 파일로 패킹(packing) 한 파일의 경우에는 "tar" 를, gzip 으로 압축된 파일의 경우에는 "tar.gz" 나 "tgz" 를 확장자로 한다. 따라서 확장자가 home.tar.gz나 home.tgz일 경우 tar로 packing 된 후 gzip으로 압축되었음을 뜻한다.

백업시 ``z'' (압축) 옵션의 사용에 유의하여야 한다. 단순히 하나의 파일로 압축 백업시에는 때에 따라 데이터의 일부가 손상되는 경우가 있는데, 이때에는 백업된 파일 전체가 깨어져 복구를 할 수 없게 되는 경우가 있다. 백업 시 압축을 하지 않고 단순히 tar 로 묶은 경우에는 설사 압축파일이 깨어졌다 하더라도 압축 파일의 복구가 가능하기 때문에 백업 시 압축을 할 것인지 여부를 신중히 선택하여야 한다.
아울러 현재까지 안정 KERNEL인 Kernel 2.2의 경우 하나의 파일은 최대 2G 가 최대 사이즈인데, 특정 파티션 이하에 많은 파일이 있어 하나의 파일로 백업할 경우 2G를 넘을 경우에는 적당히 분산하여 백업을 하여야 한다.
이때에는 아래와 같은 방법이 가능할 것이다.

tar cvfpz home_a_h.tar.gz /home/[a-h]*
tar cvfpz home_i_p.tar.gz /home/[i-p]*
tar cvfpz home_q_z.tar.gz /home/[q-z]*



>> 실제 백업 스크립트 예.

#!/bin/sh .................. (1)

cd /backup .................. (2)
rm -f *.tar.gz ................... (3)
tar cvfpz apache.tar.gz /usr/local/apache/* ........ (4)
tar cvfpz home.tar.gz /home/* --exclude=/home/test ........ (5)
tar cvfpz etc.tar.gz /etc/* ........... (6)
tar cvfpz mail.tar.gz /var/spool/mail/* ........... (7) ,
chown backup.backup *.tar.gz .............. (8)
chmod 700 *.tar.gz .............. (9)
ls -alh | mail -s "백업정보" backup@tt.co.kr ........ (10)
df --sync -h | mail -s "파티션정보" backup@tt.co.kr .......... (11)


(1) 시작되는 내용이 Shell Script 임을 정의한다.
(2) 백업작업이 이루어지는 파티션인 /backup 으로 이동한다.
(3) 기존의 백업된 파일을 모두 삭제한다.
(4) - (7) 번까지는 백업을 해야 할 디렉토리 이하에 대해 데이터를 각각 백업한다.
(8) 백업된 파일의 소유권을 backup 으로 설정한다.
(9) 백업된 파일의 권한을 700 으로 설정한다.
(10) 백업이 제대로 되었는지 확인하기 위해 현재의 디렉토리내 백업 파일의 리스트를 백업 담당자인 backup@tt.co.kr 에게 메일로 발송한다.
(11) 혹 파티션이 찰 수도 있으니 현재의 파티션 사용 정보를 백업담당자에게 메일로 발송 한다.



>> 증가분 백업하기.

#!/bin/sh ...........(1)

TODAY=`date +"%d %b %Y"` ........... (2)
PREVIOUSDAY=`cat FULL_BACKED_DAY` ............ (3)
tar cvfpzG _modified_home.tgz -N "$PREVIOUSDAY" /home ..........(4)

/home 에 대해 Full Backup을 실행하기로 한다.(이때 Full 백업 스크립트 제일 하단에
echo `date +"%d %b %Y"` > FULL_BACKED_DAY 를 추가한다)

이후 매일 위의 스크립트를 실행하면 풀백업 이후 추가 및 변경된 파일 및 디렉토리만 선별하여 별도로 백업을 하게 되는 것이다.
(1) 실행되는 스크립트가 Shell 스크립트임을 정의한다.
(2) 현재의 시각을 -N 옵션이 이해할 수 있는 13 Jan 2001 형태로 TODAY 라는 변수에
대입한다.
(3) 이전에 Full 백업시의 시각인 FULL_BACKED_DAY를 읽어 PREVIOUSDAY 라는 변수에 대입한다.
(4) /home 디렉토리 이하에 대해 Full 백업시의 시각 이후로 변경, 추가된 파일에 대해서만 modified_home.tgz 라는 파일로 저장한다.



# 참고

cron 이용하기.

cron 은 일종의 일정관리 데몬으로서 기본 설정파일인 crontab 에 따라 정해진 시각에 따라 주기적으로 명령을 수행한다. crontab 는 7개의 구성요소로 이루어지는데, 6번째 필드(User)는 생략되어도 무방하다.

분 / 시 / 날짜 / 달 / 요일 / 사용자 / 명령어

각 항목은 정수로 나타낼 수도 있고 또한 몇 개의 항목은 와일드카드 문자로 인식되는 ``*'' 문자로 표현이 가능한데, * 는 "매"의 의미이다. 즉 시간 항목에 * 이 있다면 매시간이라는 뜻이고 날짜 항목에 * 이 있으면 매일이라는 뜻이 되는 것이다. 그리고 하나의 필드에 중복된 시간을 나타내고자 하면 콤마로 구분하면 되고, 연속된 시간을 나타내고자 하면 하이픈(-)을 이용하여 일정기간을 나타낼 수 있다.
참고로 분은 0-59, 시는 0-23, 날짜는 0-31, 달은 0-12(0또는 12는 12월, 1은 1월...), 요일은 0-7(0과 7은 일요일, 1은 월요일)로 나타낸다.

/etc/crontab 파일예
01 * * * * root run-parts /etc/cron.hourly
02 2 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0 0 * * 1 root rdate -s time.bora.net && clock -w

위 그림에서 각각의 의미를 알아보도록 하자.
첫줄은 매시 1분에 /etc/cron.hourly 디렉토리내의 스크립트를 실행한다는 의미이고,
두번째줄은 매일 02시 2분에 /etc/cron.daily 내의 스크립트를 실행한다는 의미이고,
세번째줄은 매월, 매일 새벽 4시 22분에 /etc/cron.weekly 디렉토리내 스크립트를 실행하는 것처럼 보이지만 5번째 필드인 <요일> 필드값이 0 이므로 1주일에 1회 일요일(0이므로) 에 /etc/cron.weekly 디렉토리내의 스크립트를 실행하라는 것이다.
다섯번째줄과 같이 매일,매주 0시0분, 매주 월요일(1) 에 rdate -s time.bora.net && clock -w 라는 명령어를 실행하라고 직접 명령어를 지정해 줄 수도 있다.
각 디렉토리 내 실행 스크립트는 정기적으로 시스템에 의해 실행이 되어야 하므로 실행(eXecute) 권한이 있어야 함은 당연하다. 따라서 위에서 작성한 스크립트를 700 정도의 적당한 실행권한을 부여하여 해당 디렉토리에 설정해 주면 될 것이다.
또는 직접 /etc/crontab를 편집하여 실행시간을 정의할 수도 있다.

DB 등 중요 데이터 매일 백업하기.
--> /etc/cron.daily/db_bak.sh
#!/bin/sh
dat=`date +%Y%m%d%H%M`
tar cvfpz /backup/db/mysql_$dat.tgz /usr/local/mysql/var/*
chmod 700 /backup/db/*

--> /etc/cron.3days/db_del.sh
#!/bin/sh
find /backup/db/ -mtime +3 -exec rm -f {} \;

/backup/db 에는 3일치 데이터가 늘 저장됨.

List of Articles
번호 제목 날짜 조회 수
217 Apache 동시접속자수 확인 2019.02.14 1929
216 이미지 및 파일 무단링크 방지책 2019.02.14 1137
215 apache2 트래픽 모듈 mod_cband 사용법 2019.02.14 1129
214 메인 도메인으로 이동하기 2018.09.28 2108
213 사용자 관리, 사용자 생성 file 2018.09.21 1988
212 [CentOS 7] SSH 무작위 로그인 시도 막기 ( Fail2Ban ) 2018.03.28 69679
211 rdate명령어 사용법과 옵션 file 2017.11.22 6300
210 user 계정관리 (useradd, userdel, groupadd, groupdel, usermod etc..) file 2017.11.22 5312
209 php_fpm 관련 자료 2017.09.20 5318
208 웹서버(Nginx+FastCGI PHP)구축 및 성능 시험 2017.09.20 5530
207 bitnami Redmine stack 업그레이드기 (1.2.x -> 2.0.x) 2017.07.05 6835
206 하루동안 실행된 쿼리 중 수행시간이 가장 긴 조회 쿼리 100개 2017.04.28 8042
205 리눅스서버 모니터링 rstatd 설치 2017.04.28 27358
204 웹로직 서버 시작 및 종료 스크립트 2017.04.28 8465
203 & 실행과 nohup 실행 2017.04.18 7839
202 포그라운드, 백그라운드, nohup 정리 2017.04.18 9043
201 웹로직 + 아파치 연동 2017.04.13 8685
200 솔라리스 - 간단 vi 명령어 2017.04.12 7904
199 MySQL Linux Port 방화벽 설정(3306) file 2017.03.11 9468
198 DHCP IP 자동 할당 2017.03.11 7964
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 12 Next
/ 12

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved