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/


