압축 그리고 백업( Backup) 정보
Linux 압축 그리고 백업( Backup)본문
압축 그리고 백업( Backup)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
11.1 압축
11.1.1 압축파일 만들기
통신상에서 빠른 전송속도를 위해서 압축된 파일을 전송한다. 리눅스에서도 역시 네트워크에서 압축 파일들을 사용한다.
주로 gnu zip format을 많이 사용한다.
[root @edu00 linux]#cat > file1
linux hi
i love linux
^D
[root @edu00 linux]#ls -l
[root @edu00 linux]#gzip file1
[root @edu00 linux]#ls -l
-rw-r--r-- 1 root root 41 May 17 02:03 file1.gz
[root @edu00 linux]#gzip -l file1.gz
[root @edu00 linux]#gunzip file1.gz
[root @edu00 linux]#gzip file1
[root @edu00 linux]#mv file1.gz file_new.gz
[root @edu00 linux]#gunzip file_new.gz
[root @edu00 linux]#ls
[root @edu00 linux]#gzip file_new
[root @edu00 linux]#mv file_new.gz file_mv.gz
[root @edu00 linux]#gunzip -N file_mv.gz
: 원래의 파일명으로 압축을 푼다.
[root @edu00 linux]#ls
[root @edu00 linux]#gzip file_new
[root @edu00 linux]#gunzip -c file_new.gz
: 압축을 풀지 않고 파일의 내용을 본다. zcat과 동일하다.
11.1.2 archive 파일 만들기
archive 파일은 여러 파일을 하나의 파일로 묶은 파일이다. tar가 있다.
[root @edu00 linux]#tar czf public.tar.gz public_html
[root @edu00 linux]#tar tzf public.tar.gz public_html
[root @edu00 linux]#tar zvf public.tar.gz public_html
[root @edu00 linux]#tarx public.tar.gz
: tar 압축파일을 tarx로 한번에 해제
11.1.3 형태별 압축 해제
tar xf *.tar
tar xzf *.tar.gz
tar xIf *.tar.bz2
11.1.4 tarx로 한번에 압축 해제(bash용)
[root @edu00 linux]#vi tarx.sh
-----------------------------------
=============== Start ==============
__tar()
{
if [ `basename $2 .tar` != $2 ]; then
COMPRESS=
elif [ `basename $2 .tgz` != $2 -o `basename $2 .tar.gz` != $2 ]; then
COMPRESS=z
elif [ `basename $2 .tbz2` != $2 -o `basename $2 .tar.bz2` != $2 ]; then
COMPRESS=I
else
echo "Wrong filename"
return
fi
OPT="$1$COMPRESS"vvf
TARFILE=$2
shift 2
tar $OPT "$TARFILE" "$@"
}
alias tarc='__tar c'
alias tart='__tar t'
alias tarx='__tar x'
---------------------------------------
11.2 백업
데이터나 정보가 지닌 가치를 보존하는 것이 백업이다.
백업은 시스템 관리자의 중요한 책임중 하나로 시스템에 저장된 데이터를 안전하게
보존하는 것이다.
데이터는 여러 이유로 인해 삭제 또는 변경될 수 있으며 이런 손실의 기회를 최소화하려면 항상 주의를 기울이고 백업 매체 및 대상, 방법에 주의를 기울여야 한다.
데이터 손실을 가져오는 주요 원인은 다음과 같다.
1) 하드웨어적인 사유
2) 소프트웨어적인 사요
3) 사용자의 부주의
4) 해커 침입
5) 도난 및 자연 재해
11.2.1 주요 백업 대상
1) 전체 파일 시스템
2) 마지막 백업후의 변경된 파일 시스템
3) 애플리케이션
4) 각종 환경 설정 파일
5) 사용자 파일
11.2.2 tar
Unix와 Linux 시스템에서 가장 널리 쓰이는 backup tool이다. cpio보다 사용하기 쉬우며 소수의 파일을 손쉽게 백업할 수 있다.
tar를 이용한 백업 및 복구시 항상 최상위 /에서 실행하도록 한다.
11.2.2.1 tar를 이용한 백업
[root @edu00 linux]#fdformat /dev/fd0H1440
[root @edu00 linux]#tar -cMf /dev/fd0H1440 /etc
tar: Removing leading '/' from members names
Prepare volume #2 for '/dev/fd0H1440' and hit return:
백업용 하드 디스크가 있을 때 5분에 한번 /home, /etc, /usr/src를 백업
[root @edu00 linux]#vi /etc/crontab
----------------------
01-59/5 * * * * root /bin/testbackup.sh
----------------------
[root @edu00 linux]#mount -t ext2 /dev/hda2 /mnt/hard
[root @edu00 linux]#vi /bin/testbackup.sh
----------------------
tar cf /mnt/testbackup /home /etc /usr/src
-----------------------
home 디렉토리에 /etc를 백업할 때
[root @edu00 linux]#tar cvzf backup.tar.gz /etc
11.2.2.2 tar를 이용한 복구
[root @edu00 linux]#tar -zxvf backup.tar.gz /etc
11.2.2.3 백업 파일의 정보
[root @edu00 linux]#tar -ztvf backup.tar.gz
11.2.3 cpio
Unix 세계에서 fbackup이 나오기 전까지 널리 사용되던 backup tool이다.
많은 양의 데이터에 대해서는 tar보다 빠른 속도를 가지고 있다. 장치 파일이나 네트워크 파일 등 특수 파일도 백업이 가능하다.
14.2.3.1 옵션
[root @edu00 linux]#man cpio
-d : 디렉토리 생성
-I : 표준 입력으로부터 cpio 형식의 파일을 읽어서, 명시된 pattern에 일치하는 파일들 모두를 재생(input)
-l file : 입력으로 file을 받는다.
-o : 표준 입력으로부터 복사(백업)할 파일명의 목록을 받아 복사한다.
-t : 복사 대신 목차
-v : 파일을 복사하는 동안 각 파일의 이름을 보여준다.
-u : 무조건 복사
14.2.3.2 예제
[root @edu00 linux]#cpio -ov > backupFile
: 백업할 파일명의 목록을 표준 입력으로 받아 백업
[root @edu00 linux]#ls *.c | cpio -ov > backup1
[root @edu00 linux]#cpio -i < backup1
[root @edu00 linux]#find . -name \*.c -print | cpio -ov > backup2
11.2.4 dump
특별히 백업만을 위해 만들어진 유틸리티로 파일 시스템 서비스를 사용하지 않고 파일 시스템 자체를 직접 읽어낸다는 점에서 특별하다.
다단계 백업 레벨을 지원한다.
[root @edu00 linux]#dump –0u –f /home/edu00/a /usr
11.2.5 shell script를 이용한 백업
[root @edu00 linux]#vi /etc/crontab
--------------------------
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
# Backup
01 4 1 * * root backup.sh month /test /dev/fd0
01 3 * * 6 root backup.sh week /test /dev/fd0
01 3 * * 1-5 root backup.sh day /test /dev/fd0
-----------------------------------
[root @edu00 linux]#vi /bin/backup.sh
------------------------------------
#!/bin/bash
# 변수 설정 및 함수 로딩
TERM=$1
DIR=$2
DEV=$3
MNT=/mnt/backup
ADMIN=root
DATE1=`date +%Y-%m-%d-%H-%M`
DATE2=`date +%Y년%m월%d일`
# source function library
[ -f /bin/function.sh ] || exit 0
. function.sh
# 장치 마운팅 및 용량 확인
[ "$TERM" = "month" ] || mnt
[ "$TERM" = "month" ] || storage first
# 작업 파일 검색 및 백업
backup
# 백업 결과 및 용량 확인
check
[ "$TERM" = "month" ] || storage second
# 보고서 작성 및 메일 전송
report ; mailto
# 언마운팅 및 임시 파일 삭제
umnt ; remove
--------------------------------------
[root @edu00 linux]#vi /bin/function.sh
--------------------------------------
#!/bin/bash
# 마운팅 함수 정의
mnt() {
if [ ! -d $MNT ] ; then
mkdir -p $MNT
[ -f /tmp/$TERM.create ] || touch /tmp/$TERM.create
[ -d $MNT ] && echo "\t$MNT directory created" >> /tmp/$TERM.create
fi
mount -t ext2 $DEV $MNT
if [ ! -d $MNT/$TERM ] ; then
mkdir $MNT/$TERM
[ -f /tmp/$TERM.create ] || touch /tmp/$TERM.create
[ -d $MNT/$TERM ] && echo "\t$TERM directory created" >> /tmp/$TERM.create
fi
}
umnt() {
if [ -d $MNT/$TERM ] ; then
umount $MNT
fi
}
# 용량 확인 함수 정의
storage() {
if [ "$1" = "first" ]; then
STO1=`du -sh $MNT | cut -c1 -4`
STO2=`du -sh $MNT/$TERM | cut -c1 -4`
elif [ "$1" = "second" ]; then
STO3=`du -sh $MNT | cut -c1 -4`
STO4=`du -sh $MNT/$TERM | cut -c1 -4`
fi
}
# 백업 함수 정의
backup() {
case $TERM in
month)
tar -cMpf $DEV $DIR;;
week)
find $DIR -mmin -7 \! -type d -print > /tmp/$TERM.work
;;
day)
find $DIR -mmin -1 \! -type d -print > /tmp/$TERM.work
;;
esac
if [ -s /tmp/$TERM.work ]; then
tar -cP -T /tmp/$TERM.work -f $MNT/$TERM/$DATE1.tar
fi
}
# 백업 결과 확인 함수 정의
check() {
case $TERM in
month)
tar -df $DEV $DIR > /tmp/$TERM.problem
;;
*)
tar -tf $MNT/$TERM/$DATE1.tar > /tmp/$TERM.backup
diff /tmp/$TERM.work /tmp/$TERM.backup > /tmp/$TERM.problem
esac
}
# 프린팅 함수 정의
## 보고서 헤더 출력
print_header() {
cat /etc/backup/$TERM.header > /tmp/$TERM.result
}
## 사용량 출력
print_storage() {
echo -e "\t백업 전, $DEV의 총사용량 : $STO1" >> /tmp/$TERM.result
if [ -s /tmp/$TERM.work ]; then
echo -e "\t백업 후, $DEV의 총사용량 : $STO3" >> /tmp/$TERM.result
fi
echo -e "\t백업 전, $DEV의 $TERM 디렉토리 총사용량 : $STO2" >> /tmp/$TERM.result
if [ -s /tmp/$TERM.work ]; then
echo -e "\t백업 후, $DEV의 $TERM 디렉토리 총사용량 : $STO4" >> /tmp/$TERM.result
fi
}
## 메시지 출력
print_message() {
echo -e "\n" >> /tmp/$TERM.result
cat /etc/backup/$TERM.$1 >> /tmp/$TERM.result
}
## 수행 결과 출력
print_result() {
cat /tmp/$TERM.$1 >> /tmp/$TERM.result
}
0
댓글 0개