关于如何使用kvm虚拟化技术创建虚拟机,这里有一系列博客讲的已经非常清楚了,这里不再赘述,不过其中有些小坑可能需要大家注意:
遵循上面的步骤之后,你很可能已经得到了自己在kvm上面的第一个虚拟机了,恭喜!!
那如果我要想创建第二个虚拟机呢?上面的流程再走一遍??要疯啊!!
还好,我们还可以克隆clone一个kvm虚拟机出来,如下图所示:
这里我们克隆出了一个新虚拟机,名字为node5.克隆命令为:
virt-clone -o node1 -n node5 -f /home/kvm/images/node5.img
其中-o node1参数制定了待克隆的老(old)虚拟机,-n node5制定了新(new)虚拟机的名字,-f参数指定了新虚拟机镜像所在的位置。
是不是很简单?
呃,it's not simple as that.
这里我们先查看一下新、老两个虚拟机的配置文件,他们的默认位置在/etc/libvirt/qemu目录下(注意,下面我以创建node4虚拟机时的截图为例了)
可以很明显的看出,新老两个虚拟机配置文件的主要区别有以下几点:
- 名字由node1变成了node4
- uuid变了
- 镜像的路径变了
- mac地址变了(这个很重要)
- vnc监听参数变了,原来是有密码的:passwd='123456',新创建的虚拟机默认没有密码(这个在后面通过vncviewer远程连接虚拟机桌面的时候很重要)
我们待会要修改新虚拟机的配置信息时候也是从上面几点出发的。
好了,启动你的虚拟机吧:
virsh start node4
通过vncviewer连接到虚拟机桌面,此时一个很严重的问题来了,虚拟机连不上网!
嗯,敲个命令压压惊:
可以看到,/proc/net/dev文件显示我们这时使用的是eth1端口,而/etc/sysconfig/network-scripts/下面只有ifcfg-eth0文件,没有ifcfg-eth1文件!
查看下/etc/udev/rules.d/70-persistent-net.rules文件:
看上面的mac地址,eth0的mac地址就是我们diff命令中显示的原虚拟机mac地址,而eth1的mac地址才是我们新虚拟机中的mac地址:
而ifcfg-eth0中的mac地址也是原虚拟机的mac地址(围观群众:从原虚拟机拷贝过来的,废话么,当然是原虚拟机地址)
那么问题来了,eth1网卡从哪来的?
原来系统检测到的实际mac地址(也是就是新虚拟机的正确mac地址)与配置文件(ifcfg-eth0)中的MAC地址不一样, 于是便有创建了一个新的网卡eth1,可eth1并没有对应的配置文件指定其如何连接到网络,于是eth1也是无法上网的,下面我们就对系统的这个“错误认知”做一下修正!
如果这时候使用service network restart或ifup eth0启动eth0网卡,会告诉你eth0 device not found,原因就在于你的eth0网卡mac地址是错的。
下面修改ifcfg-eth0文件内容,把mac地址和ip地址改过来:
再把/etc/udev/rules.d/70-persistent-net.rules文件中的eth0那一行删掉,把eth1改成eth0,结果如下:
重启网络服务或者ifup eth0就好啦:
mac地址的问题解决之后,我们在修改下各个主机的主机名,和其对应的vnc监听端口,一个个崭新的新虚拟机就站在你的面前了,吼吼!!
修改主机名:
修改监听端口(在宿主机的/etc/libvirt/qemu目录下,如对于node4虚拟机,修改node4.xml即可,修改完后记得重启宿主机):