Bios 如何在VMDK文件中找到MBR扇区?

Bios 如何在VMDK文件中找到MBR扇区?,bios,mbr,virtual-disk,Bios,Mbr,Virtual Disk,我试图了解vmware bios如何在加载MBR之前找到它。 在物理硬盘中,这很容易——MBR位于第一个扇区。 但是虚拟机中发生了什么? 我创建了两个VM—在第一个vmdk(安装了基于linux的系统)中,我发现MBR位于偏移量0x2A0000处。 在第二个vmdk文件(安装了Windows XP)中,我不止一次找到了MBR,但我找到的所有偏移量都不能除以512(扇区大小),这有点奇怪(据我所知,MBR应该从扇区开始,扇区大小为512字节,在vmdk中=>MBR的起始偏移量必须除以512。

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

在物理硬盘中,这很容易——MBR位于第一个扇区。
但是虚拟机中发生了什么?

我创建了两个VM—在第一个vmdk(安装了基于linux的系统)中,我发现MBR位于偏移量0x2A0000处。
在第二个vmdk文件(安装了Windows XP)中,我不止一次找到了MBR,但我找到的所有偏移量都不能除以512(扇区大小),这有点奇怪(据我所知,MBR应该从扇区开始,扇区大小为512字节,在vmdk中=>MBR的起始偏移量必须除以512。如果我错了,请纠正我)。
所以我想它们可能是备份的副本。。 毋庸置疑,xp.vmdk中的@offset 0x2A0000一点也不有趣。

那么..vmware的BIOS如何找到MBR?此可配置参数位于何处\n如何计算?

其他信息:
-这两个VMDK都是单文件硬盘文件(可以增长到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后,我在主机pc中的每个对应的.vmdk文件中搜索MBR(使用十六进制编辑器),偏移量如我前面所述。


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

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

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

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

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

2.如问题中所述,MBR位于物理硬盘第一个扇区的开头,我想知道它在.VMDK文件中的位置以及VMware如何计算它。
事实证明,在flat.VMDK文件中,它也位于第一个扇区的开头!
看着它们,这是非常直接的前言。但我的不是扁平的。那么,稀疏的.vmdk中会发生什么?mbr位于何处?

3.sparse.vmdk文件具有不同的结构(有关详细结构,您可以在第6页-struct SparseExtentHeader上重点阅读。
在那里找不到MBR\first扇区的计算逻辑,但据我所见(在第5章中解释了我是如何计算的),它是这样的:

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

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

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

4.我用sparse.VMDK创建了两个新的VM(Windows xp和Linux),这种MBR计算方法也证明了它们的有效性(如附件7中的图片所示)。

5.我是如何得到这个公式的?
过滤时使用:
-进程包含vmware
-操作是CreateFile\ReadFile
-路径包含

我读取了每一个.vmdk(及其偏移量)。
我查看了它读取MBR偏移量的位置(在Linux系统中,我知道偏移量是0x2A0000),以及它之前已经读取的内容。跳转到偏移量,看起来它们将帮助我了解那里发生了什么。它们确实做到了:)

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

7.附图: