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

use*_*686 9 virtualbox

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

通过原始分区映像,我的意思是一个文件,其中包含我想从中启动的分区的逐字节副本。

我不想从原始磁盘映像启动,也不想从 VHD 启动(它不是原始的,因为它包含其他元数据)。

raa*_*cer 11

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

(在这里找到: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
Run Code Online (Sandbox Code Playgroud)

步骤 2:创建一个虚拟磁盘并将其注册到 VirtualBox。

$ VBoxManage internalcommands createrawvmdk -filename /path/to/usb.vmdk -rawdisk /dev/loop0
Run Code Online (Sandbox Code Playgroud)

第 3 步:将虚拟磁盘附加到虚拟机并启动它。虚拟机将访问虚拟磁盘,该磁盘现在链接到 /dev/loop0,后者又链接到磁盘映像文件。

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

  • 请注意,将用户添加到“磁盘”组将允许该用户及其可能运行的任何恶意软件通过直接访问系统硬盘来规避每一项安全措施,包括破坏数据、窃取数据和成为根。 (3认同)
  • 这是一个不错的答案,但是以 Linux 为中心的。 Windows 解决方案可能是更常见的用例。不确定是否有等效的技术将磁盘、分区和卷与映像文件相关联。否则,必须将 `usb.img` 原始写入磁盘,然后执行步骤 2,但使用 `\\.\PhysicalDrive#`,其中 # 是来自 `diskmgmt.msc` 的磁盘编号,但步骤 3 需要 USB首先,在光学或其他硬盘设备/图像之前,否则它将无法从 USB 启动,除非您按 F12 并手动选择它。 (2认同)

use*_*686 3

这里的两个答案都可以帮助您实现大部分目标,但我最终发现以下内容很有帮助:

  • 首先,请注意,固定大小的 VHD 文件仅在文件末尾包含 1 个元数据扇区,这比开头包含元数据的文件更容易处理。对于启动 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"
    
    Run Code Online (Sandbox Code Playgroud)

    需要填写的重要部分如下:

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

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

    • 1234是文件中要映射到磁盘的扇区Image.raw

    • 5678是文件内您希望映射开始的扇区偏移量Image.raw

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

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

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