可以尝试的事情:

可以尝试的事情:

我在 FreeBSD 11.1 上的 VirtualBox 中有一个无头运行的 Windows 10 VM。它运行没有问题。我想让 VM 能够访问物理 CD/DVD,这样我就可以插入真正的光盘并在 VM 中打开它们。

当我做

VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0

虚拟机不再启动。

$ VBoxManage startvm MyVM
--type headless Waiting for VM "MyVM" to power on...
VBoxManage: error: The VM session was aborted
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component SessionMachine, interface ISession

我确保/etc/devfs.conf包含

perm cd* 0660
perm xpt0 0660
perm pass* 0660

并且我的用户属于操作员组。此外,VirtualBox 日志不包含任何明显的错误或警告。虚拟机直接中止,没有任何有用的诊断信息。移除 CD 设备可使虚拟机恢复功能。

有任何想法吗?

更新:它似乎VBoxHeadless因分段错误而关闭。原因我仍不清楚。来自/var/log/messages

May 5 12:05:31 the_computer kernel: vboxdrv: XXXXXXXXXXXXXXXX VMMR0.r0
May 5 12:05:31 the_computer kernel: vboxdrv: XXXXXXXXXXXXXXXX VBoxDDR0.r0
May 5 12:05:31 the_computer kernel: pid 61621 (VBoxHeadless), uid 1001: exited on signal 11

更新 2:中止点VBoxHeadless是 VM 初始化 ATA 设备的位置。如果没有 CD 设备,我会在日志中看到以下内容:

...
00:00:01.280311 VD#0: Cancelling all active requests
00:00:01.280468 PIIX3 ATA: LUN#0: no unit
...

但当我把它加回去时,我得到了

...
00:00:00.273730 VD#0: Cancelling all active requests
[end of file]

答案1

可以尝试的事情:

根据 FreeBSD 手册 §21.6.3:VirtualBox™ 主机 DVD/CD 访问

需要运行 HAL 才能使 VirtualBox™ DVD/CD 功能正常运行

因此您需要...

启用它/etc/rc.conf并启动它(如果它尚未运行)

这是通过添加hald_enable="YES"到您的/etc/rc.conf文件然后执行来完成的

# service hald start

/dev/xpt0这是对用户需要访问、/dev/cdN和 的要求的补充/dev/passN,根据手册的同一节,这“通常通过使用户成为 的成员来实现operator”,并通过在 中添加这些行来更正设备的权限“ /etc/devfs.conf

perm cd* 0660
perm xpt0 0660
perm pass* 0660

并(以便系统能够利用这些更改)重新启动devfs服务

# service devfs restart

如果完成上述所有操作后,您的虚拟机在连接到主机 CD/DVD 驱动器时仍无法启动,请考虑遵循以下建议(摘自同一页面如上):

如果需要,请先创建一个空的 IDE CD/DVD 设备。然后从弹出菜单中选择主机驱动器,以选择虚拟 CD/DVD 驱动器。

如果您不能使用提到的“弹出菜单”,我认为(从阅读文档)以下内容应该是命令行等效的:

  1. 关闭虚拟机电源后:连接一个空的虚拟 IDE CD/DVD 设备

    VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium emptydrive
    
  2. 启动虚拟机:

    VBoxManage startvm MyVM
    
  3. 当虚拟机仍在运行时:切换到使用主机驱动器

    VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0
    

不幸的是,它可能仍然不起作用:

看来 VirtualBox 中可能存在一个错误,导致此功能无法在您的系统上运行。我建议向项目的 VirtualBox 开发人员报告此问题错误追踪器

解决方法:

在修复此问题之前,我建议通过从物理光盘制作 ISO 文件以用于 VirtualBox 来解决此问题。(有些人可能更喜欢这种方法。)

  1. 读取光盘的块和卷大小,以便制作完美的 ISO
    (这一步实际上并不必要的,但是,没有它而制作的 ISO 的校验和将与用于制作 CD 的原始 ISO 文件不同,因为“末尾有一对零数据块”,而且卷大小以后可能会有用)
    isoinfo -d -i /dev/cd0 | grep -i -E 'block size|volume size'

    您将获得类似这样的输出:

    Logical block size is: 2048
    Volume size is: 327867
    
  2. 用于dd复制光盘内容

    • dd if=/dev/cd0 of=<cd name>.iso bs=<block size from step 1> count=<volume size from step 1>
      例如,我将从上面的示例光盘制作一个名为“MyVirtualCD.iso”的 ISO:
      dd if=/dev/cd0 of=MyVirtualCD.iso bs=2048 count=327867
    • 如果您跳过了步骤 1,则只需离开bscount如下所示:
      dd if=/dev/cd0 of=MyVirtualCD.iso
      您的 ISO 仍然可以正常工作,只是最后会有一些不必要的“零数据块”。
    • 如果你正在使用它的新版本,可能支持通过添加到上面的命令行来dd显示它的状态status=progress
    • 如果你正在使用旧版本dd,或者想要一个更好看的进度指示器,你可以pv通过“Ports 收藏”或者“新鲜港口”,并dd通过管道传输输出pv以查看统计数据,由于我们从步骤 1 中知道了卷大小,因此可以得到准确的进度条:
      dd if=/dev/cd0 | pv -s <volume size from step 1> | dd of=<cd name>.iso

      在我们的示例中,具体如下:
      dd if=/dev/cd0 of=MyVirtualCD.iso | pv -s 327867 | dd of=MyVirtualCD.iso

  3. 现在您可以将 ISO 附加到 VM 并启动它:

    • VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium /path/to/MyVirtualCD.iso
    • VBoxManage startvm MyVM
    • 此外,如果您在启动虚拟机时将其设置为使用emptydrive前面提到的介质,那么空的虚拟 CD 驱动器将可供您storageattach在虚拟机运行时使用相同的命令随时交换其中一张虚拟 CD。

资料来源:
FreeBSD 使用手册VBoxManage 文档托马斯·克伦 维基询问 Ubuntu 的答案来自“phoibos”

答案2

我认为您的错误在于您应该将存储定义为 IDE Controller而不是SATA Controller

该命令应该看起来像:

VBoxManage storageattach MyVM --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0

如果遇到问题,请尝试以下操作:

   $ VBoxManage storagectl MyVM --name "IDE Controller" --remove 
   $ VBoxManage storagectl MyVM --name "IDE Controller" --add ide
   $ VBoxManage storageattach MyVM --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0

相关内容