在 VirtualBox 中使用原始分区映像?

在 VirtualBox 中使用原始分区映像?

是否有可能以某种方式让 VirtualBox 直接使用原始分区映像用于虚拟机?

原始分区映像是指包含以下文件的逐字节副本的文件:分割我想从这里启动。

我不想从原始启动磁盘图像,我也没有寻找从 VHD(它不是原始的,因为它包含其他元数据)启动的方法。

答案1

通过循环设备访问磁盘映像

(在此处找到:http://blog.mybox.ro/2010/11/03/how-to-use-a-raw-disk-image-file-in-virtualbox/

步骤1:将磁盘映像与循环设备关联。

$ losetup /dev/loop0 /path/to/usb.img

第2步:创建一个虚拟磁盘并用 VirtualBox 注册它。

$ VBoxManage internalcommands createrawvmdk -filename /path/to/usb.vmdk -rawdisk /dev/loop0

步骤3:将虚拟磁盘连接到虚拟机并启动它。虚拟机将访问虚拟磁盘,该虚拟磁盘现在链接到 /dev/loop0,而 /dev/loop0 又链接到磁盘映像文件。

警告:为了实现这一点,VirtualBox 需要能够访问您创建的循环设备。这意味着要么将您的用户添加到有权访问磁盘的组(在我的 Ubuntu 机器上,这是组“磁盘”),要么您需要以 root 身份运行 VirtualBox。由于我经常摆弄磁盘,所以我使用了第一个选项(这就是为什么我的命令以 $ 而不是 # 开头),但我认为仅以 root 身份运行 VirtualBox 对大多数用户来说是更安全/更好的解决方案。

答案2

这里的两个答案都可以帮助你解决大部分问题,但我最终发现以下答案很有帮助:

  • 首先,请注意,固定大小的 VHD 文件在结尾文件的开头比以元数据开头的文件更容易处理。对于启动 Linux 分区映像,VHD 就足够了。过去VHDTool微软称之为的一个工具它可以立即附加额外的元数据扇区,将原始图像转换为 VHD,但它现在很难在网上找到副本。 然而,我找到了源代码和二进制文件的副本执照显然允许重新分配,所以如果您正在寻找它,请告诉我。或者,可能还有其他工具可以做同样的事情,或者您可以制作相同大小的不同图像并传输附加的扇区(浪费,但可以完成工作)。

  • 否则,VMDK 文件就可以满足您的需要,因为它只是一个文本文件(至少在我的情况下是 LF 行尾,但 CRLF 可能也可以),可以引用其他文件作为块。这是我的一个 VMDK 文件的格式(阅读更多这里):

      # Disk DescriptorFile
      version=1
      CID=YYYYYYYY
      parentCID=ffffffff
      createType="partitionedDevice"
    
      # Extent description
      RW 1234 FLAT "\\.\C:\Path\To\Image.raw" 5678
    
      # The disk Data Base 
      #DDB
    
      ddb.virtualHWVersion = "4"
      ddb.adapterType="ide"
      ddb.geometry.cylinders="16383"
      ddb.geometry.heads="16"
      ddb.geometry.sectors="63"
      ddb.uuid.image="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
      ddb.uuid.parent="00000000-0000-0000-0000-000000000000"
      ddb.uuid.modification="00000000-0000-0000-0000-000000000000"
      ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000"
      ddb.geometry.biosCylinders="1024"
      ddb.geometry.biosHeads="255"
      ddb.geometry.biosSectors="63"
    

    需要填写的重要信息如下:

    • YYYYYYYY:这是内容 ID。虚拟磁盘创建时,它是一个随机的十六进制 32 位值。有关详细信息,请参阅 VMDK 规范。

    • XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX是磁盘的 ID。据我所知,它可以是任何随机 GUID,但我不确定。

    • 1234部门Image.raw在要映射到磁盘的文件中

    • 5678是个部门文件内部Image.raw希望映射开始的偏移量

    据我所知,有关磁盘几何形状的其他部分似乎无关紧要。

请注意,您不需要任何特殊命令来创建 VMDK,但正如其他人所说,VBoxManage internalcommands createrawvmdk也可以为您创建一个,您可能会发现这更容易或更难,具体取决于您要做的事情。

还要注意,VMD​​K 也可以指向实际的分区或磁盘(\\.\PhysicalDriveN在 Windows 等上),但需要注意的是,VirtualBox 不会锁定使用这些磁盘的卷,因此您会遇到写入错误和/或损坏,具体取决于您的操作系统以及卷是否已安装。

答案3

这可能不是您正在寻找的完整解决方案,但您可以启动到原始物理磁盘 - 如果您可以将分区文件挂载/伪装成磁盘,我可以看到它有效。否则,如果可以选择启动到物理磁盘,则在 Windows 7 主机上执行以下步骤:

  1. 创建一个“模拟”VMDK 文件,指向您希望在虚拟机中启动的物理磁盘(http://www.virtualbox.org/manual/ch09.html#rawdisk)。请注意,如果您运行的是 Windows,则需要以管理员身份运行 VirtualBox 管理界面和命令提示符才能使此命令成功执行。
  2. 将模拟 VMDK 附加到 VM。
  3. 在磁盘管理中将磁盘脱机,然后使用 DISKPART 清除其只读标志(https://forums.virtualbox.org/viewtopic.php?f=6&t=38914)。这可确保 VirtualBox 可以读取/写入该磁盘,但主机上的其他设备则无法读取/写入该磁盘。

然后,您就能够使用物理驱动器作为客户操作系统。超级方便。

答案4

在 Linux 中:创建 mbr 文件:

sudo install-mbr --force WinXP.mbr

之后创建一个 vmdk 文件,如下所示:

sudo VBoxManage internalcommands createrawvmdk -filename myUSB.vmdk -rawdisk /dev/sdc  -partitions 1 -relative -mbr WinXP.mbr

/dev/sdc 应该是原始 .img 所取自的设备/usb 的分区。因此,我们将创建一个具有正确配置的 .vmdk conf 文件。

打开创建的 myUSB.vmdk。将 /dev/sdc 替换为 img 文件的路径。删除ralative

需要看起来像这样:

# Disk DescriptorFile
version=1
CID=557ec7f5
parentCID=ffffffff
createType="partitionedDevice"

# Extent description
RW 1 FLAT "myUSB-pt.vmdk" 0
RW 7812500 FLAT "new.img" 0
RW 22497899 ZERO

# The disk Data Base 
#DDB

ddb.virtualHWVersion = "4"
ddb.adapterType="ide"
ddb.geometry.cylinders="16383"
ddb.geometry.heads="16"
ddb.geometry.sectors="63"
ddb.uuid.image="76bb94c9-64f5-4602-a65a-2aca02ce814f"
ddb.uuid.parent="00000000-0000-0000-0000-000000000000"
ddb.uuid.modification="00000000-0000-0000-0000-000000000000"
ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000"
ddb.geometry.biosCylinders="1024"
ddb.geometry.biosHeads="255"
ddb.geometry.biosSectors="63"

相关内容