#!/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