将物理磁盘克隆到 VDI 虚拟磁盘(VirtualBox)?

将物理磁盘克隆到 VDI 虚拟磁盘(VirtualBox)?

我正在寻找一种方法来将物理磁盘逐扇区克隆到 VDI 虚拟磁盘。在我阅读的过程中,一些不建议使用 dd

如果我不能使用 dd 逐个扇区复制并在 virtualbox 中恢复映像,还有什么可以做到这一点?

请记住:图像必须包含每个扇区的信息(即使未分配),因为我想在 VirtualBox 中执行信息检索和取证测试。

操作系统:Ubuntu

答案1

这实际上应该是对 Austin Hemmelgarn 的回答的评论,但我的声誉分数不够(也许版主可以移动它?)。

对于 qemu-img 版本 3.1+,命令

qemu-img -O vdi /dev/sda /path/to/image.vdi 

不起作用,实际上应该

qemu-img convert -O vdi /dev/sda /path/to/image.vdi

答案2

你正在尝试做物理到虚拟dd是一个可行的工具,但不是最好的。

因为不建议从内部复制正在运行的系统。下面的过程来自文章 使用 VirtualBox 进行物理到虚拟 (P2V) 并要求:

以下是操作步骤。作者描述了如何复制一个分区,因此您需要稍微修改一下才能虚拟化整个磁盘。这是包含引导代码所必需的。

  1. 使用 Clonezilla 启动系统
  2. 在菜单中,选择“Clonezilla Live”
  3. 出现提示时选择您的语言
  4. 根据需要选择所需的键盘映射
  5. 在菜单中,选择“Start_Clonezilla”
  6. 指定“device-image” 7 选择“local_dev”将图像保存到本地设备(注意:如果需要将其保存在其他地方,请做出适当的选择)
  7. 当系统提示连接 USB 设备时,请执行此操作,然后按“Enter”
  8. 选择所需的驱动器或分区来保存映像
  9. 将显示所选驱动器或分区的目录结构。选择用于放置备份映像的适当文件夹
  10. 将显示所选位置的磁盘空间使用情况列表。按“Enter”
  11. 选择“专家”作为备份模式
  12. 选择 savedisk(备份整个磁盘时)或 savepart(备份单个分区时) - 在我的示例中,我使用 savepart,因此某些提示可能会略有不同
  13. 需要提示备份的名称。删除现有信息并为其指定一个简单的名称,如“LinuxBack”。给出的名称是放置备份文件的文件夹名称。记住这个名字,这样你就知道备份文件的位置
  14. 将列出现有驱动器和/或分区的列表。突出显示要备份的驱动器,按“空格键”,然后按“输入”
  15. 在下一个菜单中,选择-q1dd 备份
  16. 下一个菜单显示各种参数选项可供选择。默认情况下,会选中 -c 和 -j2。除非您需要其他选项,否则默认选项即可
  17. 当提示压缩类型时,选择 -z0
  18. 在下一个菜单中,当提示分割文件时,请确保文件大小大于要备份的驱动器或分区
  19. 选择“跳过检查/修复源文件系统”选项,除非你认为有必要
  20. 在下一个菜单中选择跳过检查已保存的图像文件
  21. 对于备份完成后要执行的操作,请选择您喜欢的
  22. 此时,选项已设置,并且应列出正在执行以执行备份的命令行。按“enter”
  23. 系统会提示您是否要继续并执行备份,请按“y”,然后按“enter”
  24. 备份应该开始
  25. 备份完成后退出 Clonezilla,并将选项 14 中指定的目录复制到具有 VirtualBox 的系统(如果虚拟系统将在另一个系统上运行),并确保包含目录本身(在我的示例中,它将被称为 LinuxBack)

将备份文件夹和文件移动到安装了 VirtualBox 的系统后,执行以下命令:

VboxManage convertfromraw --format VDI source.img target.vdi

我自己没有执行过上述过程,并且自上述内容发布以来,一些步骤可能在某些小细节上发生了变化,但总体步骤应该仍然相同。

答案3

首先,您无法在系统运行时执行此操作,或者至少,您无法安全地执行此操作并期望在系统运行时获得正确、连贯的磁盘映像。这是大概这是反对这一做法的最大论点dd,但如果不参考反对这一做法的具体建议就很难说出来。

鉴于此,您可以采取几种方法,但它们都需要两件事:

  • 能够启动到从单独的存储设备(不仅是不同的分区,而且是不同的磁盘)运行的备用操作系统。对于以下大多数方法,我建议使用系统救援光盘为了这。
  • 可以存储整个磁盘映像的地方。如果您使用的是 Live USB 驱动器,如果它足够大,则可以将其用作存储,但您可能需要一个大磁盘才能完成此操作。

一旦你有了这个,你就有几个选择:

部分图像

部分图像是 Linux 的磁盘备份软件,可以高效地存储磁盘映像。它通过仅复制正在使用的扇区并压缩生成的映像文件来实现这一点。它包含在大多数系统恢复 Live CD 中,甚至支持通过网络保存和恢复映像。缺点是它必须支持您正在备份的磁盘上的文件系统,并且它显然不支持 ext4 或 BTRFS。如果这不是一个限制,这就是我建议使用的。我不会在这里详细介绍如何使用它,因为那里有许多很好的教程。

救援

如果您在实时系统中执行此操作,则使用dd此类操作不会成为太大的问题,但它仍然存在局限性,因为重新启动部分副本很麻烦,如果有任何读取或写入失败,它就会失败,并且它不会提供很好的进度信息。这就是GNU 救援进来。它可以做一些类似于的事情dd,但它提供了许多对于复制或克隆磁盘非常有用的功能。使用它的过程与使用基本相同dd,但命令行语法不同。它们有很好的文档,所以我不会在这里浪费空间解释如何使用它,只是要说你几乎总是想使用日志文件,以便它可以恢复部分传输。与 Partimage 一样,ddrescue包含在大多数系统恢复 Live CD 中。

qemu-img

qemu-img是 QEMU 虚拟化软件附带的一个特殊工具,用于在 QEMU 支持的磁盘映像格式之间进行转换。QEMU 非常支持原始磁盘映像和 VDI 映像,因此您可以使用它qemu-img从常规物理磁盘生成 VDI 映像,这意味着您可以跳过在 VirtualBox 中恢复映像的过程。您需要的确切命令如下所示:

qemu-img -O vdi /dev/sda /path/to/image.vdi

您要从哪个/dev/sda磁盘复制,以及/path/to/image.vdi磁盘映像的预期文件名。但是,这种方法有两个缺点,即如果中途中断则无法恢复,并且qemu-img大多数 Live CD 都不包含此功能(更不用说大多数以系统恢复为重点的 Live CD 了)。


如果您打算在与复制磁盘的系统不同的系统上运行 VM,并且可以在两个系统之间建立网络连接,那么您将拥有更大的灵活性,并且可以完全消除对临时存储的需求。在这种情况下,您应该设置 VM 而不是复制磁盘,并将其和源系统引导到 Live CD 环境中。然后,您可以在两个系统之间使用 NBD 或 iSCSI,使用 或 直接通过网络复制dd磁盘ddrescue

相关内容