zoukankan      html  css  js  c++  java
  • 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镜像基本格式如下图

    enter image description here

    • 创建镜像

    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剩余空间已满足要求,无需新分配空间

  • 相关阅读:
    关于asp.net页面自定义404错误码返回302的最新解决方法
    基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用(概述)
    WPF自定义控件踩坑记录,用户自定义控件 绑定后台定义的 命令 依赖项属性 注意事项 静态
    WPF C# 以非独占式读取本地图片
    C#DataGridView控件60招(一)
    用TEXT文件做数据源
    boost智能指针
    linux下安装boost库
    ASP/ASP.NET程序设计电子书专题下载
    Highcharts 点击多选框取消,添加数据上绑定最大,最小值和图例上绑定提示框数据
  • 原文地址:https://www.cnblogs.com/ruiy/p/vhdImage.html
Copyright © 2011-2022 走看看