VMWare: Connect a USB Device to a VM in ESXi

Connect a USB Device to a VM in ESXi

This article describes how to connect a USB device to a vm in ESXi – for example a storage device, camera, USB handset etc. etc. Whilst previously not possible, since ESXi 5.0 this is now reality, much to the relief of many, many people!

1. Add a VM USB Controller

Firstly, your VM needs to have a USB controller; this is added as standard to most new virtual machines but if one is not present then we need to add it – open your VM settings and click the “Add” button:

Connect a USB Device to a VM in ESXi

Choose “USB Controller” and click “Next”; when prompted for the controller type, choose “EHCI+UHCI” for best compatibility or “xHCI” for USB 3.0 support. Note: xHCI USB 3.0 is only supported with Linux VMs currently – see this documentation for further details.

Connect a USB Device to a VM in ESXi

Once complete, you should see something akin to the following in your VM properties:

Connect a USB Device to a VM in ESXi

Excellent! Now let’s add a USB device to our VM:

2. Add a USB Device to the VM

Insert a USB device into one of the ports on your ESXi host. For this example I have used a Sandisk storage device. Open your VM machine properties and once again, click on “Add Hardware.” This time, choose “USB Device”: if your device has been correctly recognised by your ESXi host then it will show up on the next screen:

Connect a USB Device to a VM in ESXi     —–>       Connect a USB Device to a VM in ESXi

Click “Next,” “Finish” and lastly “OK” to complete the reconfiguration of the VM. Congratulations! Your USB device is now added.

3. Mount the Storage Device (*nix Only)

If you have just added a storage device to a Windows VM then you should see it pop up in explorer shortly. If you are on Linux / Unix / FreeBSD etc then you will need to mount your drive. Firstly we will need to find out what ID it has been assigned by the operating system – the easiest way to do this is to check the last entries in “dmesg” after adding the device:


[1546647.937025] usb 1-1: new high-speed USB device number 10 using ehci_hcd
[1546648.363146] usb 1-1: New USB device found, idVendor=0781, idProduct=5408
[1546648.363152] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[1546648.363157] usb 1-1: Product: U3 Titanium
[1546648.363160] usb 1-1: Manufacturer: SanDisk Corporation
[1546648.363164] usb 1-1: SerialNumber: 000015E96A63058A
[1546648.364943] scsi11 : usb-storage 1-1:1.0
[1546649.369282] scsi 11:0:0:0: Direct-Access SanDisk U3 Titanium 3.21 PQ: 0 ANSI: 2
[1546649.373306] scsi 11:0:0:1: CD-ROM SanDisk U3 Titanium 3.21 PQ: 0 ANSI: 2
[1546649.374503] sd 11:0:0:0: Attached scsi generic sg5 type 0
[1546649.399562] sd 11:0:0:0: [sde] 8015505 512-byte logical blocks: (4.10 GB/3.82 GiB)
[1546649.403475] sr1: scsi3-mmc drive: 8x/40x writer xa/form2 cdda tray
[1546649.403817] sr 11:0:0:1: Attached scsi CD-ROM sr1
[1546649.404505] sr 11:0:0:1: Attached scsi generic sg6 type 5
[1546649.417867] sd 11:0:0:0: [sde] Write Protect is off
[1546649.417873] sd 11:0:0:0: [sde] Mode Sense: 03 00 00 00
[1546649.422634] sd 11:0:0:0: [sde] No Caching mode page present
[1546649.422800] sd 11:0:0:0: [sde] Assuming drive cache: write through
[1546649.451967] sd 11:0:0:0: [sde] No Caching mode page present
[1546649.452074] sd 11:0:0:0: [sde] Assuming drive cache: write through
[1546649.480289] sde: sde1
[1546649.506074] sd 11:0:0:0: [sde] No Caching mode page present
[1546649.506184] sd 11:0:0:0: [sde] Assuming drive cache: write through
[1546649.506332] sd 11:0:0:0: [sde] Attached SCSI removable disk

The most relevant part is the line reading “[1546649.480289] sde: sde1” – this tells us that the disk has been assigned the descriptor “sde” and the single partition on it “sde1“.

From here we can do a standard *nix mount command and access it normally – in this example I am mounting the newly added sde1 device to a pre-existing directory “/mnt/usb”:

root@merlin:~# mount /dev/sde1 /mnt/usb

We can check the operation has been successful by issuing the “mount” command on its own

root@merlin:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
...
...
...
/dev/sde1 on /mnt/usb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=utf8,shortname=mixed,errors=remount-ro)

Job done! If this has been of interest to you, check out some of the other articles in the VMWare category!