1

압축 그리고 백업( Backup)

· 18년 전 · 1765

압축 그리고 백업( Backup)

 

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

}

|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

+
제목 글쓴이 날짜 조회
18년 전 조회 1,712
18년 전 조회 3,302
18년 전 조회 4,629
18년 전 조회 4,908
18년 전 조회 2,201
18년 전 조회 3,651
18년 전 조회 3,368
18년 전 조회 4,655
18년 전 조회 3,307
18년 전 조회 4,289
18년 전 조회 3,983
18년 전 조회 3,679
18년 전 조회 3,080
18년 전 조회 2,979
18년 전 조회 3,557
18년 전 조회 2,208
18년 전 조회 2,158
18년 전 조회 5,559
18년 전 조회 2,740
18년 전 조회 2,489
18년 전 조회 2,790
18년 전 조회 2,139
18년 전 조회 3,125
18년 전 조회 1만
18년 전 조회 1,974
18년 전 조회 2,889
18년 전 조회 2,927
18년 전 조회 2,171
18년 전 조회 3,030
18년 전 조회 4,036
18년 전 조회 2,989
18년 전 조회 2,368
18년 전 조회 6,102
18년 전 조회 3,715
18년 전 조회 6,391
18년 전 조회 2,492
18년 전 조회 2,409
18년 전 조회 2,433
18년 전 조회 3,380
18년 전 조회 3,235
18년 전 조회 2,019
18년 전 조회 3,768
18년 전 조회 1,681
18년 전 조회 1,419
18년 전 조회 1,447
18년 전 조회 1,598
18년 전 조회 1,696
18년 전 조회 3,471
18년 전 조회 2,314
18년 전 조회 1,766
18년 전 조회 2,173
18년 전 조회 4,666
18년 전 조회 2,409
18년 전 조회 3,036
18년 전 조회 2,030
18년 전 조회 3,523
18년 전 조회 1,888
18년 전 조회 7,704
18년 전 조회 3,367
18년 전 조회 1,347
18년 전 조회 2,385
18년 전 조회 3,584
18년 전 조회 2,423
18년 전 조회 2,197
18년 전 조회 2,821
18년 전 조회 3,781
18년 전 조회 3,541
18년 전 조회 2,630
18년 전 조회 1,986
18년 전 조회 2,006
18년 전 조회 2,573
18년 전 조회 2,053
18년 전 조회 2,942
18년 전 조회 1,735
18년 전 조회 2,270
18년 전 조회 1,756
18년 전 조회 2,218
18년 전 조회 2,430
18년 전 조회 2,362
18년 전 조회 2,316
18년 전 조회 2,249
18년 전 조회 3,547
18년 전 조회 1,736
18년 전 조회 3,505
18년 전 조회 2,080
18년 전 조회 5,348
18년 전 조회 2,218
18년 전 조회 2,400
18년 전 조회 1,800
18년 전 조회 2,195
18년 전 조회 3,709
18년 전 조회 1,577
18년 전 조회 1,798
18년 전 조회 4,378
18년 전 조회 3,768
18년 전 조회 3,326
18년 전 조회 3,436
18년 전 조회 3,938
18년 전 조회 4,394
18년 전 조회 4,314