■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
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