vhd镜像格式及vhd-util工具应用

简介: 概述 VHD 是微软虚拟磁盘文件格式,qemu和tapdisk2都能支持VHD镜像格式,不仅提供基本的虚拟机卷功能,还可提供磁盘快照、磁盘扩容等高级功能 vhd-util是个linux下的开源软件,通过封装libvhd库函数,提供vhd镜像相关操作。
  • 概述

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

目录
相关文章
|
机器人 测试技术 数据安全/隐私保护
IPPBX配置-如何实现FreePBX/VOS/鼎信网关外呼
目前市场上很多企业客户使用FreePBX来部署某些企业应用服务,有电话机器人,.有时,为了更加准确地实现计费功能,VOS作为一个计费和路由管理功能来和FreePBX集成对接。企业用户中,FreePBX或者外呼平台可以实现应用层的服务,包括智能外呼,呼叫中心外呼解决方案和企业IPPBX功能。今天,我们这里配置一个环境来说明企业内部分机如何通过FreePBX,VOS和鼎信通达网关实现落地服务。主要目的是为企业客户提供一个最完整和权威的FreePBX对接VOS和落地网关配置文档,以便让客户能够快速正确配置所有的相关信息。
1235 0
|
11月前
【LVGL快速入门】LVGL开源框架入门教程之框架移植(三)
【LVGL快速入门】LVGL开源框架入门教程之框架移植(三)
331 2
|
调度 云计算
云计算|OpenStack|错误记录和解决方案(不定时更新)
云计算|OpenStack|错误记录和解决方案(不定时更新)
1886 0
|
11月前
|
区块链 开发者
libp2p是什么?
libp2p是什么?
224 0
|
11月前
|
物联网 数据处理
LLM-05 大模型 15分钟 FineTuning 微调 ChatGLM3-6B(微调实战1) 官方案例 3090 24GB实战 需22GB显存 LoRA微调 P-TuningV2微调
LLM-05 大模型 15分钟 FineTuning 微调 ChatGLM3-6B(微调实战1) 官方案例 3090 24GB实战 需22GB显存 LoRA微调 P-TuningV2微调
301 0
|
JavaScript API 数据安全/隐私保护
Vue3水印(Watermark)
这是一个基于Vue.js的水印组件库,提供了丰富的自定义选项,包括水印的布局、旋转角度、间距等。组件支持文字和图片水印,并可通过API调整样式和位置。
760 0
Vue3水印(Watermark)
|
存储 运维 KVM
QEMU的QCOW2磁盘镜像文件查看
QEMU的QCOW2磁盘镜像文件查看
1422 0
|
前端开发 JavaScript
umi 中useSearchParams 的使用样例
在umi中,`useSearchParams`是一个React Hook,用于获取和操作URL查询参数。以下是一个使用`useSearchParams`的样例: 首先,确保你已经安装了umi和react-router-dom。 1. 在页面组件中使用`useSearchParams`来获取和操作URL查询参数: ```javascript import { useSearchParams } from 'umi'; export default function SearchPage() { const [searchParams, setSearchParams] = useSea
1376 2
|
Java 应用服务中间件 Maven
idea运行SSM项目及启动(tomcat),详细图解
idea运行SSM项目及启动(tomcat),详细图解