虚拟机创建过程中镜像格式的的变化过程

这里通过OpenStack的horizon组件来创建一个m1.small的virtual machine,来详细分析下镜像格式的变化以及glance底层具体执行的哪些操作。

(1)首先看一下Glance管理的镜像,如果采用local storage,glance将镜像文件默认存储到/var/lib/glance/image目录下,这里我们选择c036d689-0336-4fcd-a8e0-4aed4dd5e420这个镜像来作为创建虚拟机的模板,此镜像是通过如下命令添加的,因此在horizon中显示的名称为:Precise x86_64。

  1. glance add name="Precise x86_64" is_public=true
  2. container_format=ovf disk_format=qcow2
  3. < ubuntu-12.04-server-cloudimg-amd64-disk1.img
    1. [email protected]:/var/lib/glance/images$ ll -alh
    2. total 2.5G
    3. drwxr-xr-x 2 glance glance 4.0K Jan 30 01:30 ./
    4. drwxr-xr-x 6 glance glance 4.0K Dec 27 21:11 ../
    5. -rw-r----- 1 glance glance 768M Dec 27 04:31 5b298155-8bcf-442f-bc83-bc52f3fe5be9
    6. -rw-r----- 1 glance glance 712M Jan 30 01:31 8760d55b-0d91-4987-8980-d6659c7856ab
    7. -rw-r----- 1 glance glance 223M Dec 25 03:58 c036d689-0336-4fcd-a8e0-4aed4dd5e420
    8. -rw-r----- 1 glance glance 768M Dec 27 04:44 d771b2ce-9310-4757-8ec5-d80f8d1e1712

    通过qemu-img info命令,先看一下镜像文件的大小和格式如下:

    1. [email protected]:/var/lib/glance/images$ sudo qemu-img info c036d689-0336-4fcd-a8e0-4aed4dd5e420
    2. image: c036d689-0336-4fcd-a8e0-4aed4dd5e420
    3. file format: qcow2                                       //qcow2格式的镜像
    4. virtual size: 2.0G (2147483648 bytes)                    //镜像文件大小的上限为2G,实际使用了223M
    5. disk size: 223M
    6. cluster_size: 65536

    (2)通过horizon创建m1.small(具体配置为:1vcpu,2G memory,10G root disk,20G extra volume)的virtual machine

  1. 新创建的虚拟机存放在/var/lib/nova/instances目录下,该目录的大体结构如下:
    1. [email protected]:/var/lib/nova/instances$ ll
    2. total 32
    3. drwxr-xr-x 8 nova nova 4096 Feb 28 21:39 ./
    4. drwxr-xr-x 10 nova nova 4096 Dec 25 01:07 ../
    5. drwxrwxr-x 2 nova nova 4096 Feb 28 21:39 _base/                    //相当于镜像文件的cache目录,在此host上创建的所有的vm,都会先cacha到这里
    6. drwxrwxr-x 2 nova nova 4096 Jan 8 05:56 instance-00000022/         //instance-xxxxx新创建的虚拟机
    7. drwxrwxr-x 2 nova nova 4096 Feb 28 03:40 instance-00000034/
    8. drwxrwxr-x 2 nova nova 4096 Feb 28 04:02 instance-00000037/
    9. drwxrwxr-x 2 nova nova 4096 Feb 28 21:39 instance-0000003a/
    10. drwxrwxr-x 2 nova nova 4096 Jan 30 01:30 snapshots/                 //此host上虚拟机对应的快照文件
  2. 通过查看nova-compute.log可以看到vm创建过程中,镜像文件格式的变化过程,下面总结了下,具体参见下图。

    从glance中得知,有个virtual size =2G的qcow2格式的镜像文件Precise x86_64,它在glance中的ID=c036d689-0336-4fcd-a8e0-4aed4dd5e420

  3.   当Nova Compute接收到vm创建的请求时,通过以下步骤完成一个VM的创建过程:
  4. (1)步:
  5. 从vm的描述文件中获得所使用的image文件的ID,然后向Glance发起索取image文件的HTTP请求,结果是image文件从Glance的存储节点下载到发起请求的host机器上,即:/var/lib/nova/instances/_base目录下:

    1. [email protected]:/var/lib/nova/instances/_base$ ll -alh
    2. total 4.0G
    3. drwxrwxr-x 2 nova nova 4.0K Feb 28 21:39 ./
    4. drwxr-xr-x 8 nova nova 4.0K Feb 28 21:39 ../
    5. -rw-r--r-- 1 nova kvm 2.0G Mar 1 02:06 d265f9d66b8be65448e6c9147a83d65a300e1852
    6. -rw-r--r-- 1 nova kvm 10G Mar 1 02:06 d265f9d66b8be65448e6c9147a83d65a300e1852_10
    7. -rw-rw-r-- 1 nova nova 223M Feb 28 03:17 d265f9d66b8be65448e6c9147a83d65a300e1852.part
    8. -rw-r--r-- 1 nova nova 20G Feb 28 04:01 ephemeral_0_20_None
    9. -rw-r--r-- 1 libvirt-qemu kvm 20G Feb 28 04:01 ephemeral_0_20_None_20
    10. -rw-r--r-- 1 nova nova 40G Feb 28 21:39 ephemeral_0_40_None
    11. -rw-r--r-- 1 libvirt-qemu kvm 40G Feb 28 21:39 ephemeral_0_40_None_40

    即从:c036d689-0336-4fcd-a8e0-4aed4dd5e420 ---> d265f9d66b8be65448e6c9147a83d65a300e1852.part

  6. 通过qemu-img info,可以发现d265f9d66b8be65448e6c9147a83d65a300e1852.part仍为qcow2格式的镜像,且大小与glance上的大小一致。
    1. [email protected]:/var/lib/nova/instances/_base$ sudo qemu-img info d265f9d66b8be65448e6c9147a83d65a300e1852.part
    2. image: d265f9d66b8be65448e6c9147a83d65a300e1852.part
    3. file format: qcow2
    4. virtual size: 2.0G (2147483648 bytes)
    5. disk size: 223M
    6. cluster_size: 65536

    (2)步:

  7. 镜像下载成功后,openstack先去判断image文件的类型是否为qcow2,如果是,则现将其转化为raw格式,否则,直接进入(3)
  8. 这里通过qemu-img convert命令,将qcow2格式转化为raw格式,转化完的镜像为:d265f9d66b8be65448e6c9147a83d65a300e1852,通过qemu-imag info查看其information。

    1. [email protected]:/var/lib/nova/instances/_base$ sudo qemu-img info d265f9d66b8be65448e6c9147a83d65a300e1852
    2. image: d265f9d66b8be65448e6c9147a83d65a300e1852
    3. file format: raw
    4. virtual size: 2.0G (2147483648 bytes)
    5. disk size: 659M

    (3)(4)两步:

  9. 由于所请求的vm的类型为m1.small,其root disk的大小为10G,所以需要resize image fille to 10G。
  10. 这里比较奇怪的是,在resize之前,openstack会将d265f9d66b8be65448e6c9147a83d65a300e1852拷贝一份d265f9d66b8be65448e6c9147a83d65a300e1852_10,然后对d265f9d66b8be65448e6c9147a83d65a300e1852_10进行resize操作,将其变成10G的raw,这可能与vm的备份有关,暂时还没有理解为什么这么做。

    1. cp /var/lib/nova/instances/_base/d265f9d66b8be65448e6c9147a83d65a300e1852 /var/lib/nova/instances/_base/d265f9d66b8be65448e6c9147a83d65a300e1852_10 (raw -->raw 2G-->2G)
    2. qemu-img resize /var/lib/nova/instances/_base/d265f9d66b8be65448e6c9147a83d65a300e1852_10 10737418240 (raw--> raw 2G -->10G)

    (5) 步:

  11. 以(3)中创建的d265f9d66b8be65448e6c9147a83d65a300e1852_10作为base创建qcow2格式的overlay,可以理解为以d265f9d66b8be65448e6c9147a83d65a300e1852_10为base,创建了一个快照disk,具体看对应虚拟机目录下的文件:

    1. [email protected]:/var/lib/nova/instances/instance-0000003a$ ll -alh
    2. total 417M
    3. drwxrwxr-x 2 nova nova 4.0K Feb 28 21:39 ./
    4. drwxr-xr-x 8 nova nova 4.0K Feb 28 21:39 ../
    5. -rw-rw---- 1 libvirt-qemu kvm 23K Feb 28 21:40 console.log
    6. -rw-r--r-- 1 libvirt-qemu kvm 417M Mar 1 02:36 disk
    7. -rw-r--r-- 1 libvirt-qemu kvm 576K Mar 1 01:35 disk.local
    8. -rw-rw-r-- 1 nova nova 1.6K Feb 28 21:38 libvirt.xml

    现在来总结下镜像文件的变化过程:

  12. c036d689-0336-4fcd-a8e0-4aed4dd5e420    (223M -- qcow2)
  13. -->d265f9d66b8be65448e6c9147a83d65a300e1852.part   (223M -- qcow2)
  14. --> d265f9d66b8be65448e6c9147a83d65a300e1852      (2G -- raw)
  15.                   -->d265f9d66b8be65448e6c9147a83d65a300e1852_10   (10G -- raw)
  16.         --> disk    (417M -- qcow2)

3. cache机制

如果之后创建的vm的类型也是m1.small,并且是同一个image,将不会再去glance下载image文件,而是直接利用本地_base下的d265f9d66b8be65448e6c9147a83d65a300e1852_10来直接创建vm的disk文件,大大减少的vm的部署时间。

时间: 2024-12-08 23:24:13

虚拟机创建过程中镜像格式的的变化过程的相关文章

一个杀不死的小强,kill进程无效的原因 记录故障排查过程中kill进程无效的分析过程

今天在处理一个机器异常负载(1000+)的问题,碰到了一个从未碰到过的情况,遇到了一个异常顽固的分子.我使用了所能想到的所有杀进程的方法,却始终无法干掉这个顽固分子,最后终于在谷歌大神的指引下,干掉了这个令我郁闷至极的顽固分子. 1.问题描述:系统:内核 2.6.32.43机器:web A web+NFS B机器负载超高,但是却可以正常登录,响应也很快 分析过程:1.通过top查看,发现CPU和内存都正常,swap使用过大 A机器:/usr/local # toptop - 11:01:29 u

个人学习C++过程中对const的总结:初始化系列之用字面值常量与其他类型的值初始化的区别(一)

const这个系列博大精深,在学习过程一点一点积累记录.但是由于随笔在发布之后不能修改,有了新的想法之后不能再在原随笔上修改,只好用一个个系列来慢慢积累. 哈哈,在发布之后发现是可以继续编辑的,好吧,不管了,这种方式挺好. 正文: 昨晚接触到一个算法题目,回文字符串,在网上找了某段代码,但是发现有点问题,原形大概如下: .... const int len=mystr.size(); //mystr是string的一个实例,其实我挺奇怪这里为什么用int而不是string::size_type或

hadoop安装过程中出现的错误

此次来记录一下我在安装Hadoop安装过程中出现的错误,安装过程参照慕课网林子雨教程进行安装,在尝试过程中出现的错误如下: 1.在安装Ubuntu时,新建虚拟电脑时,并没有在版本的输入框中有Ubuntu(64bit)的显示,得在电脑图标出现之前,进入blos开启CPU的虚拟化,然后才能正常显示 2.配置JAVA_HOME环境变量时,用vim进行在文件中语句输入,操作不会,后来知道用E键编辑,用i键插入,然后esc退出编辑,wq键保存文件并退出,完成文件更改 3.在将hadoop解压到/usr/l

WPF drag过程中显示ToolTip.

原文:WPF drag过程中显示ToolTip. 在drag/drop过程中,我们在判断出over的元素上是否可以接受drag的东西之后,通常是通过鼠标的样式简单告诉用户这个元素不接受现在drag的内容,但是用户通常不知道具体的原因,有时候为了增强客户体验,会在over的过程中显示tooltip来告诉用户为什么不能接受drag的东西或者告诉用户over的元素是什么东西,特别是一些绘图或者其他一些复杂的应用软件,这种方式比较广泛. WPF 给各种控件提供了ToolTip属性,可以通过设置该属性的值

ELK搭建过程中出现的问题与解决方法汇总

搭建过程中出现的问题 elasticsearch启动过程中报错[1] ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, d iscovery.seed_providers, cluster.initial_master_nodes] must be confi

Linux学习笔记(1)Linux虚拟机安装过程中的知识点及常用管理工具

1. VMware的相关知识 (1)建议的VMware的配置: CPU 主频1GHz以上 内存 1GB以上 硬盘 分区空闲空间8GB以上 (2)VMware创建快照 快照的作用是保存虚拟机的现有状态,以便以后可返回到相同状态.快照的特点是:① 可以快速启动虚拟机:② 虚拟机系统崩溃时,可以快速恢复. 创建快照的方法是,点击VMware工具栏上的标志,然后填写快照名称,如下图所示: 恢复快照的方法是单击VMware工具栏上的标志,选择弹出的对话框中创建的快照,然后单击"转到"按钮,即可打

第二天 实战KVM |kvm镜像格式转换|快照创建和恢复|时间配置

一.kvm虚拟机镜像格式转换 1.KVM中磁盘镜像有哪些格式? kvm从qemu继承了丰富的磁盘格式, 包括裸映象(raw images), 原始qemu格式(qcow), VMware格式和更多 2.KVM中raw格式和qcow2格式的比较? kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等.  要使用镜像功能,磁盘格式必须为qcow2 raw格式的话,速度稍微快点,在高版本的qemu-kvm中,几乎不比q

在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载

(一) 接需求  :   需求相关   (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择情况,生成三核对文件. 整体就是这样的一个需求,分sheet,合并单元格,设置各种单元格格式,要有序号. (二)吐槽 新手,什么都不会,同事直接给了这么一个僵硬的需求,哈哈我当时整个人都是懵逼的.一会总结说. (三)具体流程 全部代码,控制层,service,前台,全都贴在最下面. 1 数据库查询

Linux虚拟机安装过程中的常见错误

作为初学Linux的菜鸟,在安装过程中出现了各种各样的错误.在这里把我遇到的错误列出来与大家分享,也希望对初学的人有一些帮助.这里列举了几种常见网络配置问题并详述了其原因和解决方法.如虚拟机不能访问外部网络. 1.Xshell等工具连不上虚拟机的问题,如下图:首先.要保证虚拟机正常开机.并配置正确.其次.是电脑的网络配置. 打开电脑的控制面板->网络和Internet->网络和共享中心->点击更改适配设置.如图显示VMware Network Adapter VMnet1 已禁用.点击右