前言:

最近接到一个新的任务,是关于虚拟化的中的虚拟磁盘文件(VHD)的。一开始的思路就是去寻找一些相关的源码工具,或是相关的库(C/Java/Python都ok的)。不好找,以下就是关于Python工具源码——PyVinil。版本为PyVinil-0.1.0.

概述:

VHD 是Microsoft Virtual Hard Disk format(微软虚拟磁盘文件)的简称。可以由Microsoft Virtual PC2007,Windows Vista,Windows 7/8,Hyper-V,Windows Server 2008R2/2012,Microsoft Virtual Server 2005等创建,Virtual Box,VMWare等可以挂载使用。
  VHD文件格式可以被压缩成单个文件存放在宿主机器的文件系统上,主要包括虚拟机启动所需系统文件。

本文链接:http://blog.csdn.net/lemon_tree12138/article/details/49664873 -- 编程小笙
                                                                 --转载请注明出处

笔者环境:

1.系统环境:

CentOS 6.5

python 2.7.3  
  gcc version 4.4.7
  gcc-c++

2.依赖环境:

CMake v2.8.3 # yum
  Check v0.9.8 # 下载安装包
  Doxygen 1.7.4 # yum

libvinil # 下载安装包

libuuid-devel

依赖环境的安装:

1.CMake v2.8.3

# yum -y install cmake

2.Check v0.9.8

# 下载安装包

# cd package_home/

# ./configure

# make install

3.Doxygen 1.7.4

# yum -y install doxygen

4.libuuid-devel

# yum -y install libuuid-devel

5.libvinil

# 下载安装包

# cd package_home/

# cmake . # 注意此处要有一个'.'

# make & make install

PyVinil的使用

1.小试牛刀

在我们的依赖环境都OK了之后,我们就可以下载PyVinil,并使用了。

笔者这里的PyVinil使用的是v-0.1.0版本。安装过程如下:

# python setup.py build

# python setup.py install

安装完成之后,我们可以进行如下操作:

2.代码测试

# encoding=utf-8from pyvinil.vhd import VHD
from pyvinil import utilsdef main():vhd = VHD.open("/root/upload/new.vhd")vhd.footer.disk_type = 3vhd.footer.uuid = utils.uuid_generate()print '-' * 50print "pointer: ", vhd.vhd_pointer.valueprint '-' * 50print "DLL: ", vhd.vinil_dllprint '-' * 50print "Footer: ", vhd.footerprint "disk_type: ", vhd.footer.disk_typeprint "real: ", vhd.footer.disk_type.realprint "denominator: ", vhd.footer.disk_type.denominatorprint "imag: ", vhd.footer.disk_type.imagprint "numerator: ", vhd.footer.disk_type.numeratorprint "bit_length: ", vhd.footer.disk_type.bit_length()print "UUID: ", get_string_Hex_nox(vhd.footer.uuid)print "COMMIT: ", vhd.commit_structural_changes()print '-' * 50print "TELL: ", vhd.tell()print '-' * 50vhd_read = vhd.read(1)print "READ ", vhd_read.title(), ":"print "TITLE : ", vhd_read.title()print "CAPITALIZE : ", vhd_read.capitalize()print "FORMAT : ", vhd_read.format()print "ISALNUM : ", vhd_read.isalnum()print "ISALPHA : ", vhd_read.isalpha()print "ISDIGIT : ", vhd_read.isdigit()print "ISLOWER : ", vhd_read.islower()print "ISSPACE : ", vhd_read.isspace()print "ISTITLE : ", vhd_read.istitle()print "ISUPPER : ", vhd_read.isupper()print '-' * 50print "TELL: ", vhd.tell()print '-' * 50vhd_read_2 = vhd.read(2)print "READ ", vhd_read_2.title(), ":"print "TITLE : ", vhd_read_2.title()print "CAPITALIZE : ", vhd_read_2.capitalize()print "FORMAT : ", vhd_read_2.format()print "ISALNUM : ", vhd_read_2.isalnum()print "ISALPHA : ", vhd_read_2.isalpha()print "ISDIGIT : ", vhd_read_2.isdigit()print "ISLOWER : ", vhd_read_2.islower()print "ISSPACE : ", vhd_read_2.isspace()print "ISTITLE : ", vhd_read_2.istitle()print "ISUPPER : ", vhd_read_2.isupper()# 将一个可见字符串转成其对应的十六进制表示
def get_string_Hex_nox(substr):byte_list = bytearray(substr)hexStr = ''for item in byte_list:tmp = hex(item)[2:]if len(tmp) % 2 == 1:tmp = '0' + tmphexStr += tmpreturn hexStrif __name__ == '__main__':main()

3.测试结果

[root@localhost python]# python test_vhd.py
--------------------------------------------------
pointer:  31212112
--------------------------------------------------
DLL:  <CDLL 'libvinil.so', handle 1e1ac50 at 7fd287189490>
--------------------------------------------------
Footer:  <pyvinil.vhd.VHDFooterStructure object at 0x7fd2871d35f0>
disk_type:  3
real:  3
denominator:  1
imag:  0
numerator:  3
bit_length:  2
UUID:  dc88c8c382a94d06bd86d0aa898b02f6
COMMIT:  None
--------------------------------------------------
TELL:  0
--------------------------------------------------
READ  Conectix :
TITLE :  Conectix
CAPITALIZE :  Conectix
FORMAT :  conectix
ISALNUM :  True
ISALPHA :  True
ISDIGIT :  False
ISLOWER :  True
ISSPACE :  False
ISTITLE :  False
ISUPPER :  False
--------------------------------------------------
TELL:  1
--------------------------------------------------
READ  Cxsparse▒▒▒▒▒▒▒▒ :
TITLE :  Cxsparse▒▒▒▒▒▒▒▒
CAPITALIZE :  Cxsparse▒▒▒▒▒▒▒▒
FORMAT :  cxsparse▒▒▒▒▒▒▒▒
ISALNUM :  False
ISALPHA :  False
ISDIGIT :  False
ISLOWER :  True
ISSPACE :  False
ISTITLE :  False
ISUPPER :  False
[root@localhost python]#

小结:

从以上的测试和结果来看,可以看到这个工具并没有提供给我们更多的内容。这些结果我们本就可以通过参考VHD结构文档手动去解析获得。

不过从PyVinil-0.1.0的源码以及系统环境的配置过程来看,这里只是对相关的C的库函数的调用而已。所以,要想从这里获得更多的信息,可能已经走不通了。在后期的调研中,我们要做的事情是自己动手来解析VHD.或是通过一些磁盘挂载程序来挂载硬盘,再从挂载后的磁盘里读数据。(关于挂载vhd磁盘,其实也并非易事。下篇博客再作介绍吧。)

VHD(Virtual Hard Disk)的解析(上篇)——PyVinil的使用相关推荐

  1. linux 生成vhd,Linux 建立 Virtual Hard Disk (VHD)

    Virtual Hard Disk (VHD) 是通过软件技术, 在硬盘建立映像档虚拟硬盘.本文会介绍在 Linux 建立 VHD 的方法. 在 Linux 建立 VHD, 最简单的方法是用 dd 指 ...

  2. Kotlin系列之集合和函数式API完全解析-上篇

    简述: 今天带来的是Kotlin浅谈系列的第八讲,这讲我们一起来聊聊Kotlin这门语言对函数式编程的支持.我们都知道在kotlin这门语言中函数荣升成为了一等公民,所以在支持函数式编程的方面,Kot ...

  3. 直通车的计算机质量分经验,「超级干货」直通车质量分的全面解析——上篇

    原标题:「超级干货」直通车质量分的全面解析--上篇 大家好我是一洋电商小编,今天给大家分享的内容是<直通车质量分的全面解析> 主要分为以下三部分内容和大家分享: 一. 如何正确看待质量得分 ...

  4. Virtual Hard Disk(VHD)文件格式详解

    VHD 镜像格式详解 0. References windows github 1. Overview Microsoft 虚拟化产品中常用的镜像格式是虚拟硬盘 (VHD) 镜像格式.它既用于存储硬盘 ...

  5. Java集合之TreeMap源码解析上篇

    上期回顾 上期我从树型结构谈到了红黑树的概念以及自平衡的各种变化(指路上期←戳),本期我将会对TreeMap结合红黑树理论进行解读. 首先,我们先来回忆一下红黑树的5条基本规则. 1.结点是红色或者黑 ...

  6. eclipse failed to create the java virtual machine 问题图文解析

    eclipse failed to create  the java virtual  machine 解决方法: 1.问题现象 2.java虚拟机初始化失败!寻找eclipse解压路径 3.寻找ec ...

  7. 牛客网数据库SQL实战答案解析上篇

    部分解析摘自牛客网讨论分析 查找最晚入职的员工信息 SELECT * FROM employees WHERE hire_date = (SELECT MAX(hire_date) FROM empl ...

  8. 转:eclipse failed to create the java virtual machine 问题图文解析

    eclipse failed to create  the java virtual  machine 解决方法: 1.问题现象 2.java虚拟机初始化失败!寻找eclipse解压路径 3.寻找ec ...

  9. 安卓 App 性能专项测试之流畅度深度解析-上篇

    指标背景 流畅度,顾名思义是用户感知使用App页面时的流畅情况,"App卡不卡",这是用户最直接的感受. 但是要用量化之后的数据衡量流畅度,在Android平台这边并没有直接有效的 ...

最新文章

  1. php请求aspx,PHP用curl函数POST请求到ASP页面提示无效请求
  2. 多花5美元提速500%,树莓派新品Zero 2 W发布
  3. LINUX :标准c库
  4. 浙江移动智能语音服务器,接口说明
  5. 对ARP病毒攻击的防范和处理及相应工具方法
  6. 文件共享服务器灾备,搭建容灾性强、可管理的的文件共享服务器-windows server 2008 DFS续...
  7. Android Layout XML属性
  8. 如何“打败”CAP定理 【转】
  9. 机器学习基础算法22-提升理论-GBDT、XGBoost、Adaboost、方差与偏方
  10. struts2 模型驱动封装
  11. Win10网卡驱动异常代码56的问题
  12. 方法论——程序员的阿喀琉斯之踵
  13. shopNC注册后无法登陆的问题
  14. GitHub 官宣:弃用 trending 热榜,开发者炸锅了
  15. javaweb网上图书商城案例
  16. ubuntu下文本标注工具BRAT全程离线安装
  17. Silvaco TCAD仿真5——process simulation(Athena)
  18. 学java被“劝退”的第九天
  19. 详谈QTableWidget / QTableView
  20. webgl_gpgpu_birds 样例分析

热门文章

  1. 131. 分割回文串(回溯算法)
  2. 【Flask】sqlalchemy高级用法(注意join的用法)
  3. MySQL—表的完整性约束(外键约束)(一)
  4. [reference]-armv8汇编学习-书籍推荐
  5. [optee_os]-optee中的内核栈、中断栈、abort栈的定义
  6. Docker的常用管理命令Docker将数据挂载到容器的三种方式
  7. gossip 区块链_源代码: 一个最小化的区块链系统
  8. 【攻防演练】蓝方值守阶段经验技巧
  9. 管理员请注意 一条后门病毒攻击链正在针对服务器发起入侵
  10. 安全的交互通道 及 栈回塑检查与伪造