文档章节

OpenStack块存储nova-volume工作机制和相关问题

蓝狐乐队
 蓝狐乐队
发布于 2014/04/18 17:45
字数 1626
阅读 451
收藏 0

本文是本人借鉴了网上的一些资料和本人在实际制作OpenStack UBUNTU 12.04的系统镜像过程中进行的总结。记录下来以便日后使用方便。

安装 Ubuntu 镜像

首先下载要安装的 ubuntu 版本:
# wget http://releases.ubuntu.com/lucid/ubuntu-12.04-desktop-amd64.iso

创建一个 10GB 大小的 “硬盘”(raw 格式):
# kvm-img create -f raw ubuntu.img 10G
Formatting 'ubuntu.img', fmt=raw size=10737418240

使用刚才下载的 ubuntu “安装盘” 和刚创建的 “硬盘” 引导启动系统,为了简单起见,在这里使用 kvm 虚拟技术,避开 xen 繁琐的配置。-vnc 参数代表打开 vnc 访问,以便可以用其他机器远程登录到这个引导界面进行安装操作:
# sudo kvm -m 1024 -cdrom ubuntu-12.04-desktop-amd64.iso -drive file=ubuntu.img -boot d -nographic -vnc :0

用 vncviewer 登录引导界面后按照屏幕的提示完成 ubuntu 的安装工作(和在自己电脑上安装 ubuntu 过程一样)。需要注意的是在分区阶段把 10GB 硬盘全部划分成一个 ext4 root 分区,不要创建多个分区也不要创建 swap 区:
# vncviewer 172.21.6.92:5900

安装完后退出(必要时 kill 掉 kvm 进程),按照下面命令启动刚刚安装好的虚拟机镜像 ubuntu.img,如果出现 failed to find romfile “pxe-rtf8139.bin” 的错误提示可以通过安装 kvm-pxe 解决:
# sudo kvm -m 1024 -drive file=ubuntu.img -boot c -nographic -vnc :0
kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"
# sudo apt-get install kvm-pxe

再次用 vnc 登录虚拟机镜像,安装一些必要工具(因为这个镜像将会是模板,所以最好保持最简最小化,不要乱装东西):
# sudo kvm -m 1024 -drive file=ubuntu.img -boot c -nographic -vnc :0
# vncviewer 172.21.6.92:5900
# apt-get update
# apt-get upgrade
# apt-get install openssh-server cloud-init

70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口。删除后系统基本就准备好了,关闭虚拟机:
# sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
# sudo shutdown -h now

调整 Ubuntu 镜像

因为 OpenStack 只接受 ext4 文件系统格式的镜像,所以需要把上面创建的 raw 镜像(kvm-img create -f raw)转换成 ext4 镜像。下面的步骤用来找出镜像文件里面的分区起点是从哪里开始的:
# losetup -f ubuntu.img
# losetup -a
/dev/loop0: [0801]:17432601 (/home/shinian/NovaUbuntuImage/ubuntu.img)
# fdisk -l /dev/loop0
Disk /dev/loop0: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00073f87

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *        2048    20969471    10483712   83  Linux

上面最后一行显示分区是从扇区(sector)2048开始的,每个扇区是512个字节,所以是从 2048 x 512 = 1048576个字节开始的。记住这个1048576,下面会用到。
卸载 loop 后重新从1048576字节开始挂载:
# sudo losetup -d /dev/loop0
# sudo losetup -f -o 1048576 ubuntu.img
# sudo losetup -a
/dev/loop0: [0801]:17432601 (/home/shinian/NovaUbuntuImage/ubuntu.img), offset 1048576

把这整个分区拷贝到一个新文件就是一个我们要的 ext4 文件系统镜像:
# sudo dd if=/dev/loop0 of=ubuntutemplate.img
20969472+0 records in
20969472+0 records out
10736369664 bytes (11 GB) copied, 219.291 s, 49.0 MB/s

用完 loop 后记得卸载:
# sudo losetup -d /dev/loop0

挂载(mount)刚创建的 ext4 文件系统镜像,并修改分区加载表(/etc/fstab),注释或删除以前的,加上 UUID=uec-rootfs 一行:
# sudo mount -o loop ubuntutemplate.img /mnt
# sudo vi /mnt/etc/fstab
#UUID=1dc3a59e-faab-41ee-b232-3300163676bf / ext4 errors=remount-ro 0 1
UUID=uec-rootfs                           / ext4 defaults          0 0

把刚才的虚拟机镜像 ubuntutemplate.img 的文件系统标志改成 ‘uec-rootfs’:
# sudo tune2fs -L uec-rootfs ubuntutemplate.img
tune2fs 1.42 (29-Nov-2011)

发布 Ubuntu 镜像

好了,ubuntu 镜像已经做好了,现在可以发布到云里了,需要3个东西,虚拟机的内核文件、虚拟机的内存盘文件和虚拟机镜像文件:
# cp /mnt/boot/vmlinuz-3.2.0-23-generic /home/shinian/NovaUbuntuImage
# cp /mnt/boot/initrd.img-3.2.0-23-generic /home/shinian/NovaUbuntuImage

# glance add name="ubuntu initrd" disk_format=qcow2 container_format=ovf is_public=true < initrd.img-3.2.0-23-generic
Added new image with ID: b7680f8f-867a-47cb-a887-3dc6846de2d6
# glance add name="ubuntu vmlinuz" disk_format=qcow2 container_format=ovf is_public=true < vmlinuz-3.2.0-23-generic
Added new image with ID: 89627d66-7536-4c38-8a15-8e0353985b9d
# glance add name="ubuntu OS" disk_format=qcow2 container_format=ovf is_public=ture ramdisk_id="b7680f8f-867a-47cb-a887-3dc6846de2d6" kernel_id="89627d66-7536-4c38-8a15-8e0353985b9d" < ubuntutemplate.img
Added new image with ID: d402ac7d-7508-4519-a8e9-2994c19659da

# glance index
ID                                   Name                           Disk Format          Container Format     Size         
------------------------------------ ------------------------------ -------------------- -------------------- --------------
d402ac7d-7508-4519-a8e9-2994c19659da ubuntu OS                      qcow2                ovf                     10736369664
89627d66-7536-4c38-8a15-8e0353985b9d ubuntu vmlinuz                 qcow2                ovf                         4965840
b7680f8f-867a-47cb-a887-3dc6846de2d6 ubuntu initrd                  qcow2                ovf                        14178168


镜像在物理机上的实际位置:
root@node02:/var/lib/glance# ls
glance.sqlite  image-cache  images  keystone-signing

创建虚拟机密钥对:
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa2
/root/.ssh/id_rsa2 already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa2.
Your public key has been saved in /root/.ssh/id_rsa2.pub.
The key fingerprint is:
eb:6c:b0:8d:c0:71:c6:00:d3:eb:43:44:7c:af:60:d5 root@node02
The key's randomart image is:
+--[ RSA 2048]----+
|  o=.  .         |
|   .= o E       |
|   . * .           |
|    * + .        |
|   = = .S      |
|    = o  .       |
|     o =.        |
|      ooo        |
|       .o          |
+-----------------+

导入密钥:
# nova keypair-list
# nova keypair-add --pub_key .ssh/id_rsa2.pub key2

查看镜像:

# nova image-list  
+--------------------------------------+-----------------------------+--------+--------+
| ID                                   | Name                        | Status | Server |
+--------------------------------------+-----------------------------+--------+--------+
| d402ac7d-7508-4519-a8e9-2994c19659da | ubuntu OS                   | ACTIVE |        |
| b7680f8f-867a-47cb-a887-3dc6846de2d6 | ubuntu initrd               | ACTIVE |        |
| 89627d66-7536-4c38-8a15-8e0353985b9d | ubuntu vmlinuz              | ACTIVE |        |
+--------------------------------------+-----------------------------+--------+--------+

查看虚拟机规格:

# nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+
| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | extra_specs |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+
| 1  | m1.tiny   | 512       | 0    | 0         |      | 1     | 1.0         | True      | {}          |
| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      | {}          |
| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      | {}          |
| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      | {}          |
| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      | {}          |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+


创建虚拟机:

# nova boot --flavor 2 --key_name key2 --image d402ac7d-7508-4519-a8e9-2994c19659da test05
+-------------------------------------+--------------------------------------+
| Property                            | Value                                |
+-------------------------------------+--------------------------------------+
| OS-EXT-STS:task_state               | scheduling                           |
| image                               | ubuntu OS                            |
| OS-EXT-STS:vm_state                 | building                             |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000006                    |
| flavor                              | m1.small                             |
| id                                  | c4978044-c86e-4797-bac3-ff9c33a3b237 |
| security_groups                     | [{u'name': u'default'}]              |
| user_id                             | 66b5f4f637384bc9883978c782b03e50     |
| OS-DCF:diskConfig                   | MANUAL                               |
| accessIPv4                          |                                      |
| accessIPv6                          |                                      |
| progress                            | 0                                    |
| OS-EXT-STS:power_state              | 0                                    |
| OS-EXT-AZ:availability_zone         | nova                                 |
| config_drive                        |                                      |
| status                              | BUILD                                |
| updated                             | 2013-08-09T04:49:33Z                 |
| hostId                              |                                      |
| OS-EXT-SRV-ATTR:host                | None                                 |
| key_name                            | key2                                 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                 |
| name                                | test05                               |
| adminPass                           | d5b2iW5k6by6                         |
| tenant_id                           | a8da1a4eaabf4eafb566ca92902bdb5f     |
| created                             | 2013-08-09T04:49:32Z                 |
| metadata                            | {}                                   |
+-------------------------------------+--------------------------------------+

--flavor:指定虚拟机规格
--image:指定使用镜像
--key_name:指定使用key
“test05”为虚拟机名
(一个image可以创建多个虚拟机,但需要你的image,是采用qcow2的格式。)

查看新创建的虚拟机:

# nova show test05
+-------------------------------------+------------------------------------------------------------------------------------+
| Property                            | Value                                                                              |
+-------------------------------------+------------------------------------------------------------------------------------+
| status                              | ERROR                                                                              |
| updated                             | 2013-08-09T04:49:33Z                                                               |
| OS-EXT-STS:task_state               | None                                                                               |
| OS-EXT-SRV-ATTR:host                | None                                                                               |
| key_name                            | key2                                                                               |
| image                               | ubuntu OS (d402ac7d-7508-4519-a8e9-2994c19659da)                                   |
| hostId                              |                                                                                    |
| OS-EXT-STS:vm_state                 | error                                                                              |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000006                                                                  |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                                                               |
| flavor                              | m1.small (2)                                                                       |
| id                                  | c4978044-c86e-4797-bac3-ff9c33a3b237                                               |
| security_groups                     | [{u'name': u'default'}]                                                            |
| user_id                             | 66b5f4f637384bc9883978c782b03e50                                                   |
| name                                | test05                                                                             |
| created                             | 2013-08-09T04:49:32Z                                                               |
| tenant_id                           | a8da1a4eaabf4eafb566ca92902bdb5f                                                   |
| OS-DCF:diskConfig                   | MANUAL                                                                             |
| metadata                            | {}                                                                                 |
| accessIPv4                          |                                                                                    |
| accessIPv6                          |                                                                                    |
| fault                               | {u'message': u'NoValidHost', u'code': 500, u'details': u'No valid host was found.  |
|                                     | ', u'created': u'2013-08-09T04:49:33Z'}                                            |
| OS-EXT-STS:power_state              | 0                                                                                  |
| OS-EXT-AZ:availability_zone         | nova                                                                               |
| config_drive                        |                                                                                    |
+-------------------------------------+------------------------------------------------------------------------------------+

注:公网没有配置,所以建立实例的状态暂时为error;

本文转载自:

蓝狐乐队
粉丝 106
博文 322
码字总数 89813
作品 0
昌平
程序员
私信 提问
OpenStack块存储nova-volume工作机制和相关问题

对swift对象存储的内部原理和相关技术可以查找对象存储、一致性哈希等文章,新浪有几篇技术分享介绍的很好,推荐看一看。 一、相关概念 LVM存储常用术语 物理存储介质(Physical Media):物...

蓝狐乐队
2014/04/18
144
0
OpenStack块存储nova-volume工作机制和相关问题

对swift对象存储的内部原理和相关技术可以查找对象存储、一致性哈希等文章,新浪有几篇技术分享介绍的很好,推荐看一看。 一、相关概念 LVM存储常用术语 物理存储介质(Physical Media):物...

icheer
2013/11/04
472
0
OpenStack centos版安装(二)

在OpenStack第一天文档翻译后,丁丁努力坚持每晚抽时间翻译OpenStack官方网站提供的安装与部署指南,本文翻译自官方安装与部署指南的前四章内容,前四章内容主要是对OpenStack整体安装步骤以...

蓝狐乐队
2014/04/18
268
0
构建OpenStack的高可用性(HA,High Availability) .

原文地址:http://blog.csdn.net/hilyoo/article/details/7704280 1、CAP理论 1) CAP 理论给出了3个基本要素: 一致性 ( Consistency) :任何一个读操作总是能读取到之前完成的写操作结果;...

长平狐
2012/08/24
1K
0
译:块设备和 OpenStack

libvirt 配置了 librbd 的 QEMU 接口,通过它可以在 OpenStack 中使用 Ceph 块设备镜像。Ceph 块设备镜像被当作集群对象,这意味着它比独立的服务器有更好的性能。 在 OpenStack 中使用 Ceph...

Jerry_Baby
2015/02/09
3.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部