Xen drive iscsi passthrough
Making a tape drive available to a guest via iSCSI
This is specifically for Citrix XenServer, although the principles will of course work in other Xen implementations
I recently had a scenario where I was replacing two Windows servers with XenServer guests. This was fine, but we needed a way to backup to the existing SCSI DDS4 DAT drive. After failing to make PCI passthrough work, I settled on the much nicer method of providing the tape drive via an iSCSI target on the XenServer Host (Dom0). Here is how I achieved this.
Note 1: This is totally unsupported by Citrix
Note 2: I’ve used the XenServer terminology “host” instead of Dom0, as this applies to the Citrix commercial implementation of Xen. It will probably work fine on OSS Xen, but you can just install the normal kernel dev packages and ignore the DDK stuff.
Note 3: This is for XenServer 4.1.0, but the principles are the same for previous versions. Just ensure you understand each step rather than following blindly.
Note 4: You’ll need to enable yum repositories. Do this by editing /etc/yum.repos.d/CentOS-Base.repo, and set “enabled=1” for the Base, Updates and Addons repositories
Note 5: Thanks to the wonderful work of Blake-r the rawio patch has now been updated to work against iscsitarget-0.4.17 - when using this against a kernel newer than 2.6.22, you’ll need to edit kernel/target_raw.c and replace all the psg.page occurrences with psg.page_link due to changes in the scatterlist struct. To take advantage of this, just substitute the newer versions of iscsitarget and the rawio patch in these instructions. You should be able to keep all the instructions the same, but I’ve not tested this yet.
Download the Xen 4.1 DDK from citrix.com
The DDK is an ISO containing a VM with a development environment. Import it to your Xen host, and start it.
Download iscsitarget 0.4.14 (you MUST use this version, as the patch for rawio support will not cleanly apply to 0.4.15) from into your DDK VM.
Download the patch for rawio support into your DDK VM (assuming you’re saving it in /tmp)
Now do the following:
scp the entire iscsitarget-0.4.14 directory to your destination Xen host, and on that host (after enabling the base repo in /etc/yum.repos.d/CentOS-Base.repo) do:
The last three steps are required because make install will not copy the kernel module correctly outside the target environment.
Now edit your /etc/ietd.conf and configure the tape as per the following example snippet (cat /proc/scsi/scsi for the correct HCIL values for your SCSI tape drive, this is an example only):
Save and do /etc/init.d/iscsi-target start Modify /etc/sysconfig/iptables to allow port 3260 tcp from the IP addresses running the initiator. Attach to the target using the initiator of your choice.
Working around pesky controllers which change HCIL at boot (optional)
in your rc.local.