Hi Nicholas, I tried to use tcm_node to add the tape device with the patched tcm_pscsi.py but it did not seem to work. root@vUbuntu:/usr/local/lib/python2.7/dist-packages# lsscsi -g [1:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0 /dev/sg0 [2:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda /dev/sg1 [3:0:0:0] mediumx STK L700 0104 /dev/sch0 /dev/sg10 [3:0:1:0] tape IBM ULT3580-TD5 0104 /dev/st0 /dev/sg2 [3:0:2:0] tape IBM ULT3580-TD5 0104 /dev/st1 /dev/sg3 [3:0:3:0] tape IBM ULT3580-TD4 0104 /dev/st2 /dev/sg4 [3:0:4:0] tape IBM ULT3580-TD4 0104 /dev/st3 /dev/sg5 [3:0:8:0] mediumx STK L80 0104 /dev/sch1 /dev/sg11 [3:0:9:0] tape STK T10000B 0104 /dev/st4 /dev/sg6 [3:0:10:0] tape STK T10000B 0104 /dev/st5 /dev/sg7 [3:0:11:0] tape STK T10000B 0104 /dev/st6 /dev/sg8 [3:0:12:0] tape STK T10000B 0104 /dev/st7 /dev/sg9 root@vUbuntu:/usr/local/lib/python2.7/dist-packages# python ./tcm_node.py --scsi=pscsi_3/st0 0:1:0 Calling pscsi createvirtdev: path pscsi_3/st0 Calling pscsi createvirtdev: params ['scsi_channel_id=0,scsi_target_id=1,scsi_lun_id=0'] scsi_channel_id=0,scsi_target_id=1,scsi_lun_id=0 Calling control_opt echo -n scsi_channel_id=0,scsi_target_id=1,scsi_lun_id=0 > /sys/kernel/config/target/core/pscsi_3/st0/control Calling enable_opt echo 1 > /sys/kernel/config/target/core/pscsi_3/st0/enable pSCSI: createvirtdev failed for enable_opt with scsi_channel_id=0,scsi_target_id=1,scsi_lun_id=0 None Following is the diff: root@vUbuntu:/usr/local/lib/python2.7/dist-packages# diff tcm_pscsi.py ~/lio-utils/lio-utils/tcm-py/tcm_pscsi.py.backup 46c46 < print "Calling pscsi createvirtdev: path " + path --- > # print "Calling pscsi createvirtdev: path " + path 49c49 < print "Calling pscsi createvirtdev: params " + str(params) --- > # print "Calling pscsi createvirtdev: params " + str(params) 51,53c51 < print pscsi_params < < udev_path="/dev/null" --- > # print pscsi_params 107,108d104 < pscsi_params = "scsi_host_id=" + scsi_host_id + ",scsi_channel_id=" + scsi_channel_id + ",scsi_target_id=" + scsi_target_id + ",scsi_lun_id=" + scsi_lun_id.rstrip() < 114a111,113 > pscsi_params = "scsi_host_id=" + scsi_host_id + ",scsi_channel_id=" + scsi_channel_id + ",scsi_target_id=" + scsi_target_id + ",scsi_lun_id=" + scsi_lun_id.rstrip() > > 116c115 < print "Calling control_opt " + control_opt --- > # print "Calling control_opt " + control_opt 123c122 < print "Calling enable_opt " + enable_opt --- > # print "Calling enable_opt " + enable_opt I must have missed something? I plea newbie with LIO/TCM... Thanks, Sean -----Original Message----- From: Nicholas A. Bellinger [mailto:nab@xxxxxxxxxxxxxxx] Sent: Thursday, February 28, 2013 5:38 PM To: Sean Liu Cc: target-devel@xxxxxxxxxxxxxxx Subject: Re: Exporting MHVTL devices via pscsi? Hi Sean, On Thu, 2013-02-28 at 12:19 -0500, Sean Liu wrote: > Hi there, > > > I am trying to make MHVTL (https://sites.google.com/site/linuxvtl2/) > work under LIO. > > MHVTL emulates virtual tape libraries and currently it can integrate > with stgt framework. > > Here's what has been emulated on my test machine (Ubuntu 12.04LTS): > > root@vUbuntu:~# lsscsi -g > > [1:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0 /dev/sg0 > > [2:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda /dev/sg1 > > [3:0:0:0] mediumx STK L700 0104 /dev/sch0 /dev/sg10 > > [3:0:1:0] tape IBM ULT3580-TD5 0104 /dev/st0 /dev/sg2 > > [3:0:2:0] tape IBM ULT3580-TD5 0104 /dev/st1 /dev/sg3 > > [3:0:3:0] tape IBM ULT3580-TD4 0104 /dev/st2 /dev/sg4 > > [3:0:4:0] tape IBM ULT3580-TD4 0104 /dev/st3 /dev/sg5 > > [3:0:8:0] mediumx STK L80 0104 /dev/sch1 /dev/sg11 > > [3:0:9:0] tape STK T10000B 0104 /dev/st4 /dev/sg6 > > [3:0:10:0] tape STK T10000B 0104 /dev/st5 /dev/sg7 > > [3:0:11:0] tape STK T10000B 0104 /dev/st6 /dev/sg8 > > [3:0:12:0] tape STK T10000B 0104 /dev/st7 /dev/sg9 > > > > With targetcli, I would imagine I'll have to use pscsi (iblock seems > to only work with disk devices) to export the tape lib and drives. > However when I try to add the backstores, I got following errors: > > /backstores/pscsi> create name=tapelib1 dev=/dev/sg2 > > Cannot find SCSI device by path, and dev parameter not in H:C:T:L format: > /dev/sg2. > > /backstores/pscsi> create name=tapelib1 dev=3:0:0:0 > > SCSI device does not exist. > > > > As a matter of fact, even the disk could not be added: > > /backstores/pscsi> create name=disk1 dev=/dev/sg1 > > Cannot find SCSI device by path, and dev parameter not in H:C:T:L format: > /dev/sg1. > Note that the pscsi dev= parameter in targetcli assumes a block device (/dev/sdX or /dev/sr), so this currently does not work with SCSI medium changers or tapes that use character devices.. > > > Am I missing anything? Or is pscsi not supported at all? > One work-around is to use tcm_node (from lio-utils.git) w/ a quick patch inline below to address changes in modern target_core_pscsi.ko code. So with lsscsi output of mhvtl looking like: [12:0:0:0] mediumx STK L700 0104 /dev/sch0 [12:0:1:0] tape IBM ULT3580-TD5 0104 /dev/st0 [12:0:2:0] tape IBM ULT3580-TD5 0104 /dev/st3 [12:0:3:0] tape IBM ULT3580-TD4 0104 /dev/st1 [12:0:4:0] tape IBM ULT3580-TD4 0104 /dev/st2 [12:0:8:0] mediumx STK L80 0104 /dev/sch1 [12:0:9:0] tape STK T10000B 0104 /dev/st5 [12:0:10:0] tape STK T10000B 0104 /dev/st6 [12:0:11:0] tape STK T10000B 0104 /dev/st7 [12:0:12:0] tape STK T10000B 0104 /dev/st4 use tcm_node --scsi= with the following syntax. Note that H:C:T:L needs to line up with pscsi_XX/foo X:X:X: # tcm_node --scsi=pscsi_12/sch0 0:1:0 dev_path: pscsi_12/sch0 Status: DEACTIVATED Execute/Left/Max Queue Depth: 0/32/32 SectorSize: 0 MaxSectors: 1024 SCSI Device Bus Location: Channel ID: 0 Target ID: 1 LUN: 0 Host ID: PHBA Mode Vendor: IBM Model: ULT3580-TD5 Rev: 0104 # tcm_node --scsi=pscsi_12/st0 0:2:0 dev_path: pscsi_12/st0 Status: DEACTIVATED Execute/Left/Max Queue Depth: 0/32/32 SectorSize: 0 MaxSectors: 1024 SCSI Device Bus Location: Channel ID: 0 Target ID: 2 LUN: 0 Host ID: PHBA Mode Vendor: IBM Model: ULT3580-TD5 Rev: 0104 that will then show up under /backstores/pscsi/ and can be used normally in targetcli like other backstores: /> ls /backstores/pscsi/ o- pscsi ................................................... [2 Storage Objects] o- sch0 ......................... [LEGACY: SHARED HBA (/dev/null deactivated)] o- st0 ............................ [LEGACY: SHARED HBA (/dev/null activated)] The patch to tcm_pscsi.py is below. Note this currently does not support saving configuration state across restart with tcm_dump.py, which will need to be addressed separately. However, it should be enough to get an initial configuration up and running. Please let us know if you run into any other issues. --nab diff --git a/tcm-py/tcm_pscsi.py b/tcm-py/tcm_pscsi.py index defe508..74d8c14 100755 --- a/tcm-py/tcm_pscsi.py +++ b/tcm-py/tcm_pscsi.py @@ -50,6 +50,8 @@ def createvirtdev(path, params): pscsi_params = params[0] # print pscsi_params + udev_path = "/dev/null" + # Exract HCTL from sysfs and set udev_path if re.search('/dev/', pscsi_params): udev_path = pscsi_params.rstrip() @@ -102,14 +104,13 @@ def createvirtdev(path, params): scsi_lun_id = scsi_hctl[3] print "pSCSI: Referencing HCTL " + out[1].rstrip() + " for udev_path: " + udev_path - set_udev_path_op = "echo -n " + udev_path + " > " + cfs_path + "udev_path" - ret = os.system(set_udev_path_op) - if ret: - print "pSCSI: Unable to set udev_path in " + cfs_path + " for: " + udev_path - return -1 - pscsi_params = "scsi_host_id=" + scsi_host_id + ",scsi_channel_id=" + scsi_channel_id + ",scsi_targe - + + set_udev_path_op = "echo -n " + udev_path + " > " + cfs_path + "udev_path" + ret = os.system(set_udev_path_op) + if ret: + print "pSCSI: Unable to set udev_path in " + cfs_path + " for: " + udev_path + return -1 control_opt = "echo -n " + pscsi_params + " > " + cfs_path + "control" # print "Calling control_opt " + control_opt -- To unsubscribe from this list: send the line "unsubscribe target-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html