博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libguestfs实现原理summary
阅读量:7173 次
发布时间:2019-06-29

本文共 1525 字,大约阅读时间需要 5 分钟。

最近在做libguestfs的项目,这周summary一个实现原理:

libguestfs实现原理:

libguestfs主要有三个大的部分:guestfsd,guestfs-lib,guestfish。

其中,guestfsd是一个daemon,libguestfs是一个lib,guestfish是一个命令行的工具。

guestfsd是一个daemon,但是它不是运行在host上的daemon,它运行在guest上,

libguestfs首先用febootstrap和febootstrap-supermin-helper两个工具
将host中的kernel,用得到的一些modules,配置文件和一些工具的rpm package重新组合到一起,
接着在后台启动一个qemu进程读取这个由febootstrap工具链生成的image。在用qemu启动的
这个guest里运行guestfsd这个daemon。guestfsd通过socket和host进行通信,之间建立了
一个通信的协议,它可以通过socket接受来自host端guestfs-lib写到socket的数据。guestfsd
通过分析接受到的数据,进而执行相应的do_*操作,do_*操作实际上是对guest端普通命令的一些
封装,如果想实现一个NEW API,只要在guestfsd里用相应的do_*对普通命令进行封装即可,但是
一定要将这个普通命令程序通过febootstrap打包到qemu启动时读取的image中。

guestfs-lib是一个库,它实现了一些libguestfs的库函数——guestfs_*。这些库函数向socket

发送相应的数据,数据就会被guest端的guestfsd接收到,进而分析所要执行的操作。

guestfish是对guestfs-lib接口函数的一些应用,guestfish的命令都是通过调用guestfs-lib

的库函数来实现的。

因此在使用libguestfs的时候,可以使用guestfish这样的命令行工具,也可以直接在程序(包括C,java

以及libguestfs支持的一些script language)中调用guestfs-lib实现的库函数。

如下图所示:

+--------------------------------+---------------------------------------+

| Host | Qemu Guest |
| +---------+ +----------+ +---+----+ +---------+ +------------+ |
| | gustfish|->|gustfs-lib|->| socket |->|guestfsd |->| command | |
| +---------+ +-----^----+ +---+----+ +---------| +------------+ |
| | | |Example: | |Example: | |
+ +-----------+ | + |md-stop()|->|mdadm --stop| |
| | my prog |-----+ | +---------+ +------------+ |
+--+-----------+-----------------+---------------------------------------+

转载于:https://www.cnblogs.com/linuxkernel/archive/2011/11/28/2266817.html

你可能感兴趣的文章
MacOS X APK 最新版本 反编译
查看>>
vue项目打包上线
查看>>
WebSocket,不再“轮询”
查看>>
HTTP 入门
查看>>
原型链
查看>>
工作中遇到的问题总结
查看>>
从最最最底层出发的深浅拷贝
查看>>
区块链技术对未来行业的影响
查看>>
d3实现中国地图实时刷新地图颜色.md
查看>>
HTML标签学习
查看>>
RunLoop的唤醒探索
查看>>
前端面试题(五)安全篇
查看>>
【刘文彬】【精解】EOS智能合约演练
查看>>
Web前端的发展前景真的这么好吗?
查看>>
调用微信公众号接口上传图片素材
查看>>
源码里面没有引入广告,但是访问网站时却能看到广告,该如何删除广告?
查看>>
我的友情链接
查看>>
Linux考证模拟试题二(含答案)
查看>>
Struts2优化
查看>>
我的友情链接
查看>>