1

압축 그리고 백업( Backup)

· 18년 전 · 1736

압축 그리고 백업( 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,694
18년 전 조회 3,280
18년 전 조회 4,610
18년 전 조회 4,892
18년 전 조회 2,169
18년 전 조회 3,628
18년 전 조회 3,344
18년 전 조회 4,631
18년 전 조회 3,279
18년 전 조회 4,272
18년 전 조회 3,964
18년 전 조회 3,653
18년 전 조회 3,055
18년 전 조회 2,954
18년 전 조회 3,528
18년 전 조회 2,186
18년 전 조회 2,131
18년 전 조회 5,537
18년 전 조회 2,713
18년 전 조회 2,457
18년 전 조회 2,764
18년 전 조회 2,114
18년 전 조회 3,102
18년 전 조회 1만
18년 전 조회 1,949
18년 전 조회 2,865
18년 전 조회 2,901
18년 전 조회 2,155
18년 전 조회 3,006
18년 전 조회 4,005
18년 전 조회 2,963
18년 전 조회 2,341
18년 전 조회 6,067
18년 전 조회 3,692
18년 전 조회 6,371
18년 전 조회 2,464
18년 전 조회 2,387
18년 전 조회 2,411
18년 전 조회 3,348
18년 전 조회 3,214
18년 전 조회 2,002
18년 전 조회 3,743
18년 전 조회 1,654
18년 전 조회 1,397
18년 전 조회 1,422
18년 전 조회 1,576
18년 전 조회 1,670
18년 전 조회 3,445
18년 전 조회 2,294
18년 전 조회 1,737
18년 전 조회 2,144
18년 전 조회 4,641
18년 전 조회 2,369
18년 전 조회 3,017
18년 전 조회 2,002
18년 전 조회 3,500
18년 전 조회 1,868
18년 전 조회 7,684
18년 전 조회 3,337
18년 전 조회 1,318
18년 전 조회 2,352
18년 전 조회 3,561
18년 전 조회 2,402
18년 전 조회 2,183
18년 전 조회 2,795
18년 전 조회 3,761
18년 전 조회 3,517
18년 전 조회 2,607
18년 전 조회 1,961
18년 전 조회 1,988
18년 전 조회 2,551
18년 전 조회 2,026
18년 전 조회 2,919
18년 전 조회 1,708
18년 전 조회 2,251
18년 전 조회 1,720
18년 전 조회 2,179
18년 전 조회 2,405
18년 전 조회 2,339
18년 전 조회 2,295
18년 전 조회 2,224
18년 전 조회 3,522
18년 전 조회 1,711
18년 전 조회 3,484
18년 전 조회 2,057
18년 전 조회 5,323
18년 전 조회 2,190
18년 전 조회 2,370
18년 전 조회 1,771
18년 전 조회 2,169
18년 전 조회 3,689
18년 전 조회 1,549
18년 전 조회 1,779
18년 전 조회 4,356
18년 전 조회 3,742
18년 전 조회 3,307
18년 전 조회 3,412
18년 전 조회 3,907
18년 전 조회 4,371
18년 전 조회 4,290