labunix's blog

labunixのラボUnix

wheezyに仮想テープライブラリmhvtlを導入し、仮想テープで読み書き

■wheezyに仮想テープライブラリmhvtlを導入する。
 まずは、mhvtl-utilsをcheckinstallでdebパッケージにする。

$ echo "build-essential dh-make debhelper devscripts
        checkinstall
        libssl-dev libreadline6-dev
        git liblzo2-dev
         linux-headers-$(uname -r)" | xargs sudo apt-get install -y 
$ mkdir mhvtl && cd mhvtl && \
    git init && git pull https://github.com/markh794/mhvtl.git 

$ sudo useradd vtl; \
  sudo test -d /opt || sudo mkdir /opt; \
  sudo checkinstall

...
======================== インストールに成功しました ==========================
...

$ sudo dpkg -r mhvtl
$ sudo dpkg -i mhvtl/mhvtl_20150819-1_amd64.deb 
$ dpkg -l mhvtl | awk '/^ii/{print $2}'
mhvtl

■稼働中のKernelにコンパイルして組み込む
 sg2~sg11までが仮想mhvtl。

$ cd kernel && make && sudo make install
$ sudo ldconfig && sudo chown -R vtl /opt/mhvtl && \
  sudo /etc/init.d/mhvtl start
vtllibrary process PID is 18447
vtllibrary process PID is 18451
$ sudo apt-get install -y lsscsi && sudo lsscsi -g
[0:0:0:0]    disk    ATA      Hitachi HDT72101 ST6O  /dev/sda   /dev/sg0 
[2:0:0:0]    cd/dvd  HL-DT-ST DVDRAM GSA-4167B DL13  /dev/sr0   /dev/sg1 
[4:0:0:0]    mediumx STK      L700             0105  /dev/sch0  /dev/sg10
[4:0:1:0]    tape    IBM      ULT3580-TD5      0105  /dev/st0   /dev/sg2 
[4:0:2:0]    tape    IBM      ULT3580-TD5      0105  /dev/st1   /dev/sg3 
[4:0:3:0]    tape    IBM      ULT3580-TD4      0105  /dev/st2   /dev/sg4 
[4:0:4:0]    tape    IBM      ULT3580-TD4      0105  /dev/st3   /dev/sg5 
[4:0:8:0]    mediumx STK      L80              0105  /dev/sch1  /dev/sg11
[4:0:9:0]    tape    STK      T10000B          0105  /dev/st4   /dev/sg6 
[4:0:10:0]   tape    STK      T10000B          0105  /dev/st5   /dev/sg7 
[4:0:11:0]   tape    STK      T10000B          0105  /dev/st6   /dev/sg8 
[4:0:12:0]   tape    STK      T10000B          0105  /dev/st7   /dev/sg9 

■iscsitargetの設定
 サービスの停止、開始、待ち受けポート、
 読み込んだKernelモジュール、稼働中のvtltapeプロセスを確認。
 これはiqnで外部に公開しないので不要な手順だけどやっておく。
 ディスクの場合は以下。

 wheezyにiscsitargetを導入する
 http://labunix.hateblo.jp/entry/20130905/1378309248

$ sudo apt-get install -y iscsitarget iscsitarget-dkms 
$ sudo sed -i 's/false/true/' /etc/default/iscsitarget
$ sudo /etc/init.d/iscsitarget start
[ ok ] Starting iSCSI enterprise target service:.
. ok 

$ sudo /etc/init.d/iscsitarget stop
[ ok ] Removing iSCSI enterprise target devices: :.
[ ok ] Stopping iSCSI enterprise target service: :.
[ ok ] Removing iSCSI enterprise target modules: :.
$ sudo /etc/init.d/iscsitarget start
[ ok ] Starting iSCSI enterprise target service:.
. ok
$ netstat -an | grep 3260
tcp        0      0 0.0.0.0:3260            0.0.0.0:*               LISTEN     
tcp6       0      0 :::3260                 :::*                    LISTEN     

$ sudo ldconfig && lsmod  | grep "iscsi\|vtl"
iscsi_trgt             72785  4 
iscsi_tcp              17670  0 
libiscsi_tcp           17497  1 iscsi_tcp
libiscsi               35920  2 libiscsi_tcp,iscsi_tcp
scsi_transport_iscsi    39337  3 libiscsi,iscsi_tcp
mhvtl                  26066  38 
scsi_mod              162321  11 libata,sd_mod,sr_mod,sg,mhvtl,st,osst,ch,scsi_transport_iscsi,libiscsi,iscsi_tcp

$ ps -ef | grep [v]tl
vtl      18385     1  0 02:07 ?        00:00:00 vtltape -q 11 -v
vtl      18389     1  0 02:07 ?        00:00:00 vtltape -q 12 -v
vtl      18408     1  0 02:07 ?        00:00:00 vtltape -q 13 -v
vtl      18416     1  0 02:07 ?        00:00:00 vtltape -q 14 -v
vtl      18422     1  0 02:07 ?        00:00:00 vtltape -q 31 -v
vtl      18428     1  0 02:07 ?        00:00:00 vtltape -q 32 -v
vtl      18434     1  0 02:07 ?        00:00:00 vtltape -q 33 -v
vtl      18440     1  0 02:07 ?        00:00:00 vtltape -q 34 -v
vtl      18447     1  0 02:07 ?        00:00:00 vtllibrary -q 10 -v
vtl      18451     1  0 02:07 ?        00:00:00 vtllibrary -q 30 -v

$ sudo lsscsi -g | grep "/dev/sg2"
[4:0:1:0]    tape    IBM      ULT3580-TD5      0105  /dev/st0   /dev/sg2 

$ sudo grep -B 1 "^ *Lun" /etc/iet/ietd.conf
Target iqn.2015-08.localhost.vtl
   Lun 0 Path=/dev/sg2

■iscsitargetのクライアントのインストール

$ sudo apt-get install -y open-iscsi
$ sudo apt-get install -y mtx mt-st

■クライアントからの確認

$ sudo mtx -f /dev/sg10 load 3 0
$ sudo mtx -f /dev/sg10 status | head -8
  Storage Changer /dev/sg10:4 Drives, 43 Slots ( 4 Import/Export )
Data Transfer Element 0:Full (Storage Element 3 Loaded):VolumeTag = E01003L4                            
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:Empty

$ sudo mtx -f /dev/sg2 inquiry
Product Type: Tape Drive
Vendor ID: 'IBM     '
Product ID: 'ULT3580-TD5     '
Revision: '0105'
Attached Changer API: No

$  sudo mtx -f /dev/st0 inquiry
Product Type: Tape Drive
Vendor ID: 'IBM     '
Product ID: 'ULT3580-TD5     '
Revision: '0105'
Attached Changer API: No

■/dev/sg2に対応するテープデバイスは、/dev/st0の仮想LTO-4なので、
 簡単に書き込み、読み込みテストを行う。

$ sudo lsscsi -g | awk '/.dev.sg2/{print $(NF-1)}'
/dev/st0

$ sudo mt -f /dev/st0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x46 (LTO-4).
Soft error count since last status=0
General status bits on (41010000):
 BOT ONLINE IM_REP_EN

$ sudo tar cvf /dev/nst0 test*
test
test.log

$ sudo mt -f /dev/st0 status
SCSI 2 tape drive:
File number=1, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x46 (LTO-4).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

$ sudo mt -f /dev/nst0 tell
At block 2.

$ sudo mt -f /dev/st0 tell
At block 2.

$ sudo tar tvf /dev/st0 
-rw-r--r-- labunix/labunix   6 2015-08-19 04:52 test
-rw-r--r-- labunix/labunix   6 2015-08-19 03:50 test.log

$ sudo tar xvf /dev/st0 | xargs grep .
test:Hello
test.log:Hello

$ dmesg | grep st0
[184047.324190] st 4:0:1:0: Attached scsi tape st0
[184047.324195] st 4:0:1:0: st0: try direct i/o: yes (alignment 4 B)
[192285.232686] st0: Block limits 4 - 2097152 bytes.
[195205.768315] st0: Sense Key : Illegal Request [current] 
[195205.768332] st0: Add. Sense: Invalid field in parameter list

■余談
 iscsid.confと対になるクライアントからの確認。
 詳細は省略。

$ sudo iscsiadm -m discovery -t sp
127.0.0.1:3260 via sendtargets
localhost:3260 via sendtargets

$ sudo ls /etc/iscsi/send_targets/
127.0.0.1,3260	localhost,3260

$ sudo grep "= manual" /etc/iscsi/iscsid.conf 
node.startup = manual

$ sudo iscsiadm -m discovery -p localhost:3260
# BEGIN RECORD 2.0-873
discovery.startup = manual
discovery.type = sendtargets
discovery.sendtargets.address = localhost
discovery.sendtargets.port = 3260
discovery.sendtargets.auth.authmethod = None
discovery.sendtargets.auth.username = <empty>
discovery.sendtargets.auth.password = <empty>
discovery.sendtargets.auth.username_in = <empty>
discovery.sendtargets.auth.password_in = <empty>
discovery.sendtargets.timeo.login_timeout = 15
discovery.sendtargets.use_discoveryd = No
discovery.sendtargets.discoveryd_poll_inval = 30
discovery.sendtargets.reopen_max = 5
discovery.sendtargets.timeo.auth_timeout = 45
discovery.sendtargets.timeo.active_timeout = 30
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# END RECORD