如何从VirtualBox中的USB驱动器启动?


72

问题很简单明了:

如何从VirtualBox中的USB驱动器启动?

编辑

我已附加usb到VirtualBox,如屏幕截图所示。

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

但是,即使已连接(参考),也无法从USB驱动器引导 。

所以我想知道是否还有其他从USB驱动器启动的可能性?


您可以打开USB,将所有内容压缩为ISO文件,然后正常启动。
dat tutbrus

@Ravan-不要忘记,用户通常不会将属性“ boot”附加到USB记忆棒中。这在gparted的“分区”菜单中,您可以在其中编辑标志分别。标记U盘的标签并激活参数“启动”。
dschinn1001 2015年

1
@dattutbrus如果您想更改USB上的文件,它将无法正常工作
Paul

Answers:


88

VirtualBox本身不支持从USB设备引导。为了从USB设备引导,需要另一个引导程序。下面的步骤提供了一种完成此操作的方法:

  1. 下载Plop Boot Manager(当前为v5.0.15)
  2. plpbt.iso从ZIP存档中提取文件并将其保存在某处。
  3. 打开虚拟机的设置并附加ISO文件:

    在此处输入图片说明

  4. 为USB设备添加过滤器:

    在此处输入图片说明

  5. 引导VM,然后在菜单中选择“ USB”选项:

    在此处输入图片说明

如果一切顺利,则计算机现在应从USB设备启动。


1
这绝对是比我的答案更容易的答案。我喜欢!我希望我能投票更多。=)
Terrance

3
该答案应包括您必须属于vboxusers组。
musiKk '16

6
它对我不起作用。选择USB时,我将永远等待他的屏幕。任何想法?postimg.org/image/dv8w83pi3
约翰·

6
我想补充一点,Plop Boot Manager仅正式支持EHCI。如果您像我一样,并且尝试将USB 3.0驱动器与Plop Boot Manager结合使用,则将无法使用。您可以尝试使用另一篇文章中提到的方法,但是VirtualBox似乎也不喜欢使用USB 3.0设备中的原始vmdks。如果计算机上只有USB 3端口,则可以订购USB 2.0集线器并通过该端口连接驱动器。它的行为本质上类似于USB 2.0驱动器。
fakedad '16

3
如果将此解决方案与VMDK结合使用,则可以获得本机USB性能。否则,这仅适用于USB 1.1。
Will Bickford

50

编辑:2018年3月7日

这里要注意的事情。重新启动时将USB驱动器留在计算机中会更改/dev/sd驱动器号,导致原始usb.vmdk文件指向错误的驱动器,因此它不会在VirtualBox中引导。作为测试,我在系统中保留了一个。是/dev/sdi在我重新启动之前,在重新启动之后/dev/sdc。重新引导计算机以进行任何更改时,请在重新引导之前卸下USB驱动器。我正在研究是否可以从驱动器的UUID创建原始磁盘,因为它不会改变。


由于VirtualBox不会引导至USB驱动器,因此您可以创建一个.vmdk指向USB驱动器的文件以进行引导。

注意: 您必须将用户帐户添加到vboxusersVirtualBox 的组中,才能查看USB。您还必须将帐户也添加到该disk组,否则不能将.vmdk文件添加到虚拟机。在EDIT中添加了以下说明。这也不会将USB驱动器复制到硬盘驱动器,而是直接使用USB。如果要保留的USB上存在持久性,这将很有帮助。 并非每种情况都相同,因此这可能不适用于每种情况。

首先,您需要在系统中创建USB,并确定物理驱动器是什么。我们将假设您的驱动器安装为/dev/sdb1。因此,物理驱动器将为/dev/sdb

接下来,在终端窗口中键入以下内容以创建.vmdk指向USB驱动器的文件:

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

要么

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

然后,您应该看到类似以下内容:

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

注意:有些人遇到了新创建文件的所有权问题。获取新文件的所有权:

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

然后,您所要做的就是将.vmdk文件添加到VirtualBox虚拟机,并确保可以启动该文件。

在此处输入图片说明

编辑:

要将用户添加到vboxusers组,请运行以下命令:

sudo usermod -a -G vboxusers username

要将用户添加到disk组,请运行以下命令:

注意:将用户添加到磁盘组可能是危险的,也存在安全风险。与具有sudo访问权限写入原始磁盘一样危险。

sudo usermod -a -G disk username

然后,您必须重新引导系统才能使更改生效。

重新启动之前:

在此处输入图片说明

重新启动后:

在此处输入图片说明

希望这可以帮助!


1
我收到此错误:VBoxManage:错误:VMDK:无法打开原始磁盘文件'/ dev / sdc'VBoxManage:错误:错误代码VERR_WRITE_PROTECT位于/build/virtualbox-VDAABr/virtualbox-4.3.36-dfsg/src/VBox/函数int vmdkCreateRawImage(PVMDKIMAGE,PVBOXHDDRAW,uint64_t)中的Storage / VMDK.cpp(3390)VBoxManage:错误:无法创建原始磁盘VMDK:VERR_WRITE_PROTECT VBoxManage:错误:未创建原始磁盘vmdk文件
约翰

@John您是否已将帐户添加到该disk组,然后注销并重新登录,或者在添加该组后重新启动?
Terrance

是的,我重新启动它,并且如果我以根结果运行它,则事件是一样的……
John

2
对我来说效果很好。备注:无需重新启动,只需注销/登录即可。一旦进入磁盘组,就不需要使用sudo了。
Karl Forner

1
我遵循了说明,但是当尝试从Virtualbox中的USB驱动器启动Windows 10时,它显示“致命:无法从启动媒体中读取!系统已停止。”。有什么建议么?谢谢您的帮助!
Arch Linux Tux

15

几天前,我来到了这篇文章。我不想使用Plop Boot Manager,因为我的USB记忆棒已经可以启动了。

因此,我尝试通过创建USB记忆棒将其指向VMDK磁盘(如Terrance答案中所示) vboxmanage internalcommands createrawvmdk -filename ~/usb.vmdk -rawdisk /dev/sdb

不幸的是,这种拒绝工作......我chmodchownusb.vmdk盘,所以我可以将它连接到一个虚拟机,但它根本没有工作。

最后,我尝试了另一种解决方案,并且该解决方案完美无缺。这是(感谢Gean Santos的研究):

  1. 插入并识别USB记忆棒(我的是/dev/sdb,正在运行Sabayon Linux);
  2. 创建一个.vmdk由磁盘变换原始设备(即,USB棒)到VirtualBox的磁盘

    sudo VBoxManage convertfromraw /dev/sdb ./usb.vmdk --format vmdk
    
  3. 现在,您已经usb.vmdk从可启动USB记忆棒创建了磁盘。我还尝试dd了将USB记忆棒粘贴到图像文件并.vmdk从该图像文件创建磁盘。它可以正常工作,也可以.vdi使用前一种方式(或从映像文件中)创建的磁盘

  4. 现在,为创建的磁盘授予权限,以便VirtualBox可以访问文件。这仅意味着将文件所有者更改为vboxusers组中的用户。如果您的VirtualBox安装运行正常,则该所有者可能是:

    sudo chown `whoami`:`whoami` ./usb.vmdk
    
  5. 现在,您只需要将usb.vmdk磁盘连接到虚拟机。但是它必须连接到IDE控制器。我尝试SATA没有成功。

VM示例,其中将可引导的<code> usb.vmdk </ code>连接到IDE控制器

此时,您就可以了。

只需引导新的VM,按F12并选择可引导驱动器。

请享用!


USB 3.0是否可以使用(请参见此处的评论askubuntu.com/questions/693719/…)?
关于natty的胡言乱语

我刚刚检查了一下,您基本上复制了USB记忆棒驱动器,并且没有以这种方式使用原始USB记忆棒。
Fedcomp

11

最简单的解决方案是将USB密钥的内容复制到iso文件中(嗯,下一次我将在正确的计算机上下载iso,首先不需要USB密钥)

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

然后在存储,控制器:IDE(我想是SATA)下的VirtualBox设置中,将此.iso添加为光驱。

无需制作.vmdk文件,VirtualBox支持.iso文件。


这个答案应该在顶部。
McMutton

我同意:-)但这仍然需要更多投票;)
David Faure

这里的问题是,如果您的分区具有可引导映像大约40GB,它将生成一个具有size大小的文件
Sposmen

是的,但是所有其他解决方案也都可以,不是吗?
David Faure

1
@DavidFaure有关使​​用“ VBoxManage internalcommands createrawvmdk ...”的原始答案只是创建了一些您可以认为等同于运行上述命令时连接到系统的USB驱动器的快捷方式。因此,您不会像user33845所提到的那样
最终

5

我建议以下步骤。

  1. 打开磁盘。
  2. 寻找USB。
  3. 单击此处,在右上角,您将看到具有3条平行线的设置图标。
  4. 单击此处,然后选择创建磁盘映像...。
  5. 选择位置,然后单击创建。它将创建一个.img文件,您可以在VirtualBox中使用该文件。

2

我不想以root用户身份运行Virtualbox。我不希望我的用户属于磁盘组,而是拥有对所有磁盘的完全权限。

所以这就是我要做的工作:

找出记忆棒是什么sd。在以下说明中为sdc

  • 卸下记忆棒

    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
    
  • 附加usb.vmdk virtualbox计算机

    chmod 666 /dev/sdc
    
  • 启动virtualbox机器
  • 完成后,重置sdc1权限以获得安全性:

    chmod 660 /dev/sdc1
    

在上面,您可以看到我不得不重设几次记忆棒的权限,因为每次都会将其设置为root。

我使用的是Mandriva Linux,但在Ubuntu中应该差不多


在这里摆弄的权限是非常糟糕的建议。首先,您是作为root用户执行的,因此您实际上不需要更改权限即可使这些命令起作用。其次,最好将适当的用户添加到磁盘组中,这样甚至没有必要。
伊万·特兰

@ Evan Teran您是否尝试过?是的,用户是磁盘组的一部分。这是我今天在自己的Linux操作系统上仍然使用的方法。Wayne Sallee Wayne@WayneSallee.com
Wayne Sallee

我没有说这行不通,我说这不是好建议。无论用户的组是什么,如果您以root用户身份运行命令,您甚至都不需要浪费权限,因为无论如何都是root用户访问。另外,使用777和666制作文件和文件夹是一种不好的做法,除非必须这样做,否则不应使它们在世界范围内可读或可写。
伊万·特兰

@ Evan Teran以root身份运行程序不是很好的建议,不需要以root身份运行。记忆棒只有一小段时间,并且不在服务器上。您要在哪里冒险。我选择将风险放在记忆棒上,而不是系统上。Wayne@WayneSallee.com
Wayne Sallee

更正:我尚未将用户放入磁盘组中。Wayne@WayneSallee.com
Wayne Sallee

1

如果您的USB驱动器是EFI可引导驱动器,则Plop Boot Manager将不起作用,因为它不支持EFI引导。在这种情况下,对我有用的是使用rEFInd引导管理器(http://www.rodsbooks.com/refind/)。

  1. http://sourceforge.net/projects/refind/files/0.11.4/refind-cd-0.11.4.zip/download下载rEFInd可启动iso 并解压缩。

  2. 在VirtualBox中打开虚拟机设置,然后附加rEFInd CD ISO文件。

  3. 确保已启用“系统”选项卡中虚拟机设置中的“启用EFI(仅特殊操作系统)”选项。

  4. 引导虚拟机,您应该看到rEFInd引导菜单:

rEFInd菜单

  1. 将USB驱动器连接到VirtualBox。

  2. 按退格键刷新菜单,或仅等待几秒钟,驱动器应出现在菜单中。

  3. 选择您的USB驱动器,然后按Enter,您的USB驱动器应开始启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.