The MMC emulation in TGTD can emulate a DVD device capable of writing/burning to emulated blank disks. The emulation supports three types of behaviour (profiles) which are automatically selected by TGTD at runtime. These three types are : NO_PROFILE : This is the behaviour used when the device is OFFLINE or when there is no backing store file present. In this profile the emulation will behave as if there is no media (disk) inserted in the drive tray. DVD-ROM : This is used if the device is ONLINE and also if the backing store file exists and contains data (i.e. the file size is >0). In this mode TGTD will behave as if a read-only DVD-ROM disk is inserted in the tray. DVD+R : This is used if the device is ONLINE and the backing store file exists and is empty (i.e. the file size is == 0). In this mode the emulation will behave as if there is a blank, writeable, DVD+R disk in the tray. In this mode you can burn an ISO image onto the device. Once the burning process has finished and the application issues the CLOSE TRACK command to finalize the track, the emulation will morph from DVD+R and into DVD-ROM so that subsequent access to the drive will behave as if there is now a DVD-ROM disk in the tray. Compatibility : The MMC commandset for writeable media is extensive. This emulation currently only implements a small subset of the full MMC specification. In particular, during development the windows application DVD-Decrypter was used to view which commands and subcommands were required to successfully burn a disk. This emulation supports all commands that that application uses when accessing a DVD drive to identify and write to a blank disk. Other applications may use a different subset of MMC to perform the same operations in which case it may or may not work. It is the intent that the emulation will be enhanced to provide compatibility with all DVD burning applications on all important platforms. The emulation is also compatible with Linux:dvdrecorder but you must specify the command arguments -dao -ignsize -overburn Example: dvdrecord -dao -ignsize -overburn dev=/dev/sg3 ./IMAGE.iso Please report incompatibilities with other burning applications other than Windows/DVD-Decrypter to ronniesahlberg@gmail.com and I will try to enhance the emulation to also support your application of choice. I can however only test with Windows free-ware or linux applications. # # Example 1: How to create a MMC device that contains an empty writeable # DVD+R disk which can be written to using DVD-Decrypter # # Create a target tgtadm --lld iscsi --mode target --op new --tid 1 -T iqn.2007-03:virtual-dvd:`hostname` # Create an empty file that will represent a writeable DVD+R disk rm -rf /tmp/empty-disk.iso tgtimg --op new --device-type cd --type dvd+r --file /tmp/empty-disk.iso # Create LUN - CD/ROM tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /tmp/empty-disk.iso --device-type=cd # Give it a nice name SN=XYZ123 tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 1 --params vendor_id=STGT_DVD,product_id=DVD101,product_rev=0010,scsi_sn=$SN,removable=1 # Allow ALL initiators to connect to this target tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL # Show all our good work. tgtadm --lld iscsi --mode target --op show # # Example 2: How to mark the device "offline" meaning the device will show up # as "no disk in tray" # tgtadm --tid 1 --lun 1 --op update --mode logicalunit --name online --value No # # Example 3: While the device is "offline" we can swap the disk in the tray, # by just pointing the device to a different backing store file. # In this example we just swap it to another blank DVD+R disk. # rm -rf /tmp/empty-disk2.iso tgtimg --op new --device-type cd --type dvd+r --file /tmp/empty-disk2.iso tgtadm --tid 1 --lun 1 --op update --mode logicalunit --name path --value /tmp/empty-disk2.iso # note: when we updated the device to a new bakend storage file the device # automatically goes online again with the new media present. # # Example 4: How to create a DVD jukebox with 8 disk trays # # Create a target tgtadm --lld iscsi --mode target --op new --tid 1 -T iqn.2007-03:virtual-dvd:`hostname` # Create a DVD drive and give it a nice name # The dvd starts out without a backing store file, i.e. no disk loaded tgtadm --op new --mode logicalunit --tid 1 --lun 1 -Y cd tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 1 --params vendor_id=STGT_DVD,product_id=DVD101,product_rev=0010,scsi_sn=STGTDVD01,removable=1 # We need a backend store file for the media changer if [ ! -f $HOME/smc ]; then dd if=/dev/zero of=$HOME/smc bs=1k count=1 fi # Create the SMC device and give it a nice name tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 2 -b $HOME/smc --device-type=changer tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params vendor_id=STK,product_id=L700,product_rev=0010,scsi_sn=XYZZY_0,removable=1 # Add a Data Transfer devices (1 drive) tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element_type=4,start_address=1,quantity=1 # Specify that the DVD above (LUN 1) is the data transfer device we created tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element_type=4,address=1,tid=1,lun=1 # Medium Transport Elements (robot arm / picker) tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element_type=1,start_address=16,quantity=1 # define path to virtual media VTL=${HOME}/vtl mkdir -p ${VTL} 2>/dev/null tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params media_home=${VTL} # Storage Elements - 8 starting at addr 1024 tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element_type=2,start_address=1024,quantity=8 # Add 'media' to slots 1 and 2 and leave the other 6 slots empty # slot 1 tgtimg --op new --device-type cd --type dvd+r --file ${VTL}/DISK_001 tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element_type=2,address=1024,barcode=DISK_001,sides=1 # slot 2 tgtimg --op new --device-type cd --type dvd+r --file ${VTL}/DISK_002 tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element_type=2,address=1025,barcode=DISK_002,sides=1 # Allow ALL initiators to connect to this target tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL # Show all our good work. tgtadm --lld iscsi --mode target --op show Now you should be able to access the devices and try it out : tgtadm --lld iscsi --mode target --op show Target 1: iqn.2007-03:virtual-dvd:ronnie System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: deadbeaf1:0 SCSI SN: beaf10 Size: 0 MB Online: Yes Removable media: No Backing store: No backing store LUN: 1 Type: cd/dvd SCSI ID: deadbeaf1:1 SCSI SN: STGTDVD0 Size: 0 MB Online: No Removable media: Yes Backing store: No backing store LUN: 2 Type: changer SCSI ID: deadbeaf1:2 SCSI SN: XYZZY_0 Size: 0 MB Online: Yes Removable media: Yes Backing store: /root/smc Account information: ACL information: ALL You can use the 'mtx' command under linux to manage the jukebox (man mtx) mtx -f /dev/sg4 status Storage Changer /dev/sg4:1 Drives, 8 Slots ( 0 Import/Export ) Data Transfer Element 0:Empty Storage Element 1:Full :VolumeTag=DISK_001 Storage Element 2:Full :VolumeTag=DISK_002 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= Now load the disk in slot 1 : mtx -f /dev/sg4 load 1 mtx -f /dev/sg4 status Storage Changer /dev/sg4:1 Drives, 8 Slots ( 0 Import/Export ) Data Transfer Element 0:Full (Storage Element 1 Loaded):VolumeTag = DISK_00 Storage Element 1:Empty:VolumeTag= Storage Element 2:Full :VolumeTag=DISK_002 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= And if we look at the devices again we see the DVD drive is now online and has a disk loaded : tgtadm --lld iscsi --mode target --op show Target 1: iqn.2007-03:virtual-dvd:ronnie System information: Driver: iscsi State: ready I_T nexus information: I_T nexus: 1 Initiator: iqn.1993-08.org.debian:ronnie Connection: 0 IP Address: 127.0.0.1 LUN information: LUN: 0 Type: controller SCSI ID: deadbeaf1:0 SCSI SN: beaf10 Size: 0 MB Online: Yes Removable media: No Backing store: No backing store LUN: 1 Type: cd/dvd SCSI ID: deadbeaf1:1 SCSI SN: STGTDVD0 Size: 0 MB Online: Yes Removable media: Yes Backing store: /root/vtl/DISK_001 LUN: 2 Type: changer SCSI ID: deadbeaf1:2 SCSI SN: XYZZY_0 Size: 0 MB Online: Yes Removable media: Yes Backing store: /root/smc Account information: ACL information: ALL Have fun building big DVD jukeboxes !!!