7

我试图了解 vmware bios 在加载 MBR 之前如何找到它。

在物理硬盘中这很容易——MBR 位于第一个扇区。
但是.. VM 会发生什么?

我创建了 2 个虚拟机——在第一个 vmdk(上面安装了基于 linux 的系统)中,我在偏移量 0x2A0000 处找到了 MBR。
在第二个 vmdk 文件(安装了 Windows XP)中,我不止一次找到了 MBR——但我发现的所有偏移量都不能除以 512(扇区大小),这有点奇怪(就我而言知道,MBR 应该从扇区的开头开始 + vmdk 中的扇区大小为 512 字节 => MBR 的起始偏移量必须除以 512。如果我错了,请纠正我)。
所以我猜它们可能是备份的副本。不用说 xp .vmdk 中的@ offset 0x2A0000 没什么意思。

那么.. vmware 的 BIOS 如何找到 MBR?这个可配置参数在哪里\它是如何计算的?

附加信息:
- 两个 VMDK 都是 1 文件硬盘文件(并且可以增长到 40GB)。
他们服务的系统只使用它们(XP 使用 xp.vmdk,linux 使用 linux.vmdk,没有额外的 VMDK)。

- @Windows VM 我在 \.\PhysicalDrive0 上使用 WinHex 来获取 MBR。它看起来不错(签名等)。
- @Linux VM 我使用命令“dd if=/dev/sda of=mbr.bin bs=512 count=1”,然后查看十六进制字节以获取 MBR。我查看了它,它看起来很好(GRUB,最后签名等)。
从 VM 获取 MBR 后,我在每个对应的 .vmdk 文件中搜索主机 pc 中的 MBR(使用十六进制编辑器),并且偏移量如上所述。

任何帮助,将不胜感激。谢谢!

4

1 回答 1

9

看到人们查看这个问题,但仍然没有评论或答案,所以我自己做了一些研究。
得到以下结论(最终回答了我的问题):

1.当使用 VMware(.VMDK 文件)创建 XXX GB 虚拟硬盘时,它可以是两种类型之一:平面或稀疏(它们也可以拆分为多个.VMDK 文件,但我没有在我的研究中涵盖这些)。
- flat = 所有硬盘空间 (XXX GB) 在创建时分配一次。
磁盘上的 .VMDK 文件大小为 XXX GB。

-稀疏= 硬盘文件是可消耗的(最多 XXX GB)。
.VMDK 文件大小在开始时很小,并在需要时增大。

正如我在附加信息中的问题中所述,两个 .VMDK 都很稀疏.

2.正如问题中提到的,MBR位于物理硬盘第一个扇区的开头,我想知道它在.VMDK文件中的位置以及VMware如何计算它。
事实证明,在平面 .VMDK 文件中,它也位于第一个扇区的开头!
看着它们时,这是非常直截了当的前言……但我的并不平坦。那么,稀疏的 .vmdk 会发生什么?mbr 在哪里?

3.sparse .vmdk文件有不同的结构(详细结构可以阅读VMware的Virtual Disk Format Spec,重点看第6页-struct SparseExtentHeader。
找不到 MBR \ 第一个扇区如何计算的逻辑,但据我所知(在 5 中解释了我是如何得到它的)它是这样的:

@ .VMDK 偏移量 0x38 - 0x3F(8 字节长)位于 gdOffset.it 存储元数据的偏移量(****)。
元数据的前 4 个字节是要跳转到的下一个偏移量(****)。
在那里,接下来的 4 个字节是 MBR 的偏移量(****)
(****) 表示扇区中的偏移量。例如,1 表示偏移 512,2 表示 1024,等等。

总而言之,它看起来像这样:
假设“数据存储在偏移 0x38-0x3F(8 字节长)”为 [(0x38):8]。

然后,
MBR 偏移 = 512 X [(512 X [(512 X [(0x38):8]):4]):4]

4.我用稀疏的 .VMDK 创建了 2 个新的虚拟机(Windows xp 和 Linux),这种 MBR 计算方法也证明了它们都适用(如附图 7 所示)。

5. 我是怎么得到这个公式的?在过滤时
使用SysInternal 的进程监视器
: -Process contains vmware
-Operation is CreateFile \ ReadFile
-Path contains <.vmdk file path>

我读取了每一个 .vmdk 文件(并且它是偏移量)。
我查看了它读取 MBR 偏移量的位置(在 Linux 系统中,我知道偏移量是 0x2A0000),以及它之前已经读取的内容。跳到看起来像是要帮助我弄清楚那里发生了什么的偏移量..他们当然做到了:)

6.我没有解释的是为什么我最初的问题中xp系统中的MBR处于一个奇怪的偏移量(不能被512除)。
好吧,老实说,我没有充分的理由,但我忘了提到在 MBR 检查之前,我从该系统中删除了原始 MBR 并为 VM 供电。它问我是否要正常启动Windows,然后才出现在奇怪的偏移量中(将其复制到那里进行备份或其他东西)。这里奇怪的是我在正常偏移量中找不到这个MBR。我取得了一些进展,但没有确定的答案。
如果有人知道,请随时发表评论(: 7.

附件图片:
Windows XP MBR 查找说明 Linux MBR 查找说明

于 2015-01-07T22:39:06.047 回答