qemu cow镜像分析
最近研究了以下qemu最简单的read on direct 镜像格式cow,在稀疏文件的模式下,这种方式还是比较简单,而且有优势的。其优势主要体现在云计算环境中,不需要用到qcow2的那些诸如内部快照,加密,压缩的功能。同时,我觉得作为中间一层的磁盘镜像,要尽可能的利用文件系统的功能而不是像qcow2一样的另立门户,搞一套索引表和块映射表。因为在云计算环境下,一般都是使用主镜像+增量镜像的方式,这种方式最重要的就是要能够加速磁盘的访问,减少内存的开销。所以重新研究一下cow镜像。
1. cow的头部和bitmap表
对于cow镜像而言,没有qcow的cluster分区,完全模拟磁盘的格式,每512B为一个磁盘扇区,我觉得这也是cow在现在的文件系统中没有优势的原因,因为一般的文件系统块大小都超过了512B,如果host的文件系统超过512B,那么也就是说对于一个512B的读写将会很低效。另外,其头部很简单:
struct cow_header_v2 {
uint32_t magic;
uint32_t version;
char backing_file[1024]; //增量镜像的主镜像
int32_t mtime;
uint64_t size; //虚拟磁盘的大小
uint32_t sectorsize;//扇区数目
};
在头部之后紧接着就是bitmap表,bitmap表的1bit代表一个扇区。
2. cow的创建
cow的创建过程主要分为几步
- 解析参数,
- 通过block.c中bdrv_create_file创建一个文件,这是qemu中虚拟磁盘驱动的标准库函数
- 通过bdrv_file_open打开文件,在编辑磁盘驱动时,尽量使用qemu自身的函数
- 填充头部,写入磁盘,调用bdrv_pwrite
- 通过bdrv_truncate扩充文件大小,使其大到能够放置bitmap表。
qemu cow镜像分析的更多相关文章
- Linux内核[CVE-2016-5195] (dirty COW)原理分析
[原创]Linux内核[CVE-2016-5195] (dirty COW)原理分析-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com https://bbs.pediy.com/ ...
- qemu核心机制分析-协程coroutine
关于协程coroutine前面的文章已经介绍过了,本文总结对qemu中coroutine机制的分析,qemu 协程coroutine基于:setcontext函数族以及函数间跳转函数siglongjm ...
- qemu毒液漏洞分析(2015.9)
0x00背景 安全娱乐圈媒体Freebuf对该漏洞的有关报道: 提供的POC没有触发崩溃,在MJ0011的博客给出了修改后可以使qemu崩溃的poc.详见: http://blogs.360.cn/b ...
- container-diff 谷歌开源镜像分析工具使用
1. 安装 curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 & ...
- 几篇QEMU/KVM代码分析文章
QEMU/KVM结合起来分析的几篇文章,代码跟最新的版本有些差异,但大体逻辑一样,写得通俗易懂.我把链接放这里主要是为自己需要查看时调转过去方便,感谢作者的付出! QEMU Source Code S ...
- yaffs2文件系统镜像分析
概述 yaffs2文件系统镜像通过mkyaffs2img工具制作,由源码可编译出两个镜像工具mkyaffsimage和mkyaffs2image,其中mkyaffsimage是针对yaffs文件系统, ...
- 【原创】深入理解Docker容器和镜像 -- 分析了docker的命令含义
10张图带你深入理解Docker容器和镜像 镜像(Image)就是一堆只读层(read-only layer)的统一视角 要点:容器 = 镜像 + 读写层.并且容器的定义并没有提及是否要运行容器. 一 ...
- qemu源码分析
参考:http://lists.gnu.org/archive/html/qemu-devel/2011-04/pdfhC5rVdz7U8.pdf 1. qemu与Bochs的区别: 1. Bochs ...
- qemu使用copy-on-write(COW)磁盘
写时复制(copy-on-write,缩写COW)技术不会对原始的镜像文件做更改,变化的部分写在另外的镜像文件中,这种特性在qemu中只有QCOW格式支持,多个 COW 文件可以指向同一映像同时测试多 ...
随机推荐
- jquery serialize的使用
serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. <!DOCTYPE html> <html lang="en"> <he ...
- RSYSLOG没那么简单
定义系统默认的日志收集还算EASY. 但如何在公司项目里要配置程序员们写的自定义日志,那可能就要用到LOCAL及FILTER过滤这些东东了... 慢慢走吧.. 收集URL备用,都是讲LOCAL,TEM ...
- ISO7816通讯协议在工控主板EM9160中的实现方案
在新的国家电网智能终端相关标准中,规定了通过专门的加密芯片来保证设备数据安全性的方法,而设备主控单元与加密芯片采用了广泛应用的ISO7816通讯协议.工控主板EM9160为了适应这一新的技术需求,对其 ...
- 开发支付宝支付用DELPHI实现 RSA签名
近来根据业务需求 在ERP中集成了微信支付,支付宝支付,开发支付宝支付时最大的障碍就是RSA签名,找了很多资料,最终用 下了个libeay32.pas 根据网上资料最终解决了问题 function ...
- ELK 下载地址elastic
lasticsearch 2.3.5 Elasticsearch can also be installed from our repositories using apt or yum. See R ...
- pywin32 安装错误 ImportError: DLL load failed: 不是有效的 Win32 应用程序
pywin32 安装错误 ImportError: DLL load failed: 不是有效的 Win32 应用程序. 发现是因为没有制定Pywin32的dll所致,我们在用Pywin32开发时, ...
- poj1185:炮兵阵地(状压dp)
也算是比较基础的状压dp了,跟做过的第二道比较又稍微复杂了一点 需要记录之前两行的状态.. 统计结果也稍有不同 另外还学习了一个得到一个整数二进制位 1 的个数的位运算方法 详见代码: #includ ...
- NUnit - 使用感受
Nunit使用 最近项目开始大量使用Nunit, 发现Nunit还是有很多好处的. 1. 测试驱动逻辑,这样可以尽最大可能减少“修改”引入的Bug. 如果你修改了一些东西,导致Case跑不过.请检查你 ...
- JAVA日期处理(Timestamp)
要写一些与数据库连接时的日期处理,pstmt.setDate()的类型是java.sql.Date类型,这种符合规范的类型其实并没有把时分秒存进数据库,所以存取时就应该用setTimestamp()或 ...
- cocos2d-x核心基础类
Application 应用程序入口类 EGLView 绘图句柄 Director Node Layer Scene