xen下离线读取虚拟机磁盘镜像的补丁

     之前在xen-3.4.2和xen-4.1.2下做过几个基于qemu模拟器的补丁,就是想着不用通过xm create(xen3下面)或xl create(xen4下面)启动虚拟机,而能直接去解析磁盘镜像文件,将虚拟磁盘的分区、各个分区里面的文件和目录列表以及文件内容以ls和cat的方式呈现出来。于是就把grub那套文件系统解析的逻辑抠出来,做了很多细节上的调整,然后融合到xen的代码树中的qemu-ioemu,类似于下面的效果:

http://lists.gnu.org/archive/html/qemu-devel/2013-01/msg01777.html,曾经试图向qemu-devel提交这个补丁,对方说不是大众化需求,考虑考虑。。。)

 

首先列出磁盘有哪些类型的分区

=======================

[address@hidden Fri Dec 28 ~/honeypot/xen/xen-4.1.2]$ qemu-img-xen ls~/vm-check.img

partion    fstype  boot

/1       ntfs    *

/2       fat

看启动分区有哪些文件

========================

[address@hidden Fri Dec 28 ~/honeypot/xen/xen-4.1.2]$ qemu-img-xen ls -l -d /1/ ~/vm-check.img
【name        size(bytes)      dir?      date create-time】
AUTOEXEC.BAT     0                    file    2010-12-22        17:30:37
boot.ini                   211                  file    2010-12-23        01:24:41
bootfont.bin       322730                file    2004-11-23        20:00:00

 

读取boot.ini

========================

[address@hidden Fri Dec 28 ~/honeypot/xen/xen-4.1.2]$ qemu-img-xen cat -f /1/boot.ini ~/vm-check.img
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP
Professional" /noexecute=optin /fastdetect

 

    后来需要对两个虚拟磁盘上的文件进行全盘比较,找出那些文件或目录改动了,考虑到性能问题,总不能每个文件都通过qemu-img-xen cat读出来再比较差异吧;正好有fuse这个库,可以将经过改造的qemu-ioemu中暴露的接口再次用fuse包装下,那么虚拟机的磁盘镜像就可以挂载到linux的文件系统了;也就是说对比两个虚拟磁盘的文件变动,变为这样了:启动两个fuse进程,将虚拟磁盘挂载到某个目录,剩下的比较操作就交给linux内置的diff命令工具了,这样省事多了,也简洁多了,关键是比较所耗费的时间由原来的20多分钟(未采用fuse时)缩短到5分钟内。

    这里,我亲身体会到了自定义修改开源工具以及各种工具排列组合产生的“伟大效用”。

    如果对这个功能的补丁感兴趣,可以邮件联系我aware.why@gmail.com

 

posted @   6ruce  阅读(510)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示