栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 学术 > 学术期刊 > 科技资讯

浅析如何在Ubuntu使用qcow2快速创建虚拟机

浅析如何在Ubuntu使用qcow2快速创建虚拟机

蒋熹

摘 要:在虚拟机的复制過程中,假设ubuntu-12.10.raw已经安好操作系统,复制Image就可以解决这个问题,但是如果直接复制,会导致开销很大,尽管避免了在虚拟机中安装操作系统,但是如果Image的size上升之后,时间花销也不小,本文通过笔者的实际操作经验,浅析了如何在Ubuntu系统中使用qcow2技术快速创建多个配置相同的虚拟磁盘,以便于在云计算平台中快速的分发虚拟机环境。

关键词:qcow2 虚拟磁盘 云计算

中图分类号:TP311 文献标识码:A 文章编号:1672-3791(2016)11(a)-0000-00

在虚拟机的复制过程中,假设ubuntu-12.10.raw已经安好操作系统,复制Image就可以解决这个问题了。我们基于复制Image的方案,很容易写出一个可运行的脚本来。但是可以看出,这种方案的关键在于复制Image,由于Image的大小一般都是几个G至上百G,如果直接复制,会导致开销很大,尽管避免了在虚拟机中安装操作系统,但是如果Image的size上升之后,时间花销也不小。

由于raw格式磁盘复制会花费大量的时间,本文尝试使用ubuntu-12.10.raw作backing file,创建出大量的qcow2磁盘,以供批量的虚拟机使用。根据使用经验可以知道,创建qcow2虚拟磁盘的时间,与运行ls命令时间几乎一样。那么如果采用qcow2格式来解决这个问题,就可以成功快速地建立起大批量的虚拟机。

01 #!/bin/bash

02 For I in $(seq 10); do

03 File=ubuntu-$(i),xml

04 Cp template.xml $file

05 Sed -I “s,%VM_NAME%,ubuntu-$(i),g” $file

06 UUID=~uuidgen~ #更改UUID

07 Sed -I “s,%UUID,$UUID,g” $file

08 Qemu-img creat -f qcow2 -o \

基于qcow2的方案,除了主机名和网络问题,已经比较完善了,不过利用这种方法建立起来的虚拟机,容易遇到以下问题:

(1)主机名完全相同。

(2)网络有时候无法使用,虚拟机内保存的MAC地址仍是backing file中的MAC地址。

在解决这两个个问题之前,我们首先考虑清楚问题的限制条件:

(1)主机名的更改不能手动,需要体现自动化。

(2)不能等到虚拟机启动之后再更改。启动之后再更改主机名,需要再次重启主机。

(3)网络问题,主要是由于MAC地址与定义文件中的MAC不一致导致。那么需要将qcow2文件中记录的MAc地址修政得和定义文件中一致。

所以解决这个问题的唯一办法就是将qcow2 image挂载之后,再更改其中的主机名及网络MAC地址。

1 挂载qcow2文件

挂载qcow2文件,首先需要安装依赖包:root@ununtu:/image#apt-get install kpartx接下来,需要使用nbd模块挂载qcow2文件,运行如下命令:

01 Modprobe nbd max_part=63

02 qemu-nbd –c /dev/nbd0 /image/ubuntu-$i.qcow2

03 kpartx –a /dev/nbd0

04 sleep 1

kpartx处理分区之后,需要查看qcow2文件中的各种分区:

root@ubuntu:/image#ls /dev/mapper/

Control nbd0p1 nbd0p2 nbd0p5

在qcow2文件中,/dve/mapper/nbd0p1才是根分区,确定方式如下:

01 root@ubuntu:/image#temp_file=~mktemp~

02 root@ubuntu:/image#rm -rf $temp_file;mkdir -p $temp_file

03 root@ubuntu:/image#mount /dev/mapper/nbd0p1 $temp_file

04 root@jiyou-os:/image#ls $temp_file/usr

05 Bin games include lib local sbin share src

2 修改主机名

找到正确的分区,挂载此分区之后,修改主机名:

root@ubuntu:/image#HOST _NAME=ubuntu-$I

root@ubuntu:/iname#sed -I “s,127.0.0.1.*,127.0.0.1 $HOST_NAME,g” $temp_file/etc/hosts

root@ubuntu:/image#echo $HOST_NAME > $temp_file/etc/hostname

3 修改网络MAC地址

ubuntu系统的MAC地址配置需要修改$temp_file/etc/udev/rules.d/70-persistent-net.rules。首先需要修改此文件:

01 root@ubuntu:/image#file=$temp_fiel/etc/udev/rules.d/70-persistent-net.rules

02 root@ubuntu:/image#cat <<“EOF”>$file

03 #This file was automatcially generated by the /lib/udev/write_net_rules

04 #program,run by the persistent-net-generator,rules rules file.

05 #

4 设置网络IP信息

虚拟机的IP信息,记录在$tcmp-file/etc/network/interfaces文件中。

5 卸载分区

卸载分区的时候,首先需要卸载$tcmp-file目录,再接着卸载nbd0模块:

roo@ubuntu:/image#umount $temp_file

roo@ubuntu:/image#qemu-nbd –d /dev/nbd0

总结和展望

基于qcow2快速创建虚拟机方案,如果能够修改qcow2文件,那么这个方案就可以用来大规模创建虚拟机(当然创建出来的是同一种系统)。我们可以定义脚本定义虚拟机创建模版template.xml,来实现规模创建。

参考文献

[1] 戰友.OpenStack开源云王者归来[M].北京:清华大学出版社,2014.2

[2] 张子凡.OpenStack部署实践[M].北京:人民邮电出版社,2016.1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/xueshu/14947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号