Java解码vhd的磁盘文件,vhd镜像格式及vhd-util工具应用

概述

VHD 是微软虚拟磁盘文件格式,qemu和tapdisk2都能支持VHD镜像格式,不仅提供基本的虚拟机卷功能,还可提供磁盘快照、磁盘扩容等高级功能

vhd-util是个linux下的开源软件,通过封装libvhd库函数,提供vhd镜像相关操作。例如可用于创建vhd镜像、快照等功能。

本文关注vhd-util的使用,及背后vhd镜像格式、libvhd的基本流程

vhd镜像规范

规范可参考 http://wenku.baidu.com/link?url=k-Q8rXCQOTJDhlOalj5KGMyJNQrLKwa6wPaJ0Llg0JAVefxQG_6ITTkqUE03iy3Y3ZsfJteUvZywm30ewJpbGQ0NOPBzj_HtFHIq1ZmRy1u

vhd镜像基本格式如下图

L3Byb3h5L2h0dHAvb3BlbnN0YWNrLndpYWFwcC5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDcvdmhkZm9ybWF0LnBuZw==.jpg

创建镜像

vhd支持三种镜像格式:fix卷、dynamic卷、diff(差分)卷(快照),以下以创建100MB动态卷为例

vhd-util create -n parent.vhd -s 100 #创建动态卷

vhd-util query -n parent.img -sv #查看卷物理大小和虚拟大小

关键信息:

(1)在centos/kvm环境测试,发现创建的卷物理大小为3584byte,结合以上vhd格式规范及代码,发现此vhd文件内容如下:

copyoffooter(512)|header(1024)|bat(512)|batmap(1024)|footer(512)

bat记录的是数据块的地址信息,故512bypte计算方法为:100MB物理卷,即50个block,每个block地址为4byte,及总共200byte,按照扇区(512byte)补齐,则占用1个扇区(512byte)

batmap记录的是掩码信息(?尚在研究中),包括batmapheader(512byte)和batmap(512byte)

(2)fix卷的格式为data|footer(512byte),故创建100MB的fix卷,物理大小为100MB+512byte

创建快照

以下以基于100MB动态卷,创建快照为例

vhd-util snapshot -n son.vhd -p parent.vhd

vhd-util snapshot -n grandson.vhd -p son.vhd

vhd-util query -n grandson.vhd -p

关键信息:

(1)和parent.vhd比较,快照卷(diff卷)增加了parentlocator数据,内容如下:

copyoffooter(512)|header(1024)|bat(512)|batmap(1024)|parentlocator(3*512byte)|footer(512)

parentlocator就是平台码,用来表示文件格式,代码里头会产生PLAT_CODE_MACX(File URL)、PLAT_CODE_W2KU(windows系统,绝对路径)、PLAT_CODE_W2RU(windows系统、相对路径)三条 locator信息

(2)运行以上例子的命令,发现grandson.vhd的parent是parent.vhd而非son.vhd。原因是grandson.vhd没有脏数据(没有写过数据)的场景,vhd-util将grandson.vhd接到son.vhd的上一级镜像上

磁盘扩容

以下以基于100MB动态卷,动态扩容到200MB为例

vhd-util resize -n parent.img -s 200 -j journal

关键信息:

(1)磁盘扩容成功后,磁盘虚拟大小为200MB,物理大小未发生变化(3584)byte。原因是扩容100MB,导致:(1)bat增加 50(100MB为50个block)4byte空间记录新分配的数据块情况。而bat剩余空间(512byte-504byte(原100MB空间)已 满足要求,无需新分配空间);(2)batmap增加空间,而batmap剩余空间已满足要求,无需新分配空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VhdManager.exe VhdManager.ini ; Generated (13.09.2015 18:44:54) by Simple Vhd Manager v1.0 ; www.sordum.org [Main] Language=Auto WinSetOnTop=0 GridLines=1 NewVhdSize=2,5 NewVhdOpt=0 [VirtualDiskFiles] 1=C:\20180619_034757.vhd [Language_English] 01="BlueLife" 02="Attach marked and detach unmarked files" 03="Add file to list" 04="Remove file from list" 05="Refresh list" 06="Disk Management" 07="Action\n Location\n Attached\n Boot Menu\n Virtual Size" 08="&File;\n &Edit;\n &Options;\n Tools \n &Help;" 09="&Add; File" 10="&Create; and Attach VHD" 11="&Attach; Marked Files" 12="&Detach; All Files" 13="&Remove; Entries In Boot Menu" 14="&Exit;" 15="&Attach;" 16="&Detach;" 17="&Read;-Only" 18="&Add; to Boot Menu" 19="&Remove; From Boot Menu" 20="&Paste; File" 21="&Remove;" 22="&Remove; All" 23="&Check; - Uncheck" 24="&Check; All" 25="&Uncheck; All" 26="&Open; Location" 27="&File; Properties" 28="&Disk;" 29="&Cd;-Rom" 30="&Refresh;" 31="&Open; With Explorer" 32="&Change; Drive Letter" 33="&Remove; Letter" 34="&Drive; Properties" 35="&Attach; Marked To System Startup" 36="&Disable; Autorun" 37="&Always; On Top" 38="&Show; Grid Lines" 39="&Add; to Context Menu" 40="&Show; Hidden Files" 41="&Show; File Extensions" 42="Disk &Management;" 43="Diskpart &Command; Prompt" 44="&Msconfig;" 45="&Restart; Windows Explorer" 46="&Donate;" 47="&HomePage;" 48="&Contact;" 49="&About;" 50="Please Wait ..." 51="Select Virtual Disk File\n Virtual Disk Files\n All Files" 52="Enter boot menu name\nOk\nCancel" 53="Added" 54="Unable to write file!" 55="File not found!" 56="The file path must not contain any spaces. Please correct it and try again." 57="Virtual hard disk size \nVirtual hard disk format \n Virtual hard disk type \nDynamically expanding \n Fixed" 58="%drive% not enough free space!\n Do you wish to continue?" 59="An error occurred. Check your settings and try again! \nError Code:%error%" 60="Mount &Options;\n &Mount; \n &Unmount; \n &Open; With Simple VHD Manager\n VHD Mount \n V

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值