8. AMANDA를 이용한 실전 백업

몇 가지 가정을 하고 실제 백업을 해 보자.

파일서버와 테잎서버는 서로 호스트네임을 알 수 있도록 /etc/hosts 파일에 기록해 두는 것이 좋다.

8.1. 실전 백업용 /etc/amanda/amanda.conf 파일

        mailto "styoo"

        dumpuser "styoo"

        etimeout 3600
        dtimeout 3600

        tapedev "/dev/nst0"

        tpchanger "mtx-changer"

        tapetype IBM-LTO

        columnspec "HostName=0:13,Disk=1:40,OrigKB=1:9,OutKB=1:9,DumpRate=1:7,TapeRate=1:7"

        holdingdisk hd1 {
            comment "main holding disk"
            directory "/backup-image/Image"
            use -10Mb
            chunksize 0
            }

        define tapetype IBM-LTO {
        comment "just produced by tapetype program"
        length 101376 mbytes
        filemark 0 kbytes
        speed 13500 kps
        }

        define dumptype global {
            program "GNUTAR"
            compress server fast
            index yes
            record yes
        }        
      

autoloader를 구동하는데 사용할 mtx-changer 스크립트는 mtx 패키지에 포함되어 있는 것을 사용하였으나, IBM 3581 autoloader에 적용하기에는 일부 작동에 문제가 있어 필자가 일부를 수정하였다. 수정된 스크립트는 에 있으니 10절을 참고하기 바란다.

8.2. 실전 백업용 /etc/amanda/SpaceWar/amanda.conf 파일

        includefile "/etc/amanda/amanda.conf"

        org "SpaceWar"

        inparallel 4

        runtapes 2

        dumpcycle 4 weeks

        runspercycle 4

        tapecycle 4 tapes

        maxdumps 4

        labelstr "^SpaceWar-[0-9][0-9][0-9]*$"

        infofile "/var/lib/amanda/SpaceWar/curinfo"
        logdir   "/var/log/amanda/SpaceWar/log"
        indexdir "/var/lib/amanda/SpaceWar/index"
        tapelist "/var/lib/amanda/SpaceWar/tapelist"

        define dumptype always-full {
            global
            comment "Full dump of this filesystem always"
            priority high
            dumpcycle 0
        }

        define dumptype incr-only {
            global
            comment "Incremental dump only"
            priority high
            strategy nofull
        }
      

8.3. 실전 백업용 /etc/amanda/SpaceWar/disklist 파일

        localhost   /SpaceWar1/Program-Sources      always-full
        localhost   /SpaceWar1/Graphic-Sources      always-full
        gmfs2       /SpaceWar2/Prototype            always-full
        gmfs2       /SpaceWar2/Schedule             always-full
      

/Spacewar1의 하위 디렉토리는 윈도우 2000 서버인 gmfs1에 있으므로 samba를 이용하여 백업해야 한다. amanda는 윈도우 머신의 데이타를 백업하기 위해 smbclient를 사용하여 백업을 진행한다. 그러나 그렇게 하지 않고, 윈도우의 디스크를 테잎서버에 SMB 마운트하여 마치 로컬디스크를 백업하듯이 할 수도 있다. 여기서는 SMB 마운트하여 로컬디스크를 백업하듯이 할 것이다. samba를 이용하여 백업을 진행한다면, localhost를 gmfs1으로 바꾸고 /etc/amandapass 파일에 공유이름과 해당 공유를 액세스 할 수 있는 사용자 그리고 암호를 적어주어야 한다. 그 포맷은 Amanda man page를 참고하기 바란다.

8.4. 백업 시작

백업을 진행할 사용자는 styoo이며 관련된 파일에 대한 쓰기 권한이 있어야 함은 두 말할 나위도 없다. /etc/amanda디렉토리 및 그 하위 디렉토리와 파일에 대한 읽기쓰기 권한이 styoo에게 있어야 할 것이다. 뿐만 아니라, /var/lib/amanda 디렉토리 및 그 하위의 파일들 그리고 /var/log/amanda 디렉토리 및 그 하위의 파일들에 대한 읽기쓰기 권한이 필요하다. 또한, /dev/nst0, /dev/sg0에 대한 읽기쓰기 권한도 당연히 있어야 할 것이다.

이제, 백업을 진행해 보자. Amanda를 설치하고 위와 같이 설정을 끝마친 후 Amanda 명령어를 이용하여 백업을 진행할 때 흔히 발생할 수 있는 에러 상황도 함께 취급할 것이다.

테잎 장치에 빈 테잎을 하나 넣고 amlabel 명령으로 테잎에 라벨을 붙이자. -f 옵션을 붙여서 강제로 라벨을 써 넣도록 하자.
        $ amlabel -f SpaceWar SpaceWar-001
        rewinding, reading label, not an amanda tape
        rewinding, writing label SpaceWar-001, checking label
        amlabel: couldn't write tapelist: No such file or directory
      
tapelist 파일이 없다고 불평을 한다. 이것은 /var/lib/amanda/SpaceWar 디렉토리가 없기 때문이니 /var/lib/amanda/ 디렉토리에 SpaceWar 디렉토리를 만들어 주면 된다. 이렇게 해 주면 amlabel 명령이 그 밑에 tapelist 파일을 자동으로 만든다.

테잎에 라벨을 써 넣은 후, amadmin 명령으로 사용할 테잎 목록을 살펴보자.
        $ amadmin SpaceWar tape
        The next Amanda run should go onto a new tape.
        The next Amanda run should go onto a new tape.
      
amlabel 명령으로 SpaceWar-004까지 테잎에 라벨을 붙여 보자. 그리고서 /var/lib/amanda/SpaceWar/tapelist 파일을 보면 다음과 같이 되어 있을 것이다.
        0 SpaceWar-004 reuse
        0 SpaceWar-003 reuse
        0 SpaceWar-002 reuse
        0 SpaceWar-001 reuse 
      
amadmin 명령으로 사용할 테잎 목록을 다시 한 번 살펴보자.
        $ amadmin SpaceWar tape
        The next Amanda run should go onto tape SpaceWar-001 or a new tape.
        The next Amanda run should go onto tape SpaceWar-002 or a new tape.
      
runtapes과 tapecycle의 값에 따라서 그리고 tapelist 파일의 내용에 따라서 위 명령의 결과는 달라진다. 한 번 체크해 보기 바란다.

amcheck 명령으로 설정에 이상이 없는지 확인해 보자. 데비안의 경우, amanda 명령어들이 /usr/sbin 디렉토리에 있는데 amcheck 명령의 실행 권한이 root와 backup에게만 있을 수도 있으니 실행 권한을 추가해 주어야 할 것이다.
        $ amcheck SpaceWar
        ERROR: program /usr/lib/amanda/planner: not executable
        Holding disk /backup-image/Image: 6636356 KB disk space available, using 6626116 KB
        ERROR: log dir /var/log/amanda/SpaceWar: not writable
        NOTE: skipping tape-writable test
        Tape SpaceWar-001 label ok
        NOTE: info dir /var/lib/amanda/SpaceWar/curinfo: does not exist
        NOTE: it will be created on the next run
        NOTE: index dir /var/lib/amanda/SpaceWar/index: does not exist
        Server check took 0.010 seconds

        Amanda Backup Client Hosts Check
        --------------------------------
        ERROR: gmfs2: [access as styoo not allowed from styoo@backupsvr] amandahostsauth failed
        WARNING: localhost: selfcheck request timed out.  Host down?
        Client check: 2 hosts checked in 30.018 seconds, 2 problems found
      
몇 가지 에러와 경고 메세지가 보인다. 하나씩 살펴보자.

amcheck 명령으로 이상이 없는 것을 확인하였으면, 이제 백그라운드로 amdump 명령을 실행시켜 백업을 해 보자.
        $ amdump SpaceWar &
      
amstatus 명령으로 백업 상황을 확인해 보자.
        $ amstatus SpaceWar

        Using /var/log/amanda/SpaceWar/amdump from 토  9월 14 14:51:50 KST 2002

        localhost:/SpaceWar1/Program-Sources                getting estimate
        localhost:/SpaceWar1/Graphic-Sources                getting estimate
        gmfs2:/SpaceWar2/Prototype                          getting estimate
        gmfs2:/SpaceWar2/Schedule                           getting estimate



        SUMMARY          part     real estimated
                          size      size
        partition       :   4
        estimated       :   0                  0k
        failed          :   0                  0k           (  0.00%)
        wait for dumping:   0                  0k           (  0.00%)
        dumping to tape :   0                  0k           (  0.00%)
        dumping         :   0        0k        0k (  0.00%) (  0.00%)
        dumped          :   0        0k        0k (  0.00%) (  0.00%)
        wait for writing:   0        0k        0k (  0.00%) (  0.00%)
        writing to tape :   0        0k        0k (  0.00%) (  0.00%)
        failed to tape  :   0        0k        0k (  0.00%) (  0.00%)
        taped           :   0        0k        0k (  0.00%) (  0.00%)
        all dumpers active
        taper idle
      
백업할 디렉토리의 용량을 계산하고 있는 중이다. 잠시 후에 다시 한 번 amstatus 명령을 실행시켜보자.
        $ amstatus SpaceWar
          Using /var/log/amanda/SpaceWar/amdump from 토  9월 14 15:06:33 KST 2002

          localhost:/SpaceWar1/Program-Sources     0 no estimate
          localhost:/SpaceWar1/Graphic-Sources     0 no estimate
          gmfs2:/SpaceWar2/Prototype               0 [dump larger than tape, but cannot incremental dump new disk]
          gmfs2:/SpaceWar2/Schedule                0 14585k dumping     4832k ( 33.13%) (15:06:36)

          SUMMARY          part     real estimated
                          size      size
          partition       :   4
          estimated       :   2              14585k
          failed          :   3                  0k           (  0.00%)
          wait for dumping:   0                  0k           (  0.00%)
          dumping to tape :   0                  0k           (  0.00%)
          dumping         :   1     4832k    14585k ( 33.13%) (  6.42%)
          dumped          :   0        0k        0k (  0.00%) (  0.00%)
          wait for writing:   0        0k        0k (  0.00%) (  0.00%)
          writing to tape :   0        0k        0k (  0.00%) (  0.00%)
          failed to tape  :   0        0k        0k (  0.00%) (  0.00%)
          taped           :   0        0k        0k (  0.00%) (  0.00%)
          3 dumpers idle  : start-wait
          taper idle
          network free kps:      270
          holding space   :  6611460k ( 99.78%)
      
위의 결과를 보면, gmfs2의 디렉토리 중에서 /SpaceWar2/Schedule은 뭔가가 진행되고 있는데, /SpaceWar2/Prototype은 dump가 테잎보다 크다고 말을 하고 있다. 이것은 /SpaceWar2/Prototype의 용량이 크다기 보다는 각 디렉토리에 대한 백업 용량을 모두 합산한 결과 백업할 용량이 <테잎 한 개의 용량 X runtapes의 값> 보다 크다는 뜻이다. runtapes의 값을 증가 시키면 대부분 해결될 것이다. 물론, 실제로 디렉토리 하나의 백업 용량이 테잎 한 개의 용량 보다 클 수도 있다. 그러나 Amanda는 이를 문제 삼지는 않는다. 그렇다고 어떤 디렉토리에 대한 백업이미지가 테잎 하나의 크기 보다 크다고 해서 다음 테잎에 이어쓸 수는 없다. Amanda는 다음 테잎에 이어쓰기를 지원하지 않음을 명심하기 바란다. Amanda 패키지의 FAQ 문서를 참고하기 바란다.

그리고 윈도우 서버 gmfs1의 디렉토리를 SMB 마운트한 디렉토리는 "no estimate" 라고 되어 있다. 이 문제는 대개는 퍼미션 문제이다. Amanda 패키지를 빌드할 때 styoo라는 사용자로 옵션을 주었는데, 막상 실행할 때는 엉뚱한 사용자로 amdump를 실행했기 때문이다. 제공되는 패키지 그대로 설치했다면 root 또는 backup 사용자의 권한으로 백업을 실행해야 할 것이다.

웬만한 에러 상황은 체크를 했으니 백업이 잘 완료되었다고 하자. 그리고 1 개의 테잎을 백업에 사용했다고 하자. 이제 다시 한 번 amadmin 명령으로 사용할 수 있는 테잎 목록을 살펴보자.
        $ amadmin SpaceWar tape
	The next Amanda run should go onto tape SpaceWar-002 or a new tape.
	The next Amanda run should go onto tape SpaceWar-003 or a new tape.
      
다음 백업에는 SpaceWar-002 테잎부터 사용하게 될 것이다. 다음 번(두번째) 백업에도 1 개의 테잎을 사용한다면 세번째 백업에는 SpaceWar-003 테잎을 사용할 것이다. 그 다음은 SpaceWar-004, 그 다음은? 그렇다. 다시 돌아와서 SpaceWar-001을 사용하게 된다. 다섯번째 백업에 들어가기 전에 아래와 같이 amadmin 명령으로 SpaceWar-001 테잎을 백업에 사용하지 못하게 해 놓았다면, SpaceWar-002 테잎을 사용할 것이다.
        amadmin SpaceWar no-reuse SpaceWar-001
      
테잎 순서에 대한 더 자세한 것은 amanda를 사용하면서 익히기 바란다.

백업된 데이타를 테잎에 쓰는 중에 에러가 발생한다면 다음 테잎에 데이타를 다시 써 넣으려 할 것이다. 그러나 사용할 다음 테잎이 없다면 백업 데이타는 로컬디스크에 남게되며 백업은 종료된다. 이런 경우에는 새로운 테잎을 준비하여 라벨을 붙인 다음, amflush 명령으로 로컬디스크의 데이타를 테잎에 옮겨 놓을 수 있다.
        $ amflush SpaceWar
      
테잎으로 데이타를 옮겨 쓴 다음에는 amcleanup 명령으로 청소를 해 주어야 한다.
        $ amcleanup SpaceWar
      

8.5. 복원하기

복원을 해 보자. 복원은 amrecover와 amrestore 두 가지를 이용할 수 있다. 여기서는 amrecover를 사용하기로 한다. 복원은 root의 권한으로 실행되어야 한다.

gmfs2의 /SpaceWar2/Schedule 디렉토리 밑에 있던 200206-Prog 이란 디렉토리와 200206-Mail 디렉토리를 하위 디렉토리를 포함하여 모두 복원한다고 하자. /tmp에 복구한다고 가정하자.

        # cd /tmp
        # amrecover SpaceWar -d /dev/nst0
      
위와 같이 명령을 주면 다음과 같은 프롬프트가 나타날 것이다.
amrecover>
또는 아래와 같은 에러메세지가 나올 수도 있다.
	220 backupsvr AMANDA index server (2.4.2p2) ready.
	500 Access not allowed: [access as styoo not allowed from root@localhost] amandahostsauth failed
      
/etc/amandahosts에 아래와 같이 root를 등록한다.
localhost root
에러가 제거 되었으면 다시 amrecover를 실행시켜 /SpaceWar2/Schedule이 있는 호스트를 지정하고 복원할 최상위 디렉토리를 지정한다.
	amrecover> sethost gmfs2
	amrecover> setdisk /SpaceWar2/Schedule
      
복원할 하위 디렉토리를 지정한다.
	amrecover> cd 200206-Prog
	amrecover> add *
	amrecover> cd ..
	amrecover> cd 200206-Mail
	amrecover> add *
      
물론, 특정 파일만 복원할 수도 있다. 해당 파일이 있는 디렉토리로 이동해서 파일을 추가해 주면 될 것이다. 복원 명령을 내린다.
amrecover> extract
필요한 테잎에 대한 정보를 알려줄 것이다. 맞으면 y라고 답한다. 그러면 테잎을 로드한 후 처음부터 읽어면서 해당 파일을 하나씩 복원할 것이다.

여기까지는 테잎서버의 테잎 장치를 이용하여 복원하는 방법이다. 그러나 이런 경우가 있을 수도 있다. 미디오 호환이 가능한 두 대의 테잎 장치를 각각 다른 리눅스 서버에 장착하여 한 대는 백업 전용으로, 다른 한 대는 복원 전용으로 사용하고자 하는 경우도 있을 것이다. 이제 백업 전용 서버에서 백업한 것을 복원 전용 서버에서 백업하는 경우를 살펴보자.

백업 전용 서버의 호스트네임은 backupsvr라 하고, 복원 전용 서버의 호스트 네임은 restoresvr이라 하자. 그리고 /SpaceWar2/Schedule/tmp에 복원한다고 가정하자.

	# cd /tmp
	# amrecover SpaceWar -s backupsvr -d /dev/nst0
      
-s 옵션으로 backupsvr을 index server로 지정하였다. /SpaceWar2/Schedule의 백업에 대한 index는 backupsvr에 있기 때문이다. 그 뒤의 과정은 앞서의 복원 과정과 동일하다.

이것으로 복원에 대한 것도 대략 알아 보았다. 더 자세한 것은 Amanda man page를 참고하면서 그리고 실제로 사용하면서 하나씩 익히는 것이 최선의 방법인 듯 싶다.

8.6. 증분 백업

dump라는 백업 프로그램은 0에서 9까지의 백업 레벨을 지원한다. Amanda가 내부적으로 사용하는 백업 프로그램은 dump 또는 tar이다. Amanda도 0에서 9까지의 백업 레벨을 제공하며 백업 레벨은 사용자의 설정을 근거로 Amanda가 스스로 결정한다.

백업 레벨 0은 전체백업을 의미하며 백업 레벨 1은 전체 백업 이후 변경된 내용에 대한 백업을 뜻한다. 백업 레벨 2는 백업 레벨 1 이후 변경된 내용에 대한 백업이다. 나머지 백업 레벨도 비슷하게 생각하면 될 것이다.

필자는 한 달에 1회 전체 백업을 하고 주간 단위로 레벨 1의 백업을 실시한다. 9월 첫째 일요일에 전체 백업을 실시했다면 둘째 일요일에 백업할 내용은 전체 백업 이후 변경, 추가된 파일들일 것이다. 세번째 일요일에 백업할 내용도 레벨 1의 백업이므로 전체 백업 이후 변경, 추가된 파일들일 것이다. 따라서 세번째 일요일에 증분 백업을 하게되면 두번째 일요일에 증분 백업한 내용은 필요없게 되며 그 때 사용한 테잎은 재활용이 가능하게 된다.

강제로 레벨 1의 백업을 실시하기 위해서는 8.2절에서 정의한 dumptype 중에서 incr-only를 사용하면 된다.
        localhost   /SpaceWar1/Program-Sources      incr-only
        localhost   /SpaceWar1/Graphic-Sources      incr-only
        gmfs2       /SpaceWar2/Prototype            incr-only
        gmfs2       /SpaceWar2/Schedule             incr-only
      

이제 amcheck 명령으로 이상 유무를 확인한 후, amdump 명령으로 백업을 실행시키면 될 것이다.

8.7. 테잎에 바로 쓰기

Amanda는 백업을 진행하는 중에 로컬디스크(holdingdisk)의 공간이 부족하면 공간에 여유가 생길 때까지 일부 디렉토리에 대한 백업을 일시 중단하고 있다가, 공간에 여유가 생기면 그때 다시 백업을 진행한다. 이때 시간의 지연으로 인해 백업에 걸리는 시간이 늘어나게 된다. 이 경우는 일부 디렉토리를 테잎에 바로 쓰는 것이 유리할 수도 있다. writetotape이라는 dumptype을 정의하고 테잎에 바로 쓰기를 원하는 디렉토리의 dumptype을 writetotape으로 지정하면 될 것이다.
        define dumptype wtritetotape {
            global
            comment "write directly to tape"
            priority high
	    dumpcycle 0
	    holdingdisk no
        }
      
writetotape이 적용된 disklist 파일의 예는 아래와 같다.
        localhost   /SpaceWar1/Program-Sources      writetotape
        localhost   /SpaceWar1/Graphic-Sources      always-full
        gmfs2       /SpaceWar2/Prototype            always-full 
        gmfs2       /SpaceWar2/Schedule             always-full
      

8.8. 필요없는 파일을 백업에서 제외하려면

백업할 필요가 없는 파일이 있을 수도 있다. 이 때는 dumptype에 exclude 또는 exclude list를 지정하여 해결할 수 있다. exclude list에 대해 알아보자. dumptype은 아래와 같은 모양이 될 것이다.
        define dumptype always-full {
            global
            comment "write directly to tape"
            priority high
            dumpcycle 0
	    exclude list "/etc/amanda/SpaceWar/exclude-files"
        }
      
exclude-files의 내용은 다음과 같이 작성할 수 있다.
        AUTOEXEC.BAT
        NTDETECT.COM
        arcsetup.exe
        ntldr
        WINNT
        Documents and Settings
        System Volume Information
        arcldr.exe
        bootfont.bin
        RECYCLED
        Recycled
        *.SYS
	*.sys
	*.ini