Chinaunix首页 | 论坛 | 博客
  • 博客访问: 244567
  • 博文数量: 63
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 750
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-10 21:59
  • 认证徽章:
个人简介

付出,终有回报!

文章分类

全部博文(63)

文章存档

2018年(6)

2017年(24)

2016年(6)

2015年(27)

分类: LINUX

2015-05-28 16:06:02

实验环境:RHEL6.5
准备工作
     在真机上安装一个全新的虚拟机,名称为server           

   当创建的虚拟机越来越多,并且你发现好多虚拟机都是同一个操作系统,它们的区别就是安装的软件不大一样,那么你肯定会希望把他们公共的部分提取出来,只保存那些与公共部分不同的东西,这样镜像大小下去了,空间变多了,管理也方便了。这时,qcow2就派上用场了。此次实验,就是要制作qcow2的镜像,它不仅存储空间小,关键是创建成功后一系列的修改都在快照中,不会影响原镜像。

一、基本知识   

1、 QEMU是什么?                  
   QEMU 是一个面向完整 PC 系统的开源仿真器。除了仿真处理器外,QEMU 还允许仿真所有必要的子系统,如连网硬件和视频硬件。
   QEMU 支持两种操作模式:用户模式仿真和系统模式仿真。用户模式仿真 允许一个 CPU 构建的进程在另一个 CPU 上执行(执行主机 CPU 指令的动态翻译并相应地转换 Linux 系统调用)。系统模式仿真 允许对整个系统进行仿真,包括处理器和配套的外围设备。在本实验中我们用到的即是系统模式仿真
   QEMU 提供了一条特殊的命令创建硬盘,此命令称为 qemu-img。

2、qemu-img
qemu-img有很多命令,以下这些是常用的,如果想了解更多,就请查看man页吧。
info

查看镜像的信息

create

创建镜像

check

检查镜像

convert

转化镜像的格式,(raw,qcow ……

qemu-img convert -c -f fmt -O out_fmt -o options fname out_fname

-c:采用压缩,只有qcow和qcow2才支持

-f:源镜像的格式,它会自动检测,所以省略之

-O 目标镜像的格式

-o 其他选先

fname:源文件

out_fname:转化后的文件


snapshot

管理镜像的快照

rebase

在已有的镜像的基础上创建新的镜像

resize

增加或减小镜像大小

3、qcow2与raw
   raw 格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来管理的,linux下的文件系统可以很好的支持空洞 的特性,所以,如果你创建了一个100G的raw格式的文件,ls看的时候,可以看到这个文件是100G的,但是用du 来看,这个文件会很小。

   qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的 raw 格式的镜像相比,有以下特性:

  1. 更小的空间占用,即使文件系统不支持空洞(holes);
  2. 支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化;
  3. 支持快照(snapshot),镜像文件能够包含多个快照的历史;
  4. 可选择基于 zlib 的压缩方式
  5. 可以选择 AES 加密
说了这么多,还不如动手实践,亲自体验一番。。。。。

二、对虚拟机进行封装
以下这些操作至关重要,如果没有执行,将会导致创建的虚拟机网络连接出现问题,无法正常启动等一系列问题。

1、删除网络配置文件中的UUID,TYPE,NM_CONTROLED,以解除IP与网卡的绑定

[root@rhel ~]# cd /etc/sysconfig/network-scripts/
[root@rhel network-scripts]# vim ifcfg-eth0    

2、删除网卡和MAC地址绑定的信息
[root@rhel udev]# cd /etc/udev/rules.d/
[root@rhel rules.d]# cat 70-persistent-net.rules     
# PCI device 0x10ec:0x8139 (8139cp)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:ad:01:3e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
[root@rhel rules.d]# rm -rf 70-persistent-net.rules

采用udev的方法,此目录下的设备节点在每次系统启动时被创建
其中,会自动绑定每一个网卡上的MAC地址与NAME,并记录在该70文件中。当我们以该镜像为源,创建其他虚拟机时,网卡的MAC地址更换,导致我们的默认第一网卡不是eth0,而是eth1,或者eth2.....


3、删除所有以ssh_host_开头的密匙文件
[root@rhel rules.d]# cd /etc/ssh
[root@rhel ssh]# ls
moduli       ssh_host_dsa_key      ssh_host_key.pub
ssh_config   ssh_host_dsa_key.pub  ssh_host_rsa_key
sshd_config  ssh_host_key          ssh_host_rsa_key.pub
[root@rhel ssh]# rm -rf ssh_host_*     
注意:删除key文件后,不能重启ssh服务,否则key文件又会自动生成

4、关闭防火墙
[root@rhel ssh]# iptables -F
[root@rhel ssh]# chkconfig iptables off
[root@rhel ssh]# chkconfig ip6tables off

5、其他设定
可以根据自己的需求,修改selinux的设定
,添加自己需要经常使用的软件lftp、openssh、vim配置yum源等


[root@rhel ssh]# poweroff    
关掉虚拟机,进行后续的工作。一定不能重启虚拟机,否则之前的操作就白费了

三、创建qcow2格式的虚拟机

对虚拟机的封装完成后,在真机中执行如下操作

[root@tian /]# cd /var/lib/libvirt/images/     所有虚拟机的镜像文件都在这个目录下
base.qcow2  rhel7.img  server.img

server.img 是我准备环节安装的那个虚拟机,查看它的信息如下:
[root@tian images]# qemu-img info server.img
image: server.img
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: 2.3G

对server.img进行格式转换和压缩
[root@tian images]# qemu-img convert -c -O qcow2 server.img server.qcow2  
--------------------------------------------------------------------------------------------------------------------------------

-c:采用压缩,只有qcow和qcow2才支持

-f:源镜像的格式,它会自动检测,所以省略之

-O 目标镜像的格式

-o 其他选先

fname:源文件

out_fname:转化后的文件

--------------------------------------------------------------------------------------------------------------------------------

查看erver.qcow2 的信息
[root@tian images]# du -sh server.*
2.4G    server.img
838M    server.qcow2
与raw相比,qcow2的确占用空间很小
root@tian images]# qemu-img info server.qcow2  
image: server.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 838M
cluster_size: 65536

[root@tian images]# qemu-img create -f qcow2 -b server.qcow2 rhel1     #以erver.qcow2 为模板创建其他的虚拟机
Formatting 'rhel1', fmt=qcow2 size=8589934592 backing_file='server.qcow2' encryption=off cluster_size=65536
[root@tian images]# qemu-img create -f qcow2 -b server.qcow2 vpn
Formatting 'vpn', fmt=qcow2 size=8589934592 backing_file='server.qcow2' encryption=off cluster_size=65536

只要源镜像server.qcow2不被破坏,那么我们就可以进行无限的大批量创建虚拟机了。对于经常搞坏系统的初学者来说,简直就是一大福利,o(∩∩)o...哈哈。。。。。。

下面以名为vpn的虚拟机,演示安装过程:




如果在这个界面没有刚才创建的qcow格式的镜像文件,那么,刷新以下就可以了。


选择之后,就进入安装过程了。













阅读(2571) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册