https://sites.google.com/site/linuxvtl2/
参考INSTALL文件。
git clone https://github.com/markh794/mhvtl.git
sudo apt-get -y install make gcc linux-headers-`uname -r` lsscsi sg3-utils zlib1g-dev liblzo2-dev
cd mhvtl/kernel
make
sudo make install
cd ..
sudo groupadd --system vtl
sudo useradd --system -c "Vitrual Tape Library" -d /opt/vtl -g vtl -m vtl
make
sudo BINGROUP=bin make install
sudo chown -R vtl:vtl /opt/mhvtl
sudo /etc/init.d/mhvtl start
lsscsi -g
编辑/etc/mhvtl/mhvtl.conf 修改单盒磁带的容量,默认500M。
# Default media capacity (500 M)
CAPACITY=500
编辑 /etc/mhvtl/device.conf 修改设备信息,如机械臂和驱动器的型号,数量等。
安装stgt。与其它iSCSI target软件同时安装(如scst或iscsitarget,目前scutech-nas依赖于iscsitarget)会有端口冲突,应该可以通过修改默认端口解决。
Ubuntu上:
sudo apt-get -y install tgt
使用stgt共享changer和drive,例如lsscsi -g列出的changer和drive分别是/dev/sg9和/dev/sg1,可以创建以下两个文件并保存为脚本并用root运行:
# create a new iSCSI target
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2012-12.scutech:ubuntu-vtl:1
# add changer and drive as LUN to the created target, use passthrough mode
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --bstype sg --device-type pt -b /dev/sg9
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 2 --bstype sg --device-type pt -b /dev/sg1
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 3 --bstype sg --device-type pt -b /dev/sg2
# allow initiator from ALL address to access the created target
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
# show all targets
tgtadm --lld iscsi --op show --mode target
# delete target from access lists
tgtadm --lld iscsi --op unbind --mode target --tid 1 -I ALL
# delete LUNs from target
tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 1
tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 2
# delete iSCSI target
tgtadm --lld iscsi --op delete --mode target --tid 1
# show all targets
tgtadm --lld iscsi --op show --mode target
增加执行权限后,可以分别加入/etc/rc.local及/etc/rc.shutdown(在ubuntu下好像没有rc.shutdown,可以到/etc/rc0.d中创建符号连接指向该脚本)。
sudo apt-get -y install open-iscsi
sudo iscsiadm -m discovery -t sendtargets -p 192.168.88.199
sudo iscsiadm -m node -T iqn.2012-12.scutech:ubuntu-vtl:1 --login
lsscsi -g
discovery命令自动发现指定主机上的target并加入列表,也可以替换为以下命令手动添加指定的target:
iscsiadm -m node -o iqn.2012-12.scutech:ubuntu-vtl:1 -t sendtargets -p 192.168.88.199
可以把登录命令添加到/etc/rc.local,也可以通过以下命令设置为开机自动登录:
iscsiadm -m node -o update -p 192.168.88.199 -T iqn.2012-12.scutech:ubuntu-vtl:1 -n node.startup -v automatic
用以下命令可退出登录(断开连接):
sudo iscsiadm -m node -p 192.168.88.199 -T iqn.2012-12.scutech:ubuntu-vtl:1 --logout
用以下命令把target从本机列表中删除,如果以后不再使用该target可以使用该命令,否则不需要运行:
sudo iscsiadm -m node -p 192.168.88.199 -o delete -T iqn.2012-12.scutech:ubuntu-vtl:1
Vista以前的版本需要下载官方的iSCSI initiator。Vista及以后的版本自带。
操作比较简单,输入target的主机地址,发现target后登录,Windows就找到设备了,安装驱动后就可以使用。较新的版本能自动识别一些drive,但很多changer无法识别。可以按上面提及的虚拟IBM的changer,并安装IBM官方驱动即可(附件)。
yum install iscsi-initiator-utils
iscsiadm -m discovery -t sendtargets -p 192.168.82.144 (发现)
iscsiadm -m node -T iqn.2004-01.com.storbridge:block01-wt -p 192.168.82.144 -l (登陆)
iscsiadm -m node -T iqn.1994-05.com.redhat:7aa292fa110:mhvtl:tgt:1 -p 192.168.82.144 --logout (登出)
root@ubuntu:~# lsscsi -g
[1:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0 /dev/sg0
[2:0:0:0] tape IBM ULT3580-TD3 73P5 /dev/st0 /dev/sg2
[2:0:1:0] tape IBM ULT3580-TD3 73P5 /dev/st1 /dev/sg3
[2:0:1:1] mediumx IBM ULT3582-TL 310B /dev/sch0 /dev/sg4
[3:0:0:0] disk VMware Virtual disk 1.0 /dev/sda /dev/sg1
root@ubuntu:~# mtx -f /dev/sg4 status
Storage Changer /dev/sg4:2 Drives, 24 Slots ( 1 Import/Export )
Data Transfer Element 0:Empty
Data Transfer Element 1:Empty
Storage Element 1:Full :VolumeTag=SCU002L3
Storage Element 2:Full :VolumeTag=SCU001L3
Storage Element 3:Empty:VolumeTag=
Storage Element 4:Empty:VolumeTag=
Storage Element 5:Empty:VolumeTag=
Storage Element 6:Empty:VolumeTag=
Storage Element 7:Empty:VolumeTag=
Storage Element 8:Empty:VolumeTag=
Storage Element 9:Empty:VolumeTag=
Storage Element 10:Empty:VolumeTag=
Storage Element 11:Empty:VolumeTag=
Storage Element 12:Empty:VolumeTag=
Storage Element 13:Empty:VolumeTag=
Storage Element 14:Empty:VolumeTag=
Storage Element 15:Empty:VolumeTag=
Storage Element 16:Empty:VolumeTag=
Storage Element 17:Empty:VolumeTag=
Storage Element 18:Empty:VolumeTag=
Storage Element 19:Empty:VolumeTag=
Storage Element 20:Empty:VolumeTag=
Storage Element 21:Empty:VolumeTag=
Storage Element 22:Empty:VolumeTag=
Storage Element 23:Empty:VolumeTag=
Storage Element 24 IMPORT/EXPORT:Empty:VolumeTag=
把槽位 1 的磁带移动到 driver 0上面
root@ubuntu:~# time mtx -f /dev/sg4 load 1 0
Loading media from Storage Element 1 into drive 0...done
装载后查看机械手状态
root@ubuntu:~# mtx -f /dev/sg4 status
Storage Changer /dev/sg4:2 Drives, 24 Slots ( 1 Import/Export )
Data Transfer Element 0:Full (Storage Element 1 Loaded):VolumeTag = SCU002L3
Data Transfer Element 1:Empty
Storage Element 1:Empty:VolumeTag=
Storage Element 2:Full :VolumeTag=SCU001L3
Storage Element 3:Empty:VolumeTag=
Storage Element 4:Empty:VolumeTag=
Storage Element 5:Empty:VolumeTag=
Storage Element 6:Empty:VolumeTag=
Storage Element 7:Empty:VolumeTag=
Storage Element 8:Empty:VolumeTag=
Storage Element 9:Empty:VolumeTag=
Storage Element 10:Empty:VolumeTag=
Storage Element 11:Empty:VolumeTag=
Storage Element 12:Empty:VolumeTag=
Storage Element 13:Empty:VolumeTag=
Storage Element 14:Empty:VolumeTag=
Storage Element 15:Empty:VolumeTag=
Storage Element 16:Empty:VolumeTag=
Storage Element 17:Empty:VolumeTag=
Storage Element 18:Empty:VolumeTag=
Storage Element 19:Empty:VolumeTag=
Storage Element 20:Empty:VolumeTag=
Storage Element 21:Empty:VolumeTag=
Storage Element 22:Empty:VolumeTag=
Storage Element 23:Empty:VolumeTag=
Storage Element 24 IMPORT/EXPORT:Empty:VolumeTag=
root@ubuntu:~# time mtx -f /dev/sg4 unload 1 0
Unloading drive 0 into Storage Element 1...done
root@ubuntu:~# sg_turs /dev/st0
device not ready
root@ubuntu:~# sg_turs /dev/st1
root@ubuntu:~#
root@ubuntu:~#tar -cf /dev/st1 Oracle-Linux-Release-7-for-x86_64.iso
操作频繁时偶尔会出现vtl没有响应的情况,可以:
root@ubuntu:~/mhvtl# make install
make usr
make[1]: Entering directory `/root/mhvtl'
make -C usr USR=vtl GROUP=vtl MHVTL_HOME_PATH=/opt/mhvtl MHVTL_CONFIG_PATH=/etc/mhvtl
make[2]: Entering directory `/root/mhvtl/usr'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/root/mhvtl/usr'
make[1]: Leaving directory `/root/mhvtl'
make -C usr install /usr/lib /usr
make[1]: Entering directory `/root/mhvtl/usr'
install -d -m 755 /usr/lib
install -o root -g -m 755 libvtlscsi.so /usr/lib/
install: invalid group '-m'
make[1]: *** [install] Error 1
make[1]: Leaving directory `/root/mhvtl/usr'
make: *** [install] Error 2
错误原因, -g 后应该加组名,但此处组名获取为空,导致 make install 失败。
install -o root -g -m 755 libvtlscsi.so /usr/lib/
install: invalid group '-m'
查看 mhvtl/usr/Makefile 发现组名由 BINGROUP 参数决定,再全目录搜索 BINGROUP , gren BINGROUP *,发现 BINGROUP ?= bin,于是先手动设置 BINGROUP 环境变量再运行 make install
install -o $(SUSER) -g $(BINGROUP) -m 755
解决方案:
BINGROUP=bin make install
实例
往磁带里面写数据
for i in {0..1000}
do
echo "$i"
mtx -f /dev/sg1 load 1 0
mt -f /dev/nst0 rewind
mt -f /dev/nst0 fsf $i
dd if=/dev/urandom of=/dev/nst0 bs=8192 count=$(($i + 1))
mtx -f /dev/sg1 unload 1 0
done
从磁带里面读数据
mtx -f /dev/sg1 load 1 0
mt -f /dev/nst0 rewind
mt -f /dev/nst0 fsf 1000
cat /dev/nst0 > file1000