虚拟磁盘格式3:VDI

找了很久都没有找到VDI公开的文档,在virtualbox论坛的帖子中找到一点说明。所以本文很多我也不理解,有很多是自己的猜测,不一定正确。

格式

采用小端存储,文件开头是头描述符,格式如下

偏移 意义
0-30 值为<<< Oracle VM VirtualBox Disk Image >>>
40-43 签名,值为7F 10 DA BE
44-47 版本号,前两个字节为主版本号,后两个字节为二级版本号
48-4B 帖子中说是Size of Header,不清楚是什么
4C-4F 磁盘类型,1:动态磁盘(也就是随着文件增加逐步给磁盘分配内存)
50-53 磁盘标记
54-153 磁盘描述
154-157 块偏移(似乎是一个虚拟块号映射为物理块号的表的地址)
158-15B 数据偏移(似乎是分区数据的开始地址)
15C-15F 柱面数
160-163 磁道数
164-167 每磁道扇区数
168-16B 扇区大小
16B-16F 保留
170-177 磁盘大小
178-17B 块的大小
17C-17F 块额外数据(不清楚)
180-183 blockinHDD(不清楚)
184-187 blocksAllocates(不清楚)
188-197 VDI的唯一编号UUID(以下偏移处字段似乎是用于快照)
198-1A7 最后SNAP的唯一编号UUID
1A8-1B7 UUID link
1B8-1C7 UUID parent
1C8- garbage 保留(不清楚)

示例

这是一个kali linux的vdi格式的虚拟磁盘文件,以此为例

其数据如下所示

红框处为磁盘类型,值为1,表示为动态磁盘
黑框处为块偏移,值为0X100000,跳转到此处,如下图所示,似乎是将虚拟块号映射为物理块号,比如前四个字节为逻辑0块,值为0,表示它映射到物理0块(即虚拟磁盘文件的第0块)?一些被FF FF FF FF即-1填充,表示该块未分配物理块?这都是我的猜测。

黄框处为数据偏移,值为0X200000,跳转到此处,如下图所示,可以看到这是这个磁盘的MBR记录,下图红框处,就是第一个分区的扇区偏移地址(相对于MBR),为2048扇区,如果跳转过去,可以看到第一个分区的数据。

红线处为扇区大小,为512B
粉红色为磁盘大小,值为85,899,345,920B,大约是80G
绿色为块的大小,值为1048576B=512*2048,即一个块是2048个扇区

posted @ 2022-05-07 17:15  启林O_o  阅读(348)  评论(0编辑  收藏  举报