Normally you don't need direct access to a block device from a virtual machine, but in some cases it is very to convenient to use one. One of such cases is a file/backup server which needs access to a raid or just a huge hard disk with an existing file system.
Here is what should be done in order to make it work.
1. Create a directory which will contain links to the block devices visible in XEN.
mkdir /srv/xen-devices
2. Create storage repository for the block devices
xe sr-create name-label="Block devices" name-description="Block devices which we want to use directly in XEN" type=udev content-type=disk device-config:location=/srv/xen-devicesassign displayed uuid to shell variable SR
3. [Optional] If step 2 fails with the error message:
The SR could not be connected because the driver was not recognised.
driver: udev
then you need to fix it. Do the following:
cd /usr/lib/xcp/sm/ ln -s udevSR.py udevSR /usr/lib/xcp/bin/xe-toolstack-restartAnd then try again step 2.
4. Find a device you want to make visible in the Xen, for example, like this:
ls -l /dev/disk/by-path
Link it
ln -s /dev/disk/by-id/ata-some-device /srv/xen-devices/some-device
5. Rescan our storage repository
xe sr-scan uuid=$SR
6. List VDIs of the storage repository and spot the one with "Unrecognised bus type"
xe vdi-list sr-uuid=$SR
assign VDI¨s uuid to the VDI variable in shell.
7. Set name and label for the VDI to whatever you like:
xe vdi-param-set uuid=$VDI name-description="A real disk" xe vdi-param-set uuid=$VDI name-label="R-disk"
8. Create VBD which assign the VDI to the VM
xe vbd-create device=1 vm-uuid=$VM vdi-uuid=$VDI bootable=false mode=RW type=Diskassign display uuid to the VBD variable
9. Attach it to the VM
xe vbd-plug uuid=$VBD
That's all. Now you can log into the virtual machine and check with 'dmesg' that a new device is available.