압축 그리고 백업( Backup) > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

압축 그리고 백업( 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개

© SIRSOFT
현재 페이지 제일 처음으로