2013년 11월 30일 토요일

[Linux] 시스템 백업에 대하여

자료출처: 데비안 사용자 모임 5회 세미나 강의 문서

--tar 백업

1. 백업 용어 정리

- 풀 백업 (full backup)
파일 셋 안의 모든 파일을 포함해서 모두 복사하는 방법
하나의 컴퓨터 시스템이나 하나의 디스크 파티션에서 사용
새로운 커널을 만든다거나 새로운 어플리케이션 팩키지를 추가한다든지 또는
새로운 버젼의 운영체제를 설치하는 등의 시스템에 중요한 변화를 주었을 경우

- 증분 백업 (incremental backup)
시스템이 이전에 백업한 이후로 변경된 파일만을 복사
풀 백업이 너무 방대하고 자료 변경이 별로 없을 때

- 백업 단계 (backup level)
단계(level) 0 : 풀 백업
단계(level) 1 : 마지막 풀 백업(단계 0) 이후에 변경된 모든 파일 저장
단계(level) 2 : 마지막 단계 1 백업 이후에 변경된 모든 파일 저장

- 무인 백업 (unattended backup)
cron을 사용해 백업 명령어가 자동으로 수행
보안이 확실히 보장될 때가 아니면 무인 백업은 사용하지 않는것이 좋다.


2. tar 유틸리티
테이프 생성을 위한 유틸리티로서 바이너리 데이터를 처리할 수 있다. 또한 여러
디렉토리를 아카이브로 묶을 수 있으며 링크를 포함하는 디렉토리들을 전송할 수
있으면서도 파일의 소유권과 액세스 퍼미션 등도 그대로 보존할 수 있는 장점이
있다.


3. 간단한 tar의 사용법

- tar의 플래그
c : 아카이브 생성
x : 아카이브로 부터 파일 추출
t : 목차 테이블 보기
v : 상세한 정보 출력

- 아카이브 만들기
$ cd /
$ tar -cf backup.tar home/
/home 의 하위디렉토리를 포함하여 backup.tar로 저장

- 아카이브 압축하기
$ gzip backup.tar
backup.tar.gz 이라는 파일을 생성하여 원래의 tar 아카이브보다 훨씬 더 작게 압축

- 압축된 아카이브 만들기
$ cd /
$ tar -cf - home/ | gzip > backup.tar.gz

(주의) v옵션 문제
$ tar -cvf - home | gzip > backup.tar.gz 을 하였을때는 tar에 따라서 v(verbose)
옵션을 stderr로 처리하지 않고 stdout으로 처리하여 문제를 일으키는 경우가 있다.
따라서 아카이브를 만들때는 v옵션을 빼는 것이 좋고, 아카이브를 풀때는 v 옵션과
관계가 없다.

- 아카이브 풀기
$ gunzip backup.tar.gz
$ tar -xf backup.tar

- 압축된 아카이브 풀기
$ zcat backup.tar.gz | tar -xf -

- gzip이 내장된 GNU tar
GNU tar의 경우 gzip 처리를 내장하고 있다. 따라서 다음과 같이 처리할 수 있다.
$ cd /
$ tar -czf backup.tar.gz home/

$ tar -xzf backup.tar.gz

- 아카이브 내용보기
$ tar -tf backup.tar
아카이브를 풀기전에 항상 파일들의 이름을 먼저 검사한다. 만일 아카이브 속의
파일들이 현재 디렉토리에 풀리도록 묶여 있다면, 임시 디렉토리를 새로 하나
만들고, 그곳으로 이동(cd)하여 파일들을 풀어낸다.

- 일부 파일들만 뽑아내기
$ tar -xvf backup.tar filename
여기서 filename은 tar의 -t옵션으로 파일의 경로명까지 알아야 한다.  filename과
./filename은 서로 다르게 처리되므로 정확한 파일명을 지정해야 한다.

$ tar -xvf backup.tar `tar -tf backup.tar|grep filename`
의 방법을 쓰는 것도 좋다.

(주의) 절대 경로 문제
절대경로를 갖는 디렉토리 또는 파일을 복구할 때 문제가 발생한다. tar는
아카이브에 지정되어 있는 경로명으로 파일을 복구하기 때문에, 파일이 복구될 곳을
변경할 수가 없다. 따라서 이미 존재하는 파일을 덮어쓰거나 퍼미션 문제가 발생할
수 있다.
GNU tar의 경우, 기본적으로 모든 절대 경로명을 상대경로 변경하여 아카이브를
만든다.  --absolute-names 옵션을 사용하면 절대 경로로 아카이브를 만든다.
가장 좋은 방법은 아카이브를 만들때 디렉토리가 슬래시(/)나 틸드(~)로 시작하지
않도록 조심하는 것이다.
또 다른 방법으로는
$ cd /
$ tar -cf backup.tar .
를 줄여서

$ tar -cf backup.tar -C / .

-C 옵션은 아카이브를 생성하기 전에 /로 이동하도록 한다. 여러 개의 디렉토리들을
아카이브로 만들려면 -C옵션을 여러번 사용한다.
$ tar -cf backup.tar -C /home/smiletw . -C /home/woody ./test


- 아카이브에 추가하기
$ tar -uvf backup.tar home/
새로운 파일들만 업데이트 한다. 동일한 파일이 업데이트 되면 아카이브 마지막에 추가한다.  (테입장치에서는 중간에 넣을 수 없는 것을 감안)

4. GNU tar를 이용한 풀백업 및 증분 백업
일반적으로 tar를 이용해서 아카이브를 만들면 풀백업이 된다. 그러나 사용자
홈디렉토리 또는 한 파티션 전체를 백업할때는 풀 백업을 자주 사용하기 힘들다.
이럴경우 풀 백업과 함께 증분 백업을 해 주는 것이 좋다. GNU tar는 옵션
처리만으로 손쉽게 풀백업과 증분 백업이 가능하게 해준다.
먼저 GNU tar의 풀 백업 및 증분 백업에 쓰이는 옵션이 2가지 있다. -G
(--incremental) 옵션과 -g snapshot-file (--listed-incremental) 이 그것이다.
-G 옵션은 예전 증분 백업 포맷으로 아카이브를 생성해 준다. 이 옵션으로 생성된
아카이브에는 아카이브 내에 포함되어 있는 파일이나 디렉토리의 정보가 들어가므로
비표준 아카이브로 생성된다. 따라서 GNU버젼이 아닌 tar로는 내용을 볼 수가 없게
된다.
-g snapshot-file 옵션은 표준 아카이브로 생성되면서, 파일이나 디렉토리 등의
정보를 snapshot-file에 따로 저장함으로써, 표준 아카이브를 생성하게 만들어
준다. 따라서 GNU tar를 이용한 풀 백업 및 증분 백업에서는 -G 옵션이 아닌 -g
snapshot-file 옵션을 사용하는 것이 좋다.

- 풀 백업
$ tar -g list -czvf backup.tar.gz home/
list 라는 snapshot-file이 생성된다. 그리고 backup.tar.gz이라는 백업된
아카이브가 생성된다.

- 증분 백업
$ tar -g list -czvf backup-1.tar.gz home/
기존의 list 파일에서 이미 풀 백업된 내용을 확인하고, 그 이후에 변경되거나
추가되거나 삭제된 파일들을 backup-1.tar.gz에 백업한다.

5. GNU tar를 이용한 복구

먼저 풀 백업된 아카이브를 복구한다.
$ tar -g list -xzvf backup.tar.gz
다음으로 증분 백업된 아카이브들 중 가장 최근에 백업한 것만 복구하면 된다.
$ tar -g list -xzvf backup-10.tar.gz

6. 백업 및 복구의 유용한 옵션
-W (--verify) 검증
백업을 하는 도중 변경되는 파일이 있을 경우가 있다. 특히 풀 백업과 같이 시간이
오래 걸리는 백업의 경우 아카이브가 생성되는 동안 변경될 가능성이 높다. 따라서
풀 백업의 경우 검증해주는 것이 좋다.
$ tar -g list -cvf backup.tar home/
이 경우 아카이브 생성 후, 아카이브의 내용과 실제 디렉토리의 내용과 같은지
확인한다. 그러나 gzip으로 압축하는 -z 옵션과 함께 사용할 수 없다. 따라서 검증
옵션을 사용해서 아카이브를 생성할 경우 gzip압축은 따로 해주어야 한다.

7. 백업 및 복구 정책
GNU tar의 경우 앞서 말한 level 1 백업까지만을 지원해 준다. snapshot-file이
없을 경우 풀 백업(level 0)을 하고, snapshot-file이 이미 존재할 경우 증분
백업(level 1)을 하게 된다. 따라서 어느 시점에 풀 백업을 해야 하는지가 백업
정책에서 중요하다.  백업할 파일들이 자주 변경될 경우, 풀 백업의 주기도
짧아진다. 또한 변화될 데이터가 매우 중요할 경우, 백업도 자주 해야한다.
일반적으로 level 1 백업만을 지원해 주는 GNU tar를 이용한다면, 1주일에 한번 풀
백업을 실행하고 매일 증분 백업을 한다. 백업하는 시간은 파일의 변화가 적은
새벽이 좋다. 따라서 일요일 새벽12시를 전 후해서 풀 백업을 하고, 매일 새벽에
증분 백업을 하는 것이 좋다.
또한 풀 백업의 경우, 검증 옵션 (-W)을 사용하여, 아카이브를 검증해주는 것이
좋다. 그리고 아카이브의 크기를 줄이기 위해서 -z 옵션을 사용하여 압축해 주는
것이 좋다.
아카이브를 만들 때는 아카이브의 이름에 신경을 써줌으로써 백업 및 복구시에
혼란을 줄일 수 있다. 풀 백업을 할 경우 다음과 같이 snapshot-file의 이름도 백업
날짜를 써주는 것이 좋다.
$ tar -g 2002-05-11.list -W -cvf 2002-05-11-full.tar home/

증분백업 때도 마찬가지로 날짜를 써 주는 것이 좋다.
$ tar -g 2002-05-11.list -czvf 2002-05-12.tar.gz home/

그리고 -g 옵션에 쓰이는 snapshot-file의 보관 또한 중요하다. snapshot-file이
없으면 증분 백업된 아카이브는 수정된 부분만 저장되어 있는 일반 아카이브와
같아진다. 즉, 풀 백업 이후 삭제된 파일이 있음에도 불구하고, 증분 백업된
아카이브를 복구할 때, 풀 백업된 아카이브의 복구때 생성된 파일이 삭제되지
않는다. 따라서 용량이 작은 snapshot-file은 꼭 따로 안전한 곳에 보관해 주어야
한다.

- 테잎 백업..

*******************************************************************************
리눅스 tape_mini_Howto ver0.001
*******************************************************************************

- 서  론

이문서는 리눅스에서 테이프장치를 사용하는 아주 간단한 내용을 보여준다.
여기서 사용하는 테이트장치는 SCSI 장치만을 설명한다.
이문서는 KLDP의 (주)정보라인-http://www.jbline.co.kr 글쓴이: 강민우
(umkangm0@chollian.net)님의 글을 참조하여 작성했습니다.

- 테이프라면 카세트??

테이프 드라이브는 카세트와 비슷한 테이프를 사용하긴 하지만 사실 전혀 다르다.
테이프는 디스크와 달리 시리얼 접근을 하며, 이것은 어떤 부분에 이르기위해 그곳까지의 모든 부분을 통과하여 가야함을 의미한다.
카세트와 시디플레이어를 생각해보자.. :-)
시리얼 접근 방식은 테이프 드라이브를 느리게 만들지만, 그로 인해 만드는 비용이 비교적 저렴하다.
또한 테이프는 상당히 길게 만들 수 있어서 고용량의 데이터를 저장할 수 있다는 장점이 있다.
테이프 드라이브는 이러한 특징으로 효과를 볼  수 있는 파일모으기와 백업등의 작업에 매우 적합한 미디어이다.

- Tape 장치 설치

테이프 장치를 사용하기 앞서 장치를 인식시켜야 한다. 일반적인 스카시 장치
인식과 같은 방식으로 인식시킨다. 커널에서의 설정은 아래와 같다
(당연히 스카시 장치이기 때문에 스카시컨트롤러는 인식시켰다고 가정한다)
modconf 명령으로 해당 모듈을 올려준다.

kernel/drivers/scsi                     SCSI controller cards and SCSI
st           + SCSI tape support

대충감잡았겠지만 테이프 장치명은 st0와 같이 된다.          

dmesg로 장치의 인식을 확인한다.

st: Version 20011103, bufsize 32768, wrt 30720, max init. bufs 4, s/g segs 16
Attached scsi tape st0 at scsi0, channel 0, id 3, lun 0

- Tape 장치 사용하기

테이프장치명은 /dev/st0  /dev/st1, st2 이런식으로  나가게 된다.

테이프 장치를 제어하기 위해서 mt-st라는 패키지를 설치한다.

devfs를 사용하고 있다면 SCSI, IDE를 막론하고 장치들은 /dev/tapes 아래에 위치하며 다음과 같다

        /dev/tapes/tape0        첫번째 테이프
        /dev/tapes/tape1        두번째 테이프

- mt 사용하기

mt -f /dev/st0 rewind : 되감기
mt -f /dev/st0 retension : 느슨해진 테잎을 다시 팽팽하게 하기
mt -f /dev/st0 erase : 지우기
mt -f /dev/st0 offline : 테이프 장치를 offline으로 전환하고 테이프를 꺼낸다
mt -f /dev/st0 eject : 테이프를 꺼낸다

다른 명령들에 대한 것은 man mt 또는 mt -h 로 확인해보자.
apt-cache search tape를 통해 자신의 취향에 맞는 것을 찾아보는 것도 좋은 생각이다.
kdat 같이 그래픽적이며 직관적인 것을 찾을 수도 있을 것이다. 물론 취향 문제이다 :-)

- TAPE장치를 이용한 백업과 복구

  *  TAR 쓰기
    tar 는 유닉스 공통 명령이며 현재도 가장많이 쓰는 압축방식이다.
   
    간단한예로 /home디렉토리를 테이프장치에 백업하는 명령은 아래와같다
   
    tar cvf /dev/st0 /home

    테이프 백업내용을 tar를 이용하여 복구하기

    tar xvf /dev/st0 (이경우 풀고자 하는 디렉토리로 이동해서 푼다)

    테이프에 백업된 내용 살펴보기

    tar tvf /dev/st0
 
  * dump 쓰기
 
    dump를 이용하여 백업을 받으면 그것에 해당되는 디렉토리 구조까지
    통째로 백업을 받는다. 이 방법을 이용하면 복구할때 편하다.
   
    dump로 /home을 테이프에 백업하기
   
    dump 0uf /dev/st0 /home
   
    dump를 이용하여 백업한 내용을 복구하기
   
    restore ivf /dev/st0

    이렇게 하면 아주 편하게 interactive한 명령모드가 떠서 /home밑에 있는 여러
    파일이나 디렉토리를 원하는대로 복원시킬 수 있다.  interactive prompt상에서
    쓸 수 있는 명령어는 다음과 같다.  ls, cd, add, delete, extract, quit
    이런식으로 되어져 있기때문에 백업받은 테잎이 마치 현재 디스크처럼
    내용전체를 파악, 복구할 수 있다. 아주 편한방법이다.  add를 사용하여
    디렉토리나 파일을 지정하게 되고 나중에 extract라는 명령어를 사용하게
    될 때 실제로 현재의 작업 디렉토리에 아까 add 명령어를 사용하여 선택했던
    파일들이 풀리게 된다..

    - 참고

리눅스 시스템 관리자 가이드 - http://kldp.org/Translations/html/SysAdminGuide-KLDP/book1.html
리눅스에서 테잎드라이브 쓰는방법 - http://kldp.org/KoreanDoc/TapeDrive-KLDP
Linux Devfs (Device File System) FAQ - http://kldp.org/Translations/html/DEVFS_FAQ-KLDP/index.html

--- .netrc 설정

ftp, rlogin, rexec 를 사용하기 위해서는 아이디와 비밀번호를 입력을 해야 한다.
빈번하게 사용을 할경우는 일일이 사용할때 마다 아이디와 비밀번호를 입력해야 하는 불편함을 해결하기 .netrc 에 미리 입력을 해두면 다음 부터 아이디와 비밀번호를 입력하지 않아도 된다.

홈디렉토리에 .netrc 를 편집기로 연다. ($HOME/.netrc)

vi .netrc
machine 172.24.126.28 login k1c password ******

편집을 한다음에는 다음과 같이 권한 설정을 바꾸어 준다.
chmod 600 .netrc

권한 설정을 바꾸었으면 다음과 같이 접속을 하면 별도의 로그인 없이 바로 들어간다.
ftp 172.24.126.28

--- 네트웍 백업

미러를 이용한 네트웍 백업

-- ssh


* 키 생성

$ ssh-keygen -b 2048 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nefsall/.ssh/id_rsa):
/home/nefsall/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nefsall/.ssh/id_rsa.
Your public key has been saved in /home/nefsall/.ssh/id_rsa.pub.
The key fingerprint is:
cc:16:ff:d4:69:66:f3:66:72:91:76:44:2f:6d:70:f1 nefsall@file

* 키 복사

$ ssh <host> "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
Password:

* scp를 이용한 파일 복사

$ scp <file> ...  <host>:/dir

$ scp -r dir/ <host>:/dir/

* rsync, ssh를 이용한 백업, 미러링

$ rsync -av -e ssh [--delete] dir <host>:/dir (로컬에서 리모트로)

$ rsync -av -e ssh [--delete] <host>:/dir dir (리모트에서 로컬로)

--delete추가시 미러

* 익명 rsync 쓰기

archive 리스트 보기

$ rsync <site>::

미러하기

$ rsync -av --delete <host>::<archive> dir/


** rsync
        ***특징
-rsync는 rcp와 비슷한 프로그램으로 더욱 다향한 옵션으로 효율적인 데이타
전송을 지원한다.

-rsync는 두 호스트사이의 데이터의 동기화를 위해서 사용되는 방법이다.
동기화를 위해서 파일의 크기나 시간의 변화등을 이용하여 파일의 변경 유무를
판단하여 데이타 동기화를 한다.

-주요 특징
.링크, device, 소유자, 그릅, 허가권 복사 지원
.GNU tar와 비슷한 exclude, exclude-from 옵션 지원
.rsh 또는 ssh 등 사용가능
.root 권한이 필요없음
.anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)


***서버측 설정
-동기화에 사용하는 프로토콜로는 rsh, ssh 를 사용할 수 있으며 이를 사용하지
않더라도 원격 rsync 서버에 tcp 포트 873을 이용하여 클라이언트-서버형식으로
접속할 수 있다.
여기서는 일반적인 클라이언트-서버 방식만을 설명한다.
데비안에서 rsync를 패키지로 설치하면 보안 문제로 inetd.conf에 설정이
들어있지 않다. 따라서 사용자가 추가로 설정을 해주어야 한다.

---------------------------------------------------------------------------
rsync   stream  tcp     nowait  root    /usr/bin/rsync rsyncd --daemon
---------------------------------------------------------------------------

--daemon은 대몬모드로 시작한다는 이야기이며 /etc/rsyncd.conf파일을 필
요로 한다.

/etc/inetd.conf 파일에 위 라인을 추가후 /etc/init.d/inetd restart 명령으로
inetd를 재 시작한다.
만약, rsh 또는 ssh를 사용한다면 inetd.conf를 수정할 필요가 없다.

-rsync 설정 파일(/etc/rsyncd.conf)을 편집한다.
/usr/share/doc/rsync 에 예제 파일(sample-rsyncd.conf.gz)을 참고하자.

---------------------------------------------------------------------------
# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
#log file=/var/log/rsyncd
pid file=/var/run/rsyncd.pid
#syslog facility=daemon
#socket options=

# MODULE OPTIONS

[web]  # 서비스명

         comment = public archive       # 이 설정에 대한 설명
         path = /var/www/               # 서비스할 디렉토리
         use chroot = yes               # 서비스하는 디렉토리를 루트디렉토리로 사용(ftp의 chroot와 같은 개념)
#       max connections=10             # 동시 접속자 제한
         lock file = /var/lock/rsyncd
         read only = yes                # 읽기 전용(put 명령을 허용하기 위해서는 no로 설정해야 한다)
         list = yes
         uid = nobody                   # 접근자에 대한 유저 권한
         gid = nogroup                  # 접근자에 대한 그룹 권한  
#       exclude = #specify any file in path not to be accessed
#       exclude from =
#       include =
#       include from =
#       auth users = #allow specific users to connect (besides anonymous)
#       secrets file = /etc/rsyncd.secrets
         strict modes = yes #makes sure the secrets file has proper permissions
         hosts allow = 192.168.1.2       # 호스트별 접속허용을 위해서(여기에 상대 호스트의 주소를 명시)
#       hosts deny =
         ignore errors = no
         ignore nonreadable = yes
         transfer logging = no
#       log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
         timeout = 600                   # 클라이언트에서 접근시 타임아웃시간.
                                         # anonymous 로 운영하는 경우 설정을 해야 클라이언트가 죽었을 때
                                         # 서버에서 접속을 해체할 수 있음.
     
         refuse options = checksum, dry-run
         dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
---------------------------------------------------------------------------
-hosts allow : 이 설정의 기본은 all 이므로 보안을 유지하기 위해서는 반드시
설정을 하여야 한다.

-현재 rsync 자체적으로는 암호화 지원하지 않으며 사용자 인증만 지원한다
추후에는 SSL을 지원할 예정이며, 만약 암호화를 사용하려면 ssh를 사용하면 된다.

***클라이언트 설정
서비스명        :  web                
rsync 서버 이름 :  debianusers.org    
로컬측 디렉토리 :  /var/www

-a 아카이브 모드. (심볼릭 링크, 속성, 퍼미션, 소유권 등 보존)
    -a 는 -rlptg 와 동일하다.
    -r recursive (하위 디렉토리까지 포함)
    -l 심볼릭 링크 재생성
    -p 퍼미션 업데이트
    -t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)
    -g 그룹이름 변경

-v 자세한 내용을 보여줌
--delete 서버에서 사라진 파일이 있으면 클라이언트측에서도 지움.
기본설정에서는 지우지는 안는다.
-z data file을 압축해서 전송한다.

-GET 설정(다운로드)

----------------------------------------------------------------------
/usr/bin/rsync -av --delete debianusers.org::web /var/www
----------------------------------------------------------------------

debianusers.org 서버의 /var/www 내용을 로컬의 /var/www/로 가져옴
서버에서 지워진 파일은 로컬에서도 지워짐

----------------------------------------------------------------------
/usr/bin/rsync -avz deebianusers.org:/usr/src/bar /data/tmp
----------------------------------------------------------------------

위의 내용은 debianusers.org 호스트에서 /usr/src/bar 안의 내용을 로컬
호스트의 /data/tmp 디렉토리로 옮긴다.
위에서 /usr/src/bar/ 라고 뒤에 디렉토리 표시를 한다면 bar 디렉토리도
포함해서 가져온다.

참고
----------------------------------------------------------------------
: 과 :: 의 차이
: 은 rsh나 ssh를 사용하는 것이며 ::은 rsync 자체에서 지원하는 기능을
이용하여 자료를 가져오는 것으로 873 TCP 포트를 사용한다.
: 에서 기본은 rsh를 사용하나 -e ssh 옵션을 이용하여 ssh를 사용할 수도
있다. ssh를 사용하려면 비밀번호를 입력해야하나 이것도 파일형태로 만들어서
옵션에서 지정해주면 된다.
자세한 사항은 man 페이지를 참고하기 바란다.
----------------------------------------------------------------------

-PUT 설정(업로드)

----------------------------------------------------------------------
/usr/bin/rsync -av --delete /var/www debianusers.org::web
----------------------------------------------------------------------

rsync 설정에서 read only=no 가 설정되어야 한다

-서버측 공유명(맨페이지에서는 모듈이라고 한다)을 보려면 아래 명령을 실행한다.

----------------------------------------------------------------------
rsync debianusers.org::
----------------------------------------------------------------------

-web 이라는 서비스명의 공유 디렉토리의 파일 내용을 표시하기 위한 명령

----------------------------------------------------------------------
rsync -a debianusers.org::web
----------------------------------------------------------------------

-서버측 공유 디렉토리의 파일리스트를 현재의 디렉토리에 list라는 파일로 저장

----------------------------------------------------------------------
rsync -av debianusers.org::web
----------------------------------------------------------------------

-보안을 위해 ssh 프로토콜을 이용하는 방법

----------------------------------------------------------------------
rsync -av --delete -e ssh /var/www/ debianusers.org:/var/www
----------------------------------------------------------------------

** 실제 적용
미러를 이용한 백업은 네트웍으로 연결되어 있는 두 종단의 여러 호스트들의
백업 데이타와 이에 따른 백업 저장 작업을 하나의 호스트로 집중하여 제어할 수
있게 해준다.

만약, 내부 네트웍 호스트들의 백업만을 생각한다면 NFS, Samba같은 파일서버를
이용해서 백업 데이타를 한곳의 호스트로 집중할 수가 있다.
하지만 회사에서 대규모 서비스를 외부로 하기위해 IDC에 다수의 서버를 배치
했을때는 파일서버를 이용한 방법으로는 한곳에 백업 데이타를 집중하기가
불가능해진다.
이런 경우에는 시스템 관리자가 매일 매일 확인할 수 없는 IDC에 있는 서버의
재난 복구 정책을 겸하여 백업 정책을 세우는 것이 좋다.

우선 IDC 있는 서버군에 파일 서버를 두어 각 호스트의 백업 데이타를 파일
서버로 모은다. 사내 로컬 네트웍 역시 파일 서버로 사내 각 호스트들의 백업
데이타를 파일 서버로 모은다.
이때 각각의 호스트에서의 개별 백업 작업은 관리자가 정한 룰에 따라 만든 백업 
스크립트를 cron에 등록시켜 백업 작업을 자동화 시키는 것이 좋다.
물론 이때 주의해야 할 점은 미묘한 스크립트상의 실수로 원하지 않는 백업
데이타 유실에 주의를 해야할 것이다.
파일 서버는 NFS등을 사용하여 각 호스트의 특정 디렉토리에 미리 마운트시켜
놓아 각 호스트에서는 단순하게 백업을 NFS로 마운트된 디렉토리에 저장함으로
각 호스트들의 백업 데이타를 파일 서버로 집중 시킬수가 있다.

백업 정책은 경우에 따라서 틀려지겠지만 일주일에 한번 전체 백업, 매일 매일
전체 백업후의 증분 백업(tar의 증분 백업 방법을 이용하거나 find를 이용해서)
을 하는것이 좋다.   
그리고 일주일 주기로 파일 서버에 모인 각 호스트의 전체 백업 데이타를
관리자가 정한 룰에 따라 rsync 미러링(cron 이용)을 이용해서 한곳의 파일
서버로 가져와 양 서버군의 백업 데이타를 한번에 백업 매체에 실제적으로
저장하는 것이 일반적인 방법이 될것이다.
만약, 좀 더 민감한 경우라면 매일 백업되는 증분 백업 데이타 역시 사내 파일
서버로 모아 백업 매체에 저장하는 것이 좋을 것이다.
이때 백업 매체로는 백업 데이타의 용량에 따라 틀려지겠으나 전체 백업
데이타는 Tape 드라이브를 사용하고 증분 백업 데이타는 분리된 호스트에
저장하거나, 광드라이브(cd-rw, mo, dvd)를 사용할 수 있다.

참고
----------------------------------------------------------------------
mkCDrec 프로그램을 이용하여 CD로 시스템을 백업하고 복구할 수 있다.
프로그램은 아래 싸이트에서 다운받을수 있다.
http://mkcdrec.sourceforge.net
http://mkcdrec.ota.be/project

이 프로그램은 시디 뿐만 아니라 여유 하드디스크나 NFS, 로컬이나 원격의 Tape
드라이브로의 백업도 지원한다.

관심있는 분들은 한번 사용해보는것도 괜찮을 것이다.
자세한 사항은 소스에 딸려오는 문서를 찾아보기 바란다.
----------------------------------------------------------------------

참고) 스크립트 첨부파일 있음.(script.tar.gz)


-- 시디 백업

현재 사용되구 있는 리눅스 시스템을 CD에 굽고, 리눅스 시스템이 망가 졌을 때 이 구운 시디로 부팅을 해서 복구를 하는 방법이다.

한텀에서 명령을 치면 1번시디 , 2번시디….이렇게 만들면서 시디에 굽고 , 나중에 1번 시디로 부팅을 해서 복구를 한다.

1        먼저 인터넷에서 프로그램을 다운 받는다.

http://mkcdrec.sourceforge.net/

http://mkcdrec.ota.be/project/mkCDrec_v0.5.9.tar.gz

현재 나와 있는 버전은 0.5.9 이다.

다운 받았으면 아래와 같이 압축을 풀어 준다.

tar xvfz mkCDrec_v0.5.9.tar.gz


2        설정
설정을 할때는 루트 권한으로 한다.



압축을 풀면 mkcdrec 이런 디렉토리가 생겨난다.

Cd mkcdrec
명령어로 디렉토리를 이동한다.
그러면 아래와 네모박스에 Config.sh 라는 설정 파일이 있습니다.

[image1.gif]


이 파일을 수정해서 사용을 하면 됩니다.
먼저 CD-RW의 장치를 알아야 만 시디를 구울수가 있습니다.
아래와 같이 노란색의 박스 표시에 있는 숫자 번호(1, 0, 0)이 CD-RW의 장치 입니다.

이것을 가지고 설정화일을 수정해 주어야 합니다.

[image2.png]

vi Config.sh 를 이용해서 파일을 수정합니다.

아래와 같이 CD-R/W 장치를 지정합니다.

[image3.png]

아래와 같이 랜카드 모듈을 설정합니다.
랜카드 모듈은 lsmod 를 이용하면 확인할수 있습니다.

[image4.png]

또한 옵션으로 BURNCDR 이라는 부분을 y 로 사용을 하면 실시간으로 굽는 것이고,
n 를 사용하면 한면에 /tmp/CDrec-2002.03.25_1.iso 라는 파일을 만들어서 원격으로 다운 받아서 구울수가 있다.

[image5.png]

3        시디이미지 만들고 굽기

make 를 치면 아래와 같이 선택할수 있는 메뉴가 나옵니다.

[image6.png]

이중에서 부팅시디를 만들고, 1번시디, 2번시디…를 만들려면 2번을 선택하면 시디를 만들수 있습니다.

2번을 선택하면 아래와 같이 계속해서 실행을 할것인지 확인을 합니다. 계속해야 하기 때문에 엔터를 치세요.

[image7.png]

엔터를 치면 화면에 현재 진행하고 있는 상태를 알수 있게 메시지를 뿌려 줍니다.
화면이 잠시 멈추더라도 프롬프트가 나올 때 까지 잠시 기다리십시오.

화면이 진행되다가 아래 그림과 같이 시디를 넣으라는 메시지가 나오면 공 시디를 넣어서
엔터를 치면 시디가 구워 집니다.

[image8.png]

이런식으로 시디를 계속해서 넣어 주면 백업 시디가 워 집니다.

4        복구하기
1번 시디는 부팅 가능한 시디 이기 때문에 제일 먼저 1번 시디를 넣고 기다리거나 엔터를 치면 부팅이 됩니다.

그러면 루트 쉘이 나오고 여기서 다음과 같은 명령을 칩니다.
cd /etc/recovery
./start-restore.sh

그러면 스크립트가 알아서 복구를 해주고,  필요시 포맷을 할것인지 묻는 경우도 있으며 있때는 y를 눌러서 포맷을 합니다.
어느정도 복구가 되면 시디를 바꾸라고 메시지가 나옵니다.

그러면 2번시디, 3번시디 교환해주고 엔터를 치면 복구가 됩니다.
마지막으로 루트 셀이  성공적으로 했다고 나오면 리부팅을 합니다.

4.1        Make clean

현재 사용했던 로그나 정보를 지우고 다시할려면 make clean  을 해주면 새롭게 진행할수 있습니다.

(팁. usb)

마운트 하기
cd-rom 안에 무슨 파일이 있는가 확인을 하려면 다음과 같은 명령을 치면 시디롬 이 마운트되어 /mnt 밑에 시디롬의 내용을 확인할 수가 있다.

Mount /dev/scd0 /mnt

cd-writer 장치 확인하기
아래의 네모칸처럼 되어 있으면 cd-writer 기를 사용할수 있다.

[이미지\usb\image1.png]

아래와 같은 명령을 타이핑하면 usb-cdwriter 기에 대한 상세 정보를 알수 있습니다.
cdrecord -prcap -inq dev=0,0,0

시디 굽기
시디를 구울려면 구울려는 곳의 디렉토리를 이미지로 만들어야 한다.
이미지 만드는 방법은  쉘 상에서 mkisofs -o 디렉토리.iso 디렉토리 이다.

예) mkisofs -v -J -o k1c.iso k1c

이미지를 만들었으면 cdrecord 명령어를 이용해서 굽는다.
cdrecord -v -eject speed=2 dev=0,0,0  k1c.iso

시디 내용 지우기
cdrecord -dev=0,0,0 -blank=fast


시디 굽기
/home/k1c/public_html 과 /var/lib/mysql 를 백업하기

cd /tmp
mkdir imsi
cd /tmp/imsi

cp -a /home/k1c/public_html .
cp -a /var/lib/mysql .

cd /tmp

먼저 해당 디렉토리를 iso 로 묶는다.

mkisofs -v -J -o tmp.iso /tmp/imsi

iso 파일을 굽는다.

cdrecord -v -eject speed=4 dev=0,0,0  tmp.iso

--- 하드 디스크로 백업받기.

* 여분의 HDD로 백업하기 *

백업이란 불의의 사고에 대비하여 파일 또는 데이터베이스를 복사해 두는 행위를 말합니다.

대부분의 대형 컴퓨터를 운영하는 곳에서는 거의 필수적인 일이라고도 할 수 있습니다. 

물론 개인 컴퓨터 사용자들에게도 필수적이고도 중요한 일이지만 대부분의 경우 자주 무시

되는 경향이 있습니다.

여분의 HDD로 백업하는 방법은 가장 흔한 방법 중 하나라고 생각됩니다.

손쉽게 접할 수 있는 HDD를 매체로 하는 방법으로 그 방법은 다양한 방법들이 존재한다고 말할 수 있습니다.

그 중 제가 해본것들만 추려서 설명하겠습니다.


1. 필요한 부분만 백업하기

우선 백업을 받을 하드를 리눅스에 연결 하였다고 가정하겠습니다. ( /dev/hdb1 )

백업을 받을 하드를 연결하였으면 리눅스에서 사용하기 위해서는 마운트라를 과정을 거쳐야합니다.

다들 아시는거라 마운트에 대해서는 설명하지 않겠습니다.

# mount /dev/hdb1 [마운트할 디렉토리]

이런식으로 우선 마운트를 시킵니다.

그러면 이제 백업할려고 하는 부분들을 복사하시면 됩니다.

그 방법에는 cp나 tar와 gzip을 이용해서 편하게 이용하시면 됩니다. tar명령과 cp를 사용해 보신분이라면

쉽게 사용하실 수 있을거라 생각됩니다.

예를 들어 홈디렉토리를 백업할려고 한다면

# tar -zcvf home.tar.gz /home

# cp home.tar.gz /mnt/hdb1

이런식으로 하시면 되겠죠? 별로 어려운것이 없는 방법 중 하나입니다.


2. 통채로 백업하기

얼마전에 제가 써본 방법입니다.  비슷한 크기의 하드로 백업을 하는 경우입니다. 말 그대로 하드를 통채로

백업하는 방법이지요. 

저 같은 경우의 예를 들자면  L4 스위치에 물려서 서비스하는거 였는데 총 13개의 서버 중 한대만 유독 이상해서

새로 리눅스 깔아서 파티셔닝해서 ftp나 cp 머 이런걸로 백업할려고 하는 생각하니 시간도 오래걸릴꺼 같고 귀찮기도 해서

여러가지 방법을 찾다가 이 방법을 사용하였습니다.

dd 명령을 통해서 그냥 하드 째 밀어 버리는 방법을 사용하였습니다.

# dd if=/dev/sda of=/dev/sdb bs=4096

dd명령어로 한줄만 치고 커피 마시러 잠시 나가서 있다가 오니 어느새 완료가 되어있있고 부팅해서 테스트해보니

만족한 결과를 얻을 수 있었습니다.


dd 명령어에 대해서 알아보면

흔히 우리가 dd명령어를 보통 사용하는 경우는 부팅 디스켓을 만들기 위해서 사용하거나  아니면 리눅스의 부트 영역을

복사해서 윈도우 부트로더로 부팅할려고 하는 경우에 많이 사용합니다.

if = file
   표준 입력 대신에 file에서 지정한 것을 입력의 대상으로 합니다.
   위에서 제가 써던걸 보면 /dev/sda라는 장치를 표준 입력의 대상으로 지정한게 되겠죠

of = file
   표준 출력 대신에 file에서 지정한 곳을 출력의 대상으로 합니다.

bs = bytes
   한번에 bs에서 지정한 바이트씩 읽고 쓴다.

더  자세한 옵션들을 man dd해서 참고하시면 될것입니다.

정리해보면

dd 명령을 통해서 /dev/sda에서 /dev/sdb로 4096 bytes씩이 덤프해버리는 라는 말입니다.

생각보다 간단하면서 쉬운 명령입니다. :)


여분의 하드로 백업하는 방법은 워낙 다양하기 때문에 그중에서 제가 써본것들로만

원고를 쓸려고 하니 부족한 부분이 많군요.

--- find를 이용한 증분백업

앞에서 잠깐 tar에서 증분백업을 다루었는데 여기선 tar를 이용한 증분백업을 해본다.

증분백업은 시스템의 백업상태르르 최신 상태로 유지하기에 가장 좋은 방법이다. 예를 들어, 지난 24시간 동안 변경된 파일만 야간
백업작업을 하고, 지난주에 변경된 부분은 주간 백업, 전체 시스템은 월간 백업을 하는 형태이다.

앞에서 언급한 tar, cpio 도구를 이용해 증분 백업을 할 수 있다. 증분 백업을 만드는 첫번째는 특정 시간동안에 변경된 파일 목록을
만드는 것이다. 이런작업은 find로 쉽게 해결이 가능하다. 만약, 여러분이 특별한 백업 프로그램을 사용하고 있다면 이와 같은 작업은
필요치 않을 것이다. 백업 프로그램의 옵션을 설정하면 다음과 같이 증분백업을 해줄것이다.

예를 들어 지난 24시간 동안 변경된 파일의 목록을 만든다면 다음과 같은 명령을 사용하면 된다.

find / -mtime -1 \! -type d -print > /tmp/filelist.daily

[옵션 해석]
find의 첫째 인수는 시작할 디렉토리를 의미한다.(여기서는 루트 디렉토리이다.)
-mtime -1 옵션은 지난 24시간 동안 변경된 모든 파일을 찾으라는 옵션이다.

복잡해 보이는 \! -type d는 출력할 때 일부 불필요한 부분을 짤라내는 것으로 굳이 사용하지 않아도 된다. 여기서 find는
결과로 나온 파일 목록에서 디렉토리를 배재하라는 의미이다. !는 부정 연산자(여기서는 d타입의 파일을 배제하라 라는 의미)로
이 앞에 역슬래시를 넣어야 한다. 그렇지 않으면 셸은 이를 특수 문자로 인식하게 된다.

-print는 검색 결과에 맞는 모든 파일명을 표준 출력으로 출력하게 한다. 여기서는 나중에 사용하려고 표준 출력을 파일로 리다이렉트하여
저장하였다. 유사한 방법으로 지난 주에 변경한 모든 파일의 위치를 다음과 같이 얻을 수 있다.

find / -mtime -7 -print > /tmp/filelist.weekly

find 참고문)

만약, 이런 방법으로 find를 사용한다면 이 명령은 마운트된 모든 파일시스템을 돌아다닐 것이다. 예를 들어, cd-rom이 마운트 되어 있다면
cd-rom에 있는 파일도 찾을 것이다.(여러분 중엔 이런 실수로 cd-rom에 있는 것까지 백업하고 싶진 않을 것이다.) --prune 옵션을
사용하면 find 명령이 시스템 전체를 걸쳐 돌아다닐 때 특정 디렉토리를 배제하도록 한다. 아니면 첫째 인수를 /(루트 디렉토리) 대신
다른 것을 사용해  find 명령을 여러 번 실행할 수도 있다. 좀더 자세한 것은 find의 매뉴얼 페이지를 참조하도록 한다.

이제 백업 받을 파일의 목록을 만들었다. tar로 백업 받을 파일 목록을 갖고 있는 파일을 지정할 수 있다. 이런 옵션을 사용하기 앞서
사용자는 tar의 모든 옵션을 대시(-, 또는 하이픈이라고도 한다) 로 지정해서 확실히 구분할 수 있는 문법을 사용해야 한다. 예를 들어
/tmp/filelist.daily에 나타난 파일 목록을 /dev/rft0 장치로 백업 받으려면 다음과 같은 명령을 사용한다.

tar -cv -T /tmp/filelist.daily -f /dev/rft0

이제 짧은 셸 스크립트를 작성해서 파일 목록을 만들고 tar를 이용해 백업 받는 것을 자동화 할 수 있다. 드라이브에 있는 테잎에 백업을
만들기 위해 특정 밤 시간대에 스크립트가 실행되도록 cron을 이용할 수 있다.(cron에 관해선 전문 서적을 참고하기 바란다, 한빛미디어
유닉스파워툴) 또한 주 단위 백업과 월 단위 백업을 위해 이와 비슷한 스크립트를 작성할 수 있다..

참고서적 : 러닝 리눅스 288-289 페이지.(밝혀둔다. 필자가 자료 준비가 많지 못해 책과 같은 부분이 대부분이라 식상할 것이다. 이부분에 대해
양해를 부탁한다)

find 테크닉..

파일 크기로 찾기...

find -size 1234c -print

하면 1234 바이트의 파일을 찾을 수 있다.

크기 앞에 + 를 붙이면 보다 큰.. - 를 붙이면 보다 작다라는 표시이다.

소유자와 그룹으로 검색하기

find . -user root -perm -4000 -print

그리고 이름이나 그룹대신에 uid나 gid를 사용할 수 있다.

(추가부분 : 따로 원고 복사.)

끝.

원고정리 : 서치아이

댓글 없음:

댓글 쓰기