92

The question is simple and straight forward:

How to boot from an USB drive in VirtualBox?

EDIT:

I have attached usb to VirtualBox as shown in the screenshot.

https://i.stack.imgur.com/UPZZo.png

But it is not possible to boot from an USB drive even when attached (reference).

So I would like to know if there is any other possiblity to boot from an USB drive?

cl-netbox
  • 31,163
  • 7
  • 94
  • 131
Ravan
  • 9,379
  • You can just open your USB, compress everything into an ISO file and boot it normally. – diamondburned Nov 04 '15 at 11:14
  • @Ravan - not to forget often users do not attach in gparted the property "boot" to the usb-stick. This is in menu 'partition' of gparted and there you can edit the flag resp. the label of the usb-stick and activate the parameter "boot". – dschinn1001 Nov 13 '15 at 13:20
  • 1
    @dattutbrus That won't work if you want to change files on the USB – Paul Mar 12 '19 at 14:18
  • @dattutbrus, it doesn't work, your ISO won't be bootable – danilo Oct 03 '20 at 18:29

8 Answers8

111

VirtualBox itself does not support booting from a USB device. In order to boot from a USB device, another bootloader is required. The steps below provide one possible way to accomplish this:

  1. Download Plop Boot Manager (currently v5.0.15)
  2. Extract the file plpbt.iso from the ZIP archive and save it somewhere.
  3. Open the settings for the virtual machine and attach the ISO file:

    enter image description here

  4. Add a filter for the USB device:

    enter image description here

  5. Boot the VM and select the "USB" option in the menu:

    enter image description here

If all went well, the machine should now boot from the USB device.

Nathan Osman
  • 32,155
  • 2
    This is definitely an easier answer than mine. I like it! I wish I could upvote more. =) – Terrance Nov 04 '15 at 18:08
  • 4
    This answer should include that you have to be part of the vboxusers group. – musiKk Jan 15 '16 at 16:53
  • 6
    It does not work for me. When I select usb I wait forever with his screen. Any idea? http://postimg.org/image/dv8w83pi3/ – John Feb 11 '16 at 17:19
  • 11
    I wanted to add that Plop Boot Manager only officially supports EHCI. If you're like me, and you're trying to use a USB 3.0 drive with Plop Boot Manager, it won't work. You could try to use the method mentioned in the other post, but VirtualBox also doesn't seem very fond of working with raw vmdks from USB 3.0 devices. If you only have USB 3 ports on your computer, you can order a USB 2.0 hub and connect the drive through that. It will behave essentially like a USB 2.0 drive. – Andrew Tapia Mar 21 '16 at 00:02
  • i experienced the same thing when trying to install Maverics OSX on virtualbox, because not being able to boot from my DMG file, i tried to boot from USB, but seems no luck @John – gumuruh May 04 '16 at 23:44
  • @gumuruh doesn't OS X use EFI? – Nathan Osman May 05 '16 at 00:53
  • indeed, but what i tried is using a USB installer instead of the DVD / any ISO image file. And that seems not reading or at least what I got is stuck, no respond at all from the Machine after pressing Enter while selecting USB from the boot option. – gumuruh May 05 '16 at 07:05
  • 3
    If you combine this solution with the VMDK one, you can get native USB performance. Otherwise this only works with USB 1.1. – Will Bickford Aug 16 '16 at 16:56
  • see http://askubuntu.com/a/372843/332327 if you don't see options in step 4 - Add a USB filter – XoXo Jan 03 '17 at 00:58
  • 4
    Note that Plop Boot Manager does not support UEFI. You should really mention that in your answer, because people (like me) wanting to install a UEFI-only OS have to go the other way around, ie using Terrance's answer below. – fkorsa Apr 12 '17 at 12:51
  • 1
    If you need to boot UEFI drive then you can use rEFInd boot manager as I described in my answer below. – Leszek Szary Jul 13 '19 at 23:06
  • This is a cool answer, but unfortunately it didn't work for me for booting an ESD USB drive to install Windows. This is possibly related to the UEFI issue mentioned by @fkorsa – Guss Jul 28 '20 at 21:40
  • 1
    Note on the @fakedad's reply: it's not enough to switch from USB 3 to USB 2 in the VM settings, you actually need a USB 2 hub. Just in case someone else reads his reply not carefully enough :) – berezovskyi Aug 22 '20 at 10:58
  • @fakedad Plop Boot Manager 5.0.15 tries loading drivers for EHCI, UHCI, and OHCI. (Although in my case, I can't get the drive to boot in either a USB 2.0 port or a USB 3.0 port.) – Luke Hutchison Nov 10 '21 at 01:01
60

EDIT: 7 Mar 2018

Something to note here. Leaving the USB drive in the computer when you reboot can change the /dev/sd drive letter designation causing the raw usb.vmdk file to point to the incorrect drive so it does not boot in VirtualBox. As a test I left one in my system. It was /dev/sdi before I rebooted, after reboot it was /dev/sdc. When you reboot your computer for any changes please remove the USB drive prior to rebooting. I am looking into if the raw disk can be created from the UUID of the drive instead as that will not change.


Since VirtualBox does not boot to USB drives, you can create a .vmdk file that points to your USB drive for booting to it.

NOTE: You MUST add your user account to the vboxusers group for VirtualBox to see your USB. You MUST also add your account to the disk group as well, or you cannot add the .vmdk file to your Virtual Machine. Added instructions below in EDIT. This also does not copy the USB drive to the hard drive and uses the USB directly. This can be helpful if there is persistence on the USB that you want to keep. Not every situation is the same so this may not work for every case.

First, you need to have your USB you created in your system, and determine what the physical drive is. We are going to assume that your drive is mounted as /dev/sdb1. So, the physical drive would be /dev/sdb.

Next, type in the following from a terminal window to create the .vmdk file that points to the USB drive:

sudo vboxmanage internalcommands createrawvmdk -filename  ~/usb.vmdk -rawdisk /dev/sdb

Or

sudo VBoxManage internalcommands createrawvmdk -filename  ~/usb.vmdk -rawdisk /dev/sdb

Then you should see something similar to this:

RAW host disk access VMDK file /home/ravan/usb.vmdk created successfully.

Note: Some people have had issues of ownership of the newly created file. Take ownership of the new file:

sudo chown $USER:$USER ~/usb.vmdk

Then all you should have to do is to add the .vmdk file to your VirtualBox Virtual Machine and make sure that you can boot to it.

enter image description here

EDIT:

To add your user to the vboxusers group, run the following command:

sudo usermod -a -G vboxusers username

To add your user to the disk group, run the following command:

Note: Adding your user to the disk group can be dangerous and a security risk. It is as dangerous as having sudo access to write to a raw disk.

sudo usermod -a -G disk username

Then you MUST REBOOT your system in order for the changes to take effect.

Before reboot:

enter image description here

After reboot:

enter image description here

Hope this helps!

Terrance
  • 41,612
  • 7
  • 124
  • 183
  • 1
    I got this error:

    VBoxManage: error: VMDK: could not open raw disk file '/dev/sdc'
    VBoxManage: error: Error code VERR_WRITE_PROTECT at /build/virtualbox-VDAABr/virtualbox-4.3.36-dfsg/src/VBox/Storage/VMDK.cpp(3390) in function int vmdkCreateRawImage(PVMDKIMAGE, PVBOXHDDRAW, uint64_t)
    VBoxManage: error: Cannot create the raw disk VMDK: VERR_WRITE_PROTECT
    VBoxManage: error: The raw disk vmdk file was not created

    – John Feb 11 '16 at 17:33
  • 1
    @John Did you add your account to the disk group then logout and back in or reboot after you added the group? – Terrance Feb 11 '16 at 17:36
  • Yes I reboot it and event if I run it as root result is same... – John Feb 11 '16 at 17:54
  • @John If you just type in groups from the command prompt, what groups does it say that you're part of? – Terrance Feb 11 '16 at 17:58
  • adm disk cdrom sudo dip www-data plugdev lpadmin sambashare vboxusers libvirtd bumblebee – John Feb 11 '16 at 18:33
  • @John OK, that looks good. Sorry, I just noticed that the error is that it cannot open your USB drive. Is the drive being used in something else right now? – Terrance Feb 11 '16 at 18:39
  • @John Also, try without sudo in front when creating the vmdk file. – Terrance Feb 11 '16 at 18:43
  • 3
    works well for me. Remarks: do not need to reboot, just to logout/login. Once in the disk group, one should not need to use sudo. – Karl Forner Apr 21 '17 at 09:08
  • 1
    I followed the instructions, but when trying to boot Windows 10 from usb-drive in virtualbox it says "FATAL: Could not read from the boot medium! System halted.". Any suggestions? Thank you for your help! – ArchLinuxTux Nov 18 '17 at 19:28
  • On a Windows machine you must run VirtualBox as an Administrator. – Daniel Sokolowski Nov 22 '17 at 18:31
  • @DanielSokolowski no, the host is openSUSE. The guest is a Windows 10-image. Any help? – ArchLinuxTux Dec 02 '17 at 15:50
  • @ArchLinuxTux I know this is old, but I just added a note to this one about leaving the USB drive in when you reboot the computer itself. You might just simply need to recreate the usb.vmdk file before trying again. – Terrance Mar 07 '18 at 15:57
  • On Windows the command to create a raw VMDK is "%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe" internalcommands createrawvmdk -filename PhysicalDrive1.vmdk -rawdisk \\.\PhysicalDrive1 where the drive number in PhysicalDrive1 is the number shown in Disk Management. – EM0 Aug 21 '18 at 09:12
  • 1
    I'm also getting "FATAL: Could not read from the boot medium! System halted." – brandones Oct 15 '18 at 22:13
  • 1
    @brandones and others getting "FATAL: Could not read from the boot medium! System halted.". Did you use e.g. /dev/sdd instead of /dev/sdd1? I was mistakenly using the latter and got this error. – jirinovo Oct 06 '21 at 05:33
  • I get "A disk read error occurred" when trying to boot a bootable USB drive using this method. – Luke Hutchison Nov 10 '21 at 01:42
20

I came to this post just few days ago. I don't want to use Plop Boot Manager, because my USB stick is already bootable.

So I tried to point the USB stick to a VMDK disk (as in Terrance answer) by creating vboxmanage internalcommands createrawvmdk -filename ~/usb.vmdk -rawdisk /dev/sdb

Unfortunately, this refused to work... I chmod and chown the usb.vmdk disk, and so I was able to attach it to a VM but it simply didn't work.

Finally, I tried another solution and this one has worked flawlessly. Here it is (thanks to Gean Santos for the research):

  1. Insert USB stick and identify it (mine is /dev/sdb , running Sabayon Linux);
  2. Create a .vmdk disk by converting the raw device (i.e. the USB stick) to a VirtualBox disk

    sudo VBoxManage convertfromraw /dev/sdb ./usb.vmdk --format vmdk
    
  3. Now you have a usb.vmdk disk created from your bootable USB stick. I tried also dd the USB stick to an image file and create the .vmdk disk from the image file. It works, as well as .vdi disks created the former way (or from the image file)

  4. Now, give permissions to the created disk in order VirtualBox can access the file. It just means change the file owner to an user that are in vboxusers group. If your VirtualBox install is running OK, than this owner would be, probably, you:

    sudo chown `whoami`:`whoami` ./usb.vmdk
    
  5. Now, you just have to attach the usb.vmdk disk to a Virtual Machine. But it must be attached to an IDE controller. I tried SATA with no success.

A VM example with a bootable <code>usb.vmdk</code> attached to an IDE controller

At this point, you're OK.

Just boot the new VM, press F12 and choose the bootable drive.

Enjoy!

18

The easiest solution is to copy the contents of the USB key into an iso file (well, next time I'll just download the iso on the right machine, no USB key needed in the first place)

dd if=/dev/sdc of=myusbkey.iso

And then add this .iso as an optical drive in the VirtualBox settings, under Storage, Controller: IDE (or SATA, I guess).

No need to make a .vmdk file, VirtualBox supports .iso files.

  • 1
    The thing here is if you have a partition with a bootable image of about 40GB it will generate a file with that size – Sposmen May 10 '18 at 19:47
  • Right, but all other solutions do that too, don't they? – David Faure May 11 '18 at 22:41
  • 1
    @DavidFaure The original answer about using "VBoxManage internalcommands createrawvmdk ..." just creates something that you could think of as equivalent to a shortcut to the USB drive that you have attached to the system at the time that you run the above command. So you don't end up with a potentially huge image of the USB stick as mentioned by user33845 – ConceptRat Oct 10 '18 at 02:45
  • 1
    I don't think this approach works with all USB images. For example, the bootable Chromium images from Arnold the Bat's website are multi-partition and do not correspond to the ISO format. – Troy Folger Apr 03 '20 at 22:21
  • 2
    @TroyFolger Actually, dd command will not work with standard ISOs, because the ISO 9660 spec doesn't describe a full disk image with partition tables, but rather a "filesystem-image" (see man mkisofs). Only hybrid ISOs which have a MBR partition table can be conflated with disk images, and thus compatible with dd (see isohybrid documentation)! – Jules Sam. Randolph May 10 '20 at 15:29
  • Sounds good, doesn't work. At least for my working Debian boot stick. Besides that, technically, the question is about how to boot from a USB drive. This solution suggests to boot from an optical drive. – stackprotector Feb 01 '21 at 11:18
  • It's only a fake optical drive, containing a copy of the USB drive :) – David Faure Feb 02 '21 at 13:14
  • 1
    Add status=progress to see the dd progression – Eido95 Aug 27 '21 at 10:50
6

If your USB drive is an EFI bootable drive then Plop Boot Manager will not work as it does not support EFI boot. What worked for me in such case was using rEFInd boot manager (http://www.rodsbooks.com/refind/).

  1. Download rEFInd bootable iso from http://sourceforge.net/projects/refind/files/0.11.4/refind-cd-0.11.4.zip/download and unzip it.

  2. Open virtual machine settings in VirtualBox and attach the rEFInd CD ISO file.

  3. Make sure that "Enable EFI (special OSes only)" option in virtual machine settings in "System" tab is enabled.

  4. Boot the virtual machine and you should see rEFInd boot menu:

rEFInd menu

  1. Attach your USB drive in VirtualBox.

  2. Press backspace to refresh the menu or just wait few seconds and drive should appear in the menu.

  3. Select your USB drive and hit enter and your USB drive should start booting.

5

I would suggest the following steps.

  1. Open Disks.
  2. Look for the USB.
  3. Click there and at the top right corner you will see a settings icon that has 3 parallel lines.
  4. Click there and choose Create Disk Image...
  5. Select the location and click Create. It will create an .img file which you can use in VirtualBox.
karel
  • 114,770
2

I did not want to run Virtualbox as root. I did not want my user to be of the disk group, having full permissions to all disks.

So here is what I got to work:

Find out what sd the memory stick is. In the following instructions it's sdc.

  • Unmount memory Stick

    su -
    chmod 666 /dev/sdc1
    chmod 666 /dev/sdc
    exit # Run the following command as regular user:
    VBoxManage internalcommands createrawvmdk -filename usb.vmdk -rawdisk /dev/sdc
    su - # Back as root again:
    chmod 777 usb.vmdk
    chmod 666 /dev/sdc
    
  • Attach usb.vmdk virtualbox machine

    chmod 666 /dev/sdc
    
  • Start virtualbox machine
  • After done, reset sdc1 permission for security:

    chmod 660 /dev/sdc1
    

In the above you can see that I had to reset the permissions for the memory stick a few times, because it would get set back to root each time.

I'm using Mandriva Linux, but it should be about the same in Ubuntu

  • The permission fiddling here is very bad advice. First of all, you are doing it as root, so you don't really need to change the permissions to make those commands work. Secondly, it is better to add the appropriate user into the disk group so it isn't even necessary. – Evan Teran Feb 14 '19 at 20:40
  • @ Evan Teran Have you even tried it? And yes the user is part of the disk group. This is the method that I still use to today with my own linux operating system. Wayne Sallee Wayne@WayneSallee.com – Wayne Sallee Feb 15 '19 at 21:10
  • I didn't say it wouldn't work, I said it's not good advice. Regardless of the user's groups, if you are running the commands as root, you shouldn't even need to muck with the permissions because root access anyway.

    Also, making files and folders with 777 and 666 is bad practice, you shouldn't make things world readable or writeable unless they need to be.

    – Evan Teran Feb 16 '19 at 01:12
  • @ Evan Teran it's not good advice to run a program as root, that does not need to be root. The memory stick is only in for a little while, and it is not on a server. It's a matter of where you want to put the risk. I choose to put the risk on the memory stick rather than the system. Wayne@WayneSallee.com – Wayne Sallee Feb 17 '19 at 16:27
  • Correction: I haven't put my user in the disk group. Wayne@WayneSallee.com – Wayne Sallee Feb 17 '19 at 16:41
  • I agree that you shouldn't advise running something as root when you don't need to... but that's exactly what you have done! The very first command you say to issue is su, which is switches the user to roo! – Evan Teran Feb 17 '19 at 23:07
  • 1
    @ Evan Teran It looks like you are trying to justify your position, One has to be root to run cmod. Yes there is sudo, but it's the same thing, and I don't like sudo. One thing that I hate about Stack Exchange, is that people can edit your answers. Your comment has caused me to realize that the answer shows VBoxManage being run as root. I don't run VBoxManage as root. I don't know if that was my mistake, or if it is from someone's edit, so now I will edit it to correct that, if the system will let me edit it. Wayne@WayneSallee.com – Wayne Sallee Feb 19 '19 at 18:41
0

For those attempting to do this using VirtualBox on a Windows host, a fully working solution for this is presented here: https://www.howtogeek.com/187721/how-to-boot-from-a-usb-drive-in-virtualbox/

pbr
  • 248