There is a very nice script for Windows dealing with attaching XenServer USB disk to a guest. It can be found here.
This script has several problems, as I see it. The first – this is a Windows batch script, which is a very limited language, and it can handle only a single VDI disk in the SR group called “Removable Storage”.
As I am a *nix guy, and can hardly handle Windows batch scripts, I have rewritten this script to run from Linux CLI (focused on running from the XenServer Domain0), and allowed it to handle multiple USB disks. My assumption is that running this script will map/unmap *all* local USB disks to the VM.
Following downloading this script, you should make sure it is executable, and run it with the arguments “attach” or “detach”, per your needs.
And here it is:
Download usbmap-to-vm.txt
——————————————————————————————-
#!/bin/bash # This script will map USB devices to a specific VM # Written by Ez-Aton, http://run.tournament.org.il , with the concepts # taken from http://jamesscanlonitkb.wordpress.com/2012/03/11/xenserver-mount-usb-from-host/ # and http://support.citrix.com/article/CTX118198 # Variables # Need to change them to match your own! REMOVABLE_SR_UUID=d03f247d-6fc6-a396-e62b-a4e702aabcf0 VM_UUID=b69e9788-8cd2-0074-5bc1-63cf7870fa0d DEVICE_NAMES="hdc hde" # Local disk mapping for the VM XE=/opt/xensource/bin/xe function attach() { # Here we attach the disks # Check if storage is attached to VBD VBDS=`$XE vdi-list sr-uuid=${REMOVABLE_SR_UUID} params=vbd-uuids --minimal | tr , ' '` if [ `echo $VBDS | wc -w` -ne 0 ] then echo "Disks are allready attached. Check VBD $VBDS for details" exit 1 fi # Get devices! VDIS=`$XE vdi-list sr-uuid=${REMOVABLE_SR_UUID} --minimal | tr , ' '` INDEX=0 DEVICE_NAMES=( $DEVICE_NAMES ) for i in $VDIS do VBD=`$XE vbd-create vm-uuid=${VM_UUID} device=${DEVICE_NAMES[$INDEX]} vdi-uuid=${i}` if [ $? -ne 0 ] then echo "Failed to connect $i to ${DEVICE_NAMES[$INDEX]}" exit 2 fi $XE vbd-plug uuid=$VBD if [ $? -ne 0 ] then echo "Failed to plug $VBD" exit 3 fi let INDEX++ done } function detach() { # Here we detach the disks VBDS=`$XE vdi-list sr-uuid=${REMOVABLE_SR_UUID} params=vbd-uuids --minimal | tr , ' '` for i in $VBDS do $XE vbd-unplug uuid=${i} $XE vbd-destroy uuid=${i} done echo "Storage Detached from VM" } case "$1" in attach) attach ;; detach) detach ;; *) echo "Usage: $0 [attach|detach]" exit 1 esac
——————————————————————————————
Crédito : http://run.tournament.org.il/attach-usb-disks-to-xenserver-vm-guest/