最近研究了以下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的创建过程主要分为几步

  1. 解析参数,
  2. 通过block.c中bdrv_create_file创建一个文件,这是qemu中虚拟磁盘驱动的标准库函数
  3. 通过bdrv_file_open打开文件,在编辑磁盘驱动时,尽量使用qemu自身的函数
  4. 填充头部,写入磁盘,调用bdrv_pwrite
  5. 通过bdrv_truncate扩充文件大小,使其大到能够放置bitmap表。

qemu cow镜像分析的更多相关文章

  1. Linux内核[CVE-2016-5195] (dirty COW)原理分析

    [原创]Linux内核[CVE-2016-5195] (dirty COW)原理分析-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com https://bbs.pediy.com/ ...

  2. qemu核心机制分析-协程coroutine

    关于协程coroutine前面的文章已经介绍过了,本文总结对qemu中coroutine机制的分析,qemu 协程coroutine基于:setcontext函数族以及函数间跳转函数siglongjm ...

  3. qemu毒液漏洞分析(2015.9)

    0x00背景 安全娱乐圈媒体Freebuf对该漏洞的有关报道: 提供的POC没有触发崩溃,在MJ0011的博客给出了修改后可以使qemu崩溃的poc.详见: http://blogs.360.cn/b ...

  4. container-diff 谷歌开源镜像分析工具使用

    1. 安装 curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 & ...

  5. 几篇QEMU/KVM代码分析文章

    QEMU/KVM结合起来分析的几篇文章,代码跟最新的版本有些差异,但大体逻辑一样,写得通俗易懂.我把链接放这里主要是为自己需要查看时调转过去方便,感谢作者的付出! QEMU Source Code S ...

  6. yaffs2文件系统镜像分析

    概述 yaffs2文件系统镜像通过mkyaffs2img工具制作,由源码可编译出两个镜像工具mkyaffsimage和mkyaffs2image,其中mkyaffsimage是针对yaffs文件系统, ...

  7. 【原创】深入理解Docker容器和镜像 -- 分析了docker的命令含义

    10张图带你深入理解Docker容器和镜像 镜像(Image)就是一堆只读层(read-only layer)的统一视角 要点:容器 = 镜像 + 读写层.并且容器的定义并没有提及是否要运行容器. 一 ...

  8. qemu源码分析

    参考:http://lists.gnu.org/archive/html/qemu-devel/2011-04/pdfhC5rVdz7U8.pdf 1. qemu与Bochs的区别: 1. Bochs ...

  9. qemu使用copy-on-write(COW)磁盘

    写时复制(copy-on-write,缩写COW)技术不会对原始的镜像文件做更改,变化的部分写在另外的镜像文件中,这种特性在qemu中只有QCOW格式支持,多个 COW 文件可以指向同一映像同时测试多 ...

随机推荐

  1. repo sync 时的自动续接脚本[转]

    按理说在repo init  ....之后使用repo sync就可以开始下载源码了,但是在下载过程中经常会出现没网速“死”的情况.当然,我修改了/etc/hosts文件之后就再也么有死过.在没网速提 ...

  2. DOM commend

    var comment = document.createComment("commend content"); var elem = document.getElementByI ...

  3. bat命令大全

    一.简单批处理内部命令简介 1.Echo 命令 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置.   语法 echo [{on│off}] [message ...

  4. Android String 转 MD5

    /** * 将字符串转成16 位MD5值 *  * @param string * @return */ public static String MD5(String string) { byte[ ...

  5. cf442B Andrey and Problem

    B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  6. PDO如何选择其他数据库的驱动

    $dsn = "mysql(用的mysql的驱动):dbname=testdb(连接数据库名称);host=127.0.0.1(IP地址,本地是:localhost)"

  7. poj 1236 Network of Schools(tarjan+缩点)

    Network of Schools Description A number of schools are connected to a computer network. Agreements h ...

  8. qt下面例子学习(部分功能)

    from aa import Ui_Formfrom PyQt4.Qt import *from PyQt4.QtCore import *from PyQt4.QtGui import *from ...

  9. Button和ImageButton

    Button----button ImageButton----图片button 共同拥有特征: 都能够作为一个button产生点击事件 不同点 1. Button有text的属性.ImageButt ...

  10. FZU-1925+几何

    题意简单. 由于没有注意到椭圆不一定是在圆心..贡献无数的wa..... #include<stdio.h> #include<string.h> #include<al ...