Friday, April 13, 2018

CentOS 6.6 리눅스 관리] 11.2 아카이브, 압축 및 백업/복구 - mhVTL 활용


안녕하세요. 썬구루입니다. 이전 게시물에서 CentOS 7.3에 mhVTL을 설치하는 방법에 대해 알아보았습니다. 이를 여기에서 사용하는 이유는 보통 리눅스나 유닉스 책에서 백업을 할 때 파일시스템 기반 파일로 백업하는 예가 많습니다. 하지만 실무에서 백업은 아래와 같은 방법으로 행해지고 있습니다.

  ▶ 파일시스템 기반에 파일로 백업
  ▶ 단일 테이프 디바이스를 활용한 테이프 미디어 백업 (특히 DAT 또는 LTO 드라이브)
  ▶ 테이프 라이브러리(PTL)와 백업 솔루션을 활용한 테이프 미디어 백업
  ▶ 가상 테이프 라이브러리(VTL)와 백업 솔루션을 활용한 가상 테이프 미디어 백업


저가 유닉스 엔지니어를 할 때에는 테이프 드라이브와 매체를 제어하는 명령을 테스트하기 위해 수십만 원을 주고 단일 테이프 디바이스와 DDS2 미디어를 산 적이 있습니다. 지금은 너무 오래되어 고장 나서 버렸지만 말이죠. 요즘은 그런 물리적 디바이스가 없어도 할 수 있는 방법이 있습니다. 드라이브와 미디어를 제어하는 방법을 알기 위해 그리고 이를 활용한 백업/복구 방법을 알기 위해 mhVTL을 사용하는 것입니다.

저가 공부할 때 이런 프로그램에 나왔어야 하는 것인데.. 좀 아쉬움이 남긴 하네요. 자.. 그럼 관련 디바이스 확인하는 방법과 제어하는 방법에 대해 알아보도록 하겠습니다.


■ 체인저(Changer)와 테이프 드라이브(Tape Drive) 확인

아래와 같이 lsscsi 명령을 사용하면 SCSI 디바이스의 모델과 디바이스 파일 등에 대한 정보를 확인할 수 있다.

[root@centos64 ~]# lsscsi -g
[0:0:0:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sda   /dev/sg0
[2:0:0:0]    cd/dvd  NECVMWar VMware IDE CDR10 1.00  /dev/sr0   /dev/sg1
[3:0:0:0]    mediumx STK      L700             0105  /dev/sch0  /dev/sg10
[3:0:1:0]    tape    IBM      ULT3580-TD5      0105  /dev/st0   /dev/sg2
[3:0:2:0]    tape    IBM      ULT3580-TD5      0105  /dev/st1   /dev/sg3
[3:0:3:0]    tape    IBM      ULT3580-TD4      0105  /dev/st2   /dev/sg4
[3:0:4:0]    tape    IBM      ULT3580-TD4      0105  /dev/st3   /dev/sg5
[3:0:8:0]    mediumx STK      L80              0105  /dev/sch1  /dev/sg11
[3:0:9:0]    tape    STK      T10000B          0105  /dev/st4   /dev/sg6
[3:0:10:0]   tape    STK      T10000B          0105  /dev/st5   /dev/sg7
[3:0:11:0]   tape    STK      T10000B          0105  /dev/st6   /dev/sg8
[3:0:12:0]   tape    STK      T10000B          0105  /dev/st7   /dev/sg9
You have mail in /var/spool/mail/root
[root@centos64 ~]# 

위 결과 내용을 보면 STK(StorageTek) L700과 L80 테이프 라이브러리가 있는 것을 확인할 수 있다. L80은 80 개까지 테이프 미디어를 보관 운영할 수 있는 백업 라이브러리이다. L700은 대략 최대 700개(실제 678개)까지 테이프를 장착할 수 있다. 아래 그림과 같은 것을 아마 과학 영화에서 한 번쯤 보신 분들도 있을 것이다.

로봇 암(Robot Arm)이 지나다니면서 슬롯(Slot)에 삽입되어 있는 미디어를 빼내어 드라이브에 삽입하는.. 그런 장면... 테이프 라이브러리는 미디어를 이동시킬 수 있는 하나 이상의 체인저(Changer)와 테이프 드라이브가 보통 2개 이상 장착시킬 수 있다.


lsscsi -g 명령에서 아래 내용은 L700과 L80 테이프 라이브러리의 체인저를 나타낸다.

[3:0:0:0]    mediumx STK      L700             0105  /dev/sch0  /dev/sg18
[3:0:8:0]    mediumx STK      L80              0105  /dev/sch1  /dev/sg19

lsscsi -g 명령에서 아래 내용은 L700에 장착된 테이프 드라이브를 나타낸다. 초록색으로 표시된 키워드로 인터넷 검색을 하면 관련된 사진을 확인할 수 있다.

[3:0:1:0]    tape    IBM      ULT3580-TD5      0105  /dev/st0   /dev/sg10
[3:0:2:0]    tape    IBM      ULT3580-TD5      0105  /dev/st1   /dev/sg11
[3:0:3:0]    tape    IBM      ULT3580-TD4      0105  /dev/st2   /dev/sg12
[3:0:4:0]    tape    IBM      ULT3580-TD4      0105  /dev/st3   /dev/sg13

아래 명령을 사용하면 디바이스에 대한 좀 더 상세한 정보를 확인할 수 있다.

[root@centos64 ~]# lsscsi -c -t [3:0:0:0]
Attached devices:
Host: scsi3 Channel: 00 Target: 00 Lun: 00
  Vendor: STK      Model: L700             Rev: 0105
  Type:   Medium Changer                   ANSI SCSI revision: 05
[root@centos64 ~]#
[root@centos64 ~]# lsscsi -c -t [3:0:1:0]
Attached devices:
Host: scsi3 Channel: 00 Target: 01 Lun: 00
  Vendor: IBM      Model: ULT3580-TD5      Rev: 0105
  Type:   Sequential-Access                ANSI SCSI revision: 05
[root@centos64 ~]# 




■ mtx 명령

mtx 명령은 SCSI 미디어 체인저(Changer)를 제어하기 위해 사용되는 명령이다. 다시 말해 체인저를 제어하여 슬롯에 있는 백업 테이프를 드라이브에 넣거나 뺄 수 있다.

1). 명령형식

mtx [ -f SCSI Generic Device ] COMMAND [ command ... ]

2). COMMAND

체인저(Changer)에 내려질 명령을 나타낸다.

Sl_num : Slot number
Drv_num : Drive number

Command
내 용
status
 체인저, 드라이브, 슬롯에 대한 상태 정보를 보여준다.
load Sl_num Drv_num
 특정 슬롯에 있는 테이프를 특정 드라이브로 옮기기 위해 사용한다.
unload Sl_num Drv_num
 특정 드라이브에 있는 테이프 빼내어 특정 슬롯으로 옮기기 위해 사용한다.
inquiry
 디바이스에 대한 정보를 확인하기 위해 사용한다. ( Product Type, Vendor ID, Product ID 등)
inventory
 체인저가 이동하면서 슬롯에 있는 테이프 변동사항이 있는지 확인하고 정보 업데이트를 하기 위해  사용.
position Sl_num
 체인터를 특정 슬롯에 위치시키기 위해 사용한다. 

3). 예제

아래는 L700에 있는 체인저, 드라이브, 슬롯에 있는 테이프 미디어 정보를 확인하기 위해 실행한 명령이다. 미디어 측면에는 이를 구분하기 위한 바코드가 붙어 있는데 E01001L4는 바코드 번호이다.

[root@centos64 ~]# mtx -f /dev/sg10 status

  Storage Changer /dev/sg18:4 Drives, 43 Slots ( 4 Import/Export )
Data Transfer Element 0:Empty
Data Transfer Element 1:Empty
Data Transfer Element 2:Empty
Data Transfer Element 3:Empty
      Storage Element 1:Full :VolumeTag=E01001L4                     
      Storage Element 2:Full :VolumeTag=E01002L4                     
      Storage Element 3:Full :VolumeTag=E01003L4                     
      Storage Element 4:Full :VolumeTag=E01004L4                     
      Storage Element 5:Full :VolumeTag=E01005L4                     
      Storage Element 6:Full :VolumeTag=E01006L4                     
      Storage Element 7:Full :VolumeTag=E01007L4                     
      Storage Element 8:Full :VolumeTag=E01008L4                     
      Storage Element 9:Full :VolumeTag=E01009L4                     
      Storage Element 10:Full :VolumeTag=E01010L4                     
      Storage Element 11:Full :VolumeTag=E01011L4                     
      Storage Element 12:Full :VolumeTag=E01012L4                     
      Storage Element 13:Full :VolumeTag=E01013L4                     
      Storage Element 14:Full :VolumeTag=E01014L4                     
      Storage Element 15:Full :VolumeTag=E01015L4                     
      Storage Element 16:Full :VolumeTag=E01016L4                     
      Storage Element 17:Full :VolumeTag=E01017L4                     
      Storage Element 18:Full :VolumeTag=E01018L4                     
      Storage Element 19:Full :VolumeTag=E01019L4                     
      Storage Element 20:Full :VolumeTag=E01020L4                     
      Storage Element 21:Empty
      Storage Element 22:Full :VolumeTag=CLN101L4                     
      Storage Element 23:Full :VolumeTag=CLN102L5                     
      Storage Element 24:Empty
      Storage Element 25:Empty
      Storage Element 26:Empty
      Storage Element 27:Empty
      Storage Element 28:Empty
      Storage Element 29:Empty
      Storage Element 30:Full :VolumeTag=F01030L5                     
      Storage Element 31:Full :VolumeTag=F01031L5                     
      Storage Element 32:Full :VolumeTag=F01032L5                     
      Storage Element 33:Full :VolumeTag=F01033L5                     
      Storage Element 34:Full :VolumeTag=F01034L5                     
      Storage Element 35:Full :VolumeTag=F01035L5                     
      Storage Element 36:Full :VolumeTag=F01036L5                     
      Storage Element 37:Full :VolumeTag=F01037L5                     
      Storage Element 38:Full :VolumeTag=F01038L5                     
      Storage Element 39:Full :VolumeTag=F01039L5                     
      Storage Element 40 IMPORT/EXPORT:Empty
      Storage Element 41 IMPORT/EXPORT:Empty
      Storage Element 42 IMPORT/EXPORT:Empty
      Storage Element 43 IMPORT/EXPORT:Empty

[root@centos64 ~]#

아래는 각 디바이스에 대한 정보를 확인하기 위해 사용한 명령이다.

[root@centos64 ~]# mtx -f /dev/sg10 inquiry
Product Type: Medium Changer
Vendor ID: 'STK     '
Product ID: 'L700            '
Revision: '0105'
Attached Changer API: No
[root@centos64 ~]#
[root@centos64 ~]# mtx -f /dev/sg0 inquiry
Product Type: Disk Drive
Vendor ID: 'VMware, '
Product ID: 'VMware Virtual S'
Revision: '1.0 '
Attached Changer API: No
[root@centos64 ~]# 

아래는 슬롯 1번에 있는 테이프 미디어를 드라이브 0번으로 이동시키는 명령이다.

[root@centos64 ~]# mtx -f /dev/sg10 status | grep -E "Data|VolumeTag"| head
Data Transfer Element 0:Empty
Data Transfer Element 1:Empty
Data Transfer Element 2:Empty
Data Transfer Element 3:Empty
      Storage Element 1:Full :VolumeTag=E01001L4                         
      Storage Element 2:Full :VolumeTag=E01002L4                         
      Storage Element 3:Full :VolumeTag=E01003L4                         
      Storage Element 4:Full :VolumeTag=E01004L4                         
      Storage Element 5:Full :VolumeTag=E01005L4                         
      Storage Element 6:Full :VolumeTag=E01006L4                         
[root@centos64 ~]#
[root@centos64 ~]# mtx -f /dev/sg10 load 1 0
Loading media from Storage Element 1 into drive 0...done
[root@centos64 ~]#
[root@centos64 ~]# mtx -f /dev/sg10 status | grep -E "Data|VolumeTag"| head
Data Transfer Element 0:Full (Storage Element 1 Loaded):VolumeTag = E01001L4                         Data Transfer Element 1:Empty
Data Transfer Element 2:Empty
Data Transfer Element 3:Empty
      Storage Element 2:Full :VolumeTag=E01002L4                         
      Storage Element 3:Full :VolumeTag=E01003L4                         
      Storage Element 4:Full :VolumeTag=E01004L4                         
      Storage Element 5:Full :VolumeTag=E01005L4                         
      Storage Element 6:Full :VolumeTag=E01006L4                         
      Storage Element 7:Full :VolumeTag=E01007L4                         
[root@centos64 ~]# 

아래는 드라이브 0번에 있는 테이프 미디어를 슬롯 0으로 이동시키는 명령이다.

[root@centos64 ~]# mtx -f /dev/sg10 unload 1 0
Unloading drive 0 into Storage Element 1...done
[root@centos64 ~]#
[root@centos64 ~]# mtx -f /dev/sg10 status | grep -E "Data|VolumeTag"| head
Data Transfer Element 0:Empty
Data Transfer Element 1:Empty
Data Transfer Element 2:Empty
Data Transfer Element 3:Empty
      Storage Element 1:Full :VolumeTag=E01001L4                         
      Storage Element 2:Full :VolumeTag=E01002L4                         
      Storage Element 3:Full :VolumeTag=E01003L4                         
      Storage Element 4:Full :VolumeTag=E01004L4                         
      Storage Element 5:Full :VolumeTag=E01005L4                         
      Storage Element 6:Full :VolumeTag=E01006L4                         
[root@centos64 ~]# 




■ mhVTL 시작/종료

mhVTL에 관련된 프로세스들은 쉘 스크립트 파일을 통해 시작 또는 종료시킬 수 있다. 아래는 mhVTL 관련 모듈과 프로세스들을 확인하는 명령이다.

[root@centos64 ~]# lsmod | grep -i vtl
mhvtl                  21952  30
[root@centos64 ~]#
[root@centos64 ~]# ps -ef | grep -i vtl
vtl       2714     1  0 02:47 ?        00:00:00 vtltape -q 11 -v
vtl       2717     1  0 02:47 ?        00:00:00 vtltape -q 12 -v
vtl       2721     1  0 02:47 ?        00:00:00 vtltape -q 13 -v
vtl       2724     1  0 02:47 ?        00:00:00 vtltape -q 14 -v
vtl       2727     1  0 02:47 ?        00:00:00 vtltape -q 31 -v
vtl       2730     1  0 02:47 ?        00:00:00 vtltape -q 32 -v
vtl       2741     1  0 02:47 ?        00:00:00 vtltape -q 33 -v
vtl       2746     1  0 02:47 ?        00:00:00 vtltape -q 34 -v
vtl       2752     1  0 02:47 ?        00:00:00 vtllibrary -q 10 -v
vtl       2755     1  0 02:47 ?        00:00:00 vtllibrary -q 30 -v
root     29335 28966  0 05:01 pts/1    00:00:00 grep -i vtl
[root@centos64 ~]# 

1). mhVTL 종료

아래와 같은 명령을 사용하면 mhVTL 관련된 프로세스를 내릴 수 있다. ( /etc/init.d/mhvtl stop )

[root@centos64 ~]# /etc/init.d/mhvtl stop
shutdown of mhvtl
   Sending exit to 11
   Sending exit to 12
   Sending exit to 13
   Sending exit to 14
   Sending exit to 31
   Sending exit to 32
   Sending exit to 33
   Sending exit to 34
   Sending exit to 10
   Sending exit to 30
[root@centos64 ~]#
[root@centos64 ~]# ps -ef | grep -i vtl
root     29393 28966  0 05:03 pts/1    00:00:00 grep -i vtl
[root@centos64 ~]#

2). mhVTL 시작

아래와 같은 명령을 실행하면 mhVTL 프로세스를 실행시킬 수 있다. ( /etc/init.d/mhvtl start )

[root@centos64 ~]# /etc/init.d/mhvtl start
You should think updating the kernel module for these
 daemons to 0.18.15.
Please see https://sites.google.com/site/linuxvtl2/home?pli=1#mhvtl-kernel-module
vtllibrary process PID is 29599
vtllibrary process PID is 29602
[root@centos64 ~]#
[root@centos64 ~]# ps -ef | grep -i vtl
vtl      29513     1  0 05:06 ?        00:00:00 vtltape -q 11 -v
vtl      29516     1  0 05:06 ?        00:00:00 vtltape -q 12 -v
vtl      29522     1  0 05:06 ?        00:00:00 vtltape -q 13 -v
vtl      29563     1  0 05:06 ?        00:00:00 vtltape -q 14 -v
vtl      29570     1  0 05:06 ?        00:00:00 vtltape -q 31 -v
vtl      29577     1  0 05:06 ?        00:00:00 vtltape -q 32 -v
vtl      29584     1  0 05:06 ?        00:00:00 vtltape -q 33 -v
vtl      29591     1  0 05:06 ?        00:00:00 vtltape -q 34 -v
vtl      29599     1  0 05:06 ?        00:00:00 vtllibrary -q 10 -v
vtl      29602     1  0 05:06 ?        00:00:00 vtllibrary -q 30 -v
root     29607 28966  0 05:06 pts/1    00:00:00 grep -i vtl
[root@centos64 ~]# 

■ mhVTL 구성 파일 및 디렉터리

1). /opt/mhvtl

이 디렉터리는 파일로 된 가상 테이프 미디어가 존재하는 디렉터리이다. 각 이름은 테이프에 대한 바코드 번호를 나타낸다. 이 디렉터리의 특정 파일에 백업한 데이터가 누적되도록 되어 있다.

[root@centos64 mhvtl]# cd /opt/mhvtl
[root@centos64 mhvtl]# ls
CLN101L4  E01007L4  E01016L4  F01034L5  G03004TA  G03013TA  G03022TA  G03031TA
CLN102L5  E01008L4  E01017L4  F01035L5  G03005TA  G03014TA  G03023TA  G03032TA
CLN303TA  E01009L4  E01018L4  F01036L5  G03006TA  G03015TA  G03024TA  G03033TA
E01001L4  E01010L4  E01019L4  F01037L5  G03007TA  G03016TA  G03025TA  G03034TA
E01002L4  E01011L4  E01020L4  F01038L5  G03008TA  G03017TA  G03026TA  G03035TA
E01003L4  E01012L4  F01030L5  F01039L5  G03009TA  G03018TA  G03027TA  G03036TA
E01004L4  E01013L4  F01031L5  G03001TA  G03010TA  G03019TA  G03028TA  G03037TA
E01005L4  E01014L4  F01032L5  G03002TA  G03011TA  G03020TA  G03029TA  G03038TA
E01006L4  E01015L4  F01033L5  G03003TA  G03012TA  G03021TA  G03030TA  G03039TA
[root@centos64 mhvtl]# 

2). /etc/mhvtl/device.conf

mhvtl에 의해 사용되는 테이프 라이브러리, 드라이브에 관련된 디바이스 정보를 가지고 있는 파일이다. 사용하지 않을 디바이스들은 # 기호로 주석 처리를 하면 된다.

# Each 'record' starts at column 1
# Serial num max len is 10.
# Compression: factor X enabled 0|1
#     Where X is zlib compression factor 1 = Fastest compression
#      9 = Best compression
#     enabled 0 == off, 1 == on
#
# fifo: /var/tmp/mhvtl
# If enabled, data must be read from fifo, otherwise daemon will block
# trying to write.
# e.g. cat /var/tmp/mhvtl (in another terminal)
Library: 10 CHANNEL: 00 TARGET: 00 LUN: 00
 Vendor identification: STK
 Product identification: L700
 Unit serial number: XYZZY_A
 NAA: 10:22:33:44:ab:00:00:00
 Home directory: /opt/mhvtl
 PERSIST: False
 Backoff: 400
# fifo: /var/tmp/mhvtl

3). /etc/mhvtl/mhvtl.conf

mhvtl에 의해 사용되는 테이프 미디어에 관련된 용량 최대 크기와 구성 파일이 존재하는 디렉터리 정보를 가지고 있는 파일이다. 보통 용량(CAPACITY)에 대한 설정만 변경한다.

[root@centos64 mhvtl]# more /etc/mhvtl/mhvtl.conf

# Home directory for config file(s)
MHVTL_CONFIG_PATH=/etc/mhvtl

# Default media capacity (500 M)
CAPACITY=500

# Set default verbosity [0|1|2|3]
VERBOSE=1

# Set kernel module debuging [0|1]
VTL_DEBUG=0
[root@centos64 mhvtl]# 

여기까지 mhvtml에 대한 구성 파일과 서비스를 올리고 내리는 방법 그리고 테이프 미디어를 이동시키는 방법에 대해 알아보았습니다. 다음 게시물에서는 tar 와 mt 명령에 대해 알아보도록 하겠습니다.






No comments:

Post a Comment