如何将 Windows 的 .raw 备份提取到分区?

如何将 Windows 的 .raw 备份提取到分区?

我有一个 .raw 格式的 Windows 7 驱动器 (virtualbox 安装) 备份,我想将其提取到我的空分区中,以便用于 Windows。我使用的是 OSX。有什么想法吗?我试过这个:

sudo dd if=/Volumes/DATA/bootcamp.raw of=/dev/disk0s6

运行正常,但当我重新启动时(我在一台黑苹果上,所以我使用 Chameleon 启动加载器),我得到了正常的 Chameleon 启动菜单,但有一个未知的 GPT 分区(这就是它的名字),如果我选择它,它会说:缺少操作系统。该分区上的 MBR 是否损坏?

答案1

您忘记提供一些关键信息,因此在回答您的问题之前,我会陈述一些假设。

  1. 你有一个整个磁盘的 RAW/dd 映像,其中包括分区表(外观上是 MBR)和其中一个分区中的文件系统
  2. 您想将此磁盘映像写入单独磁盘上的现有分区 (GPT)

问题在于,您将分区表嵌套在分区表中,并混合使用分区表类型进行引导。因此,您有一个 GPT 分区表,其中一个分区不包含 NTFS 之类的文件系统,而是包含一个 MBR 分区表和一个 NTFS 分区。

要解决此问题,您需要跳过 raw/dd 映像的分区表部分,只需将映像的文件系统部分复制到目标分区即可。此外,您可能需要确保目标分区设置了正确的文件系统类型。

快速而简单的解决方案:

sudo dd if=/Volumes/DATA/bootcamp.raw of=/dev/rdisk0s6 skip=63 bs=16K

更准确的解决方案:

  • 安装 Sleuth Kit (TSK) 来精确计算文件系统的位置
  • mmls /Volumes/DATA/bootcamp.raw;此命令将告诉您文件系统的起始位置和长度。在“说明”下查找所需的文件系统。您可能想要显示 NTFS 的文件系统。
  • sudo dd if=/Volumes/DATA/bootcamp.raw of=/dev/rdisk0s6 skip=$Start bs=1 count=$Length; 使用从步骤 2 计算出的值填充 $Start 和 $Length 变量。此外,由于我们将块大小设置为 1,这会影响缓冲,因此这可能会运行得非常慢,但您将准确复制 FS 中的所有字节,而不会多复制一个字节。

*请注意,上述两种解决方案都假设您的 Windows 系统上只有 1 个分区。如果您有更多分区,则必须使用第二种解决方案并根据其他分区进行调整

相关内容