Avr*_*lev 7 mbr bios virtual-disk
我试图了解vmware bios在加载之前如何找到MBR.
在物理硬盘中很容易 - MBR位于第一个扇区.
但是......在VM中会发生什么?
我创建了2个VM - 在第一个vmdk(安装了基于linux的系统)上,我发现MBR偏移量为0x2A0000.
在第二个vmdk文件(安装了Windows XP)中,我发现MBR不止一次 - 但我发现的所有偏移量都不能除以512(扇区大小),这有点奇怪(就我而言)知道,MBR应该从一个扇区的开头开始+扇区大小是512字节,在vmdk中=> MBR的起始偏移必须除以512.如果我错了,请纠正我.
所以他们可能是备份的副本我想..不用说xp .vmdk中的@偏移0x2A0000没什么好玩的.
那么.. vmware的BIOS如何找到MBR?这个可配置参数位于何处?如何计算?
附加信息:
- 两个VMDK都是1个文件硬盘文件(并且可以增长到40GB).
他们所服务的系统只使用它们(XP使用xp.vmdk,linux使用linux.vmdk,没有额外的VMDK).
- @Windows VM我在\.\ PhysicalDrive0上使用WinHex来获取MBR.it看起来没问题(签名等等).
- @Linux VM我使用命令"dd if =/dev/sda of = mbr.bin bs = 512 count = 1",然后查看十六进制字节以获得MBR.我看着它看起来很好(GRUB,最后签名等).
从VM获取MBR之后,我在每个相应的.vmdk文件中搜索了主机pc中的MBR(使用十六进制编辑器),并且偏移量如上所述.
任何帮助,将不胜感激.谢谢!
看到这个问题的人仍然没有评论或回答,所以我自己做了一点研究.
得出以下结论(最终回答了我的问题):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的虚拟磁盘格式规范,重点关注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.我创建了2个具有稀疏.VMDK的新VM(Windows xp和Linux),这种MBR计算方法也证明了它们两者(正如你在7中的附图中所见).
5.我是如何得到这个配方的?
使用SysInternal的进程监视过滤:
-Process包含vmware
-Operation是CreateFile\ReadFile
-Path包含<.vmdk文件路径>
我得到了每个.vmdk读取(和它的偏移量).
我看了它读取MBR的偏移量(在Linux系统中,我知道偏移量是0x2A0000),以及之前已读过的内容.跳到偏差看起来他们会帮我弄清楚那里发生了什么......他们当然做了:)
6.我没有解释的是为什么原始问题中xp系统中的MBR处于奇怪的偏移(不能除以512).
好吧,说实话,我没有充分的理由,但我忘了提到MBR检查之前我从这个系统中删除了原来的MBR并为VM供电.它问我是否要正常启动窗口,然后才会出现奇怪的偏移(将其复制到备份或其他东西).这里奇怪的是我找不到正常偏移的MBR.我有一些进展,但没有坚定的答案.
如果有人知道,请随时发表评论(:
7.Attached images:
