1. 创建bootable-volume(参考:http://docs.openstack.org/grizzly/openstack-compute/admin/content/instance-creation.html

# nova image-list

+--------------------------------------+----------------------------+--------+--------------------------------------+
| ID | Name | Status | Server |
+--------------------------------------+----------------------------+--------+--------------------------------------+
| 66a81a2c-617f-40ee-b1cb-4a3bd4a82c6e | Cirros | ACTIVE | |
+--------------------------------------+----------------------------+--------+--------------------------------------+

# cinder create --image-id 66a81a2c-617f-40ee-b1cb-4a3bd4a82c6e --display-name my-bootable-vol 1

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

| Property                    | Value                                                          |
+----------------------------+--------------------------------------------------------+
| attachments              | [ ]                                                                 |
| availability_zone       | nova                                                            |
| bootable                    | false                                                            |
| created_at                 | 2013-12-19T02:45:06.333752                    |
| display_description   | None                                                           |
| display_name            | my-bootable-vol                                          |
| id                               | d586ebfa-6d5b-4e11-a3ea-1a6bbc15810c |
| image_id                   | 66a81a2c-617f-40ee-b1cb-4a3bd4a82c6e |
| metadata                   | {}                                                                 |
| size                      | 1                                                                  |
| snapshot_id              | None                                                            |
| source_volid             | None                                                            |
| status                        | creating                                                       |
| volume_type             | None                                                            |
+----------------------------+---------------------------------------------------------+

# nova boot --flavor 1 --block_device_mapping vda=d586ebfa-6d5b-4e11-a3ea-1a6bbc15810c:::0 boot-from-vol-test

创建完成。可以从dashboard看到instance已经启动。需要注意的是,此处没有设置网络相关信息,因此默认启动会为instance添加多个子网地址。且网络连接有问题。

2. 对比常规启动与从volume启动后产生的文件(默认配置)

2.1 常规启动boot from image

计算节点上的/var/lib/nova/instances/$INSTANCE-ID/下,分别有

# ls

console.log  disk  libvirt.xml

三个文件。

其中,disk文件为如下类型:

# file disk

disk: QEMU QCOW Image (v2), has backing file (path /var/lib/nova/instances/_base/0e8a303db3b94bc744faf3c6564e1f056), 41126400 bytes

查看0e8a303db3b94bc744faf3c6564e1f0567b3c6ca:

# file 0e8a303db3b94bc744faf3c6564e1f0567b3c6ca

0e8a303db3b94bc744faf3c6564e1f0567b3c6ca: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200; partition 1: ID=0x83, active, starthead 0, startsector 16065, 64260 sectors, code offset 0x48

此时查看该instance启动时所选择的image文件情况。在控制节点/var/lib/glance/images/下:

# file 66a81a2c-617f-40ee-b1cb-4a3bd4a82c6e

66a81a2c-617f-40ee-b1cb-4a3bd4a82c6e: QEMU QCOW Image (v2), 41126400 bytes

将文件转化为raw格式:

#qemu-img convert -f qcow2 66a81a2c-617f-40ee-b1cb-4a3bd4a82c6e  -O raw cirros.raw

查看cirros.raw:

# file cirros.raw

cirros.raw: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200; partition 1: ID=0x83, active, starthead 0, startsector 16065, 64260 sectors, code offset 0x48

这下,instance启动时的文件及其与使用的image文件之间的关系与存放方式就清楚啦。

2.2 boot from bootable-volume

在dashboard里查到boot-from-vol-test的ID为327d741d-b335-45c2-b212-5a460df82da8。

# ls /var/lib/nova/instances/327d741d-b335-45c2-b212-5a460df82da8
console.log libvirt.xml

咦?里面没有disk文件。那所启动的系统数据究竟在哪里呢?当然是在volume上。

文章开头使用cinder create创建的my-bootable-vol的ID为d586ebfa-6d5b-4e11-a3ea-1a6bbc15810c。

# cat /var/lib/cinder/volumes/volume-d586ebfa-6d5b-4e11-a3ea-1a6bbc15810c

<target iqn.2010-10.org.openstack:volume-d586ebfa-6d5b-4e11-a3ea-1a6bbc15810c>
backing-store /dev/cinder-volumes/volume-d586ebfa-6d5b-4e11-a3ea-1a6bbc15810c
IncomingUser FxNZkBj8nF3HawSYnB8E ZeqGgjDXkSNR4c7gBt4L
</target>

只要对虚拟机做有效操作,都可以看到/dev/cinder-volumes/volume-d586ebfa-6d5b-4e11-a3ea-1a6bbc15810c对应的/dev/dm-6发生改变。

从生成文件对比两种创建虚拟机的方式:boot from image和boot from bootable-volume的更多相关文章

  1. 09 Python两种创建类的方式

    第一种比较普遍的方式: class Work(): def __init__(self,name): self.name = name w = Work('well woker') 这样就简单创建了一 ...

  2. 32 ArcToolBox学习系列之数据管理工具箱——属性域(Domains)的两种创建及使用方式

    属性域分为两类,一种是范围域,一种是编码的值,下面将两个一起介绍,其中涉及到的编码,名称,只是试验,并非真实情况. 一.首先新建一个文件型地理数据库,将数据导入或者是新建要素类都可以 二.打开ArcT ...

  3. 黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式

    ------- android培训.java培训.期待与您交流! ---------- 多线程: 进程和线程: 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者 ...

  4. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  5. Springboot 创建的maven获取resource资源下的文件的两种方式

    Springboot 创建的maven项目 打包后获取resource下的资源文件的两种方式: 资源目录: resources/config/wordFileXml/wordFileRecord.xm ...

  6. 合并BIN文件的两种方法(转)

    源:http://blog.chinaunix.net/uid-20745340-id-1878803.html 合并BIN文件的两种方法 在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一 ...

  7. cocos2dx 帧动画的两种创建方式

    看了好几天cocos2dx的帧动画,现在才有点眉目,为了高效期间我们一般会用到 精灵帧缓存(CCSpriteFrameCache) 和动画缓存(CCAnimationCache) .大体的操作步骤: ...

  8. MySQL命令执行sql文件的两种方法

    MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...

  9. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

随机推荐

  1. Python菜鸟之路:Python基础-类(1)——概念

    什么是类? 在python中,把具有相同属性和方法的对象归为一个类(class).类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化.类不代表具体的事物,而对象表示具体的事物. 类的创建 cla ...

  2. Bootstrap学习-菜单-按钮-导航

    1.下拉菜单(基本用法) 在使用Bootstrap框架的下拉菜单时,必须调用Bootstrap框架提供的bootstrap.js文件.当然,如果你使用的是未编译版本,在js文件夹下你能找到一个名为“d ...

  3. Android系统移植与调试之------->MTK 标准编译命令

    命令格式:./maketek [option] [project] [action] [modules]Option:   -t ,-tee :输出log信息到当前终端   -o , -opt=-- ...

  4. Java内部类(转发:)

    内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. 内部类分为: 成员内部类.局部内部类.静态嵌套类.匿名内部类 . 1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类 ...

  5. 树莓派+pythonista实时监控系统

    客户端(pythonista) import ui from PIL import Image import socket, time, StringIO global closeFlat close ...

  6. 每天一个Linux命令(7)pwd命令

    pwd命令以绝对路径的方式显示用户当前工作目录.命令将当前目录的全路径名称(从根目录)写入标准输出.全部目录使用/分隔.第一个/表示根目录,最后一个目录是当前目录.     (1)用法介绍: pwd[ ...

  7. python 删除文件中指定行

    代码适用情况:xml文件,循环出现某几行,根据这几行中的某个字段删掉这几行这段代码的作用删除jenkins中config.xml中在自动生成pipline报错的时的回滚 start = '<se ...

  8. Data Structure Linked List: Write a function to get the intersection point of two Linked Lists.

    http://www.geeksforgeeks.org/write-a-function-to-get-the-intersection-point-of-two-linked-lists/ 第一第 ...

  9. vue双向绑定补充说明方法

    本文总结自: https://segmentfault.com/a/1190000006599500,将每一个流程提炼出来做一个简单的说明,以免自己被繁杂的逻辑弄昏头脑~ observer: 遍历数据 ...

  10. RabbitMQ点对点的模式

    1.点对点模式  一对一模式.  一个生产者投递消息给队列 只能允许有一个消费者进行消费    如果集群的话 会进行均摊消费   服务器配置不一样 均摊就不优了 长连接 不用三次握手之类的 提高传输效 ...