KVM 虚拟机在 IBM System x 上应用(2)

来源:developerWorks 中国 作者:郭 晋兵
   -net tap -cdrom 挂载 ISO 镜像到客户机,光盘启动客户机时必须加载 /mnt/SLES10SP2.iso -boot [a|c|d|n] 设置客户机的启动选项(软盘 a,硬盘 c,光盘 d,网络 n),默认从硬盘镜像启动 d -vncdisplay 通过 VNC 的方式远程安装 9.123.99.34:3

把上面的参数串在一起就是安装 KVM 虚拟机的命令,见清单 2 。


清单 3. 安装客户机的命令
使用文件作为客户机存储,从光盘启动,使用默认的网络配置:
 linux-gwsa:~ # qemu-kvm -m 4096 -smp 4 -hda /home/kvm.img  \n 
 -cdrom /mnt/SLES10SP2.iso -boot d 

使用硬盘分区作为客户机存储,从光盘启动,设置 TAP 网络,通过 VNC 远程安装:
 linux-gwsa:~ # qemu-kvm -m 4096 -smp 4 -hda /dev/sdb1 -net nic, model=e1000,  \n 
 macaddr=00:16:3e:51:fb:ce -net tap -cdrom /mnt/SLES10SP2.iso -boot d -vnc 9.123.99.34:3

安装第一台客户机

在 xWindow 中输入清单 3 中的命令,或者通过 VNC 远程连接,显示图 2 中的客户机安装界面:


图 2. 客户机启动界面
客户机启动界面

选择 3 从光盘启动,进入大家熟悉的 Linux 安装步骤。本例中添加了网络安装的参数,这样将从网络安装客户机。


图 3. 引导安装 Linux 系统
引导安装 Linux 系统

图 4. 网络下载安装文件
网络下载安装文件

从网络下载了安装程序后进入 YAST 安装界面,余下的步骤和在物理机上安装 SLES 一样。

第二台客户机的安装以第一台稍有不同,主要是网络上的设置和资源的分配。下节中将详细介绍客户机的网络设置。





启动 KVM 虚拟机

客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接。

KVM 客户机网络连接有两种方式:

  • 用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。
  • 虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。

本文选用了虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。

本例中的客户机网络设置

本例中 IBM System x3500 有两块千兆以太网卡,一块网卡连接外网的 9.123.99.x 网段,一块网卡连接内网 192.168.0.x 网段。本例采用虚拟网桥的连接方式使客户机能够同时自由访问两个网段。


图 5. IBM System x3500 的网络结构
IBM System x3500 的网络结构

清单 4. 配置 eth0 设备
编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件
注释 BOOTPROTO 
增加 BRIDGE=switch


清单 5. 配置网桥 br0
创建 /etc/sysconfig/network-scripts/ifcfg-br0 文件,内容如下:
 linux-gwsa:~ # cat /etc/sysconfig/network/ifcfg-br0 
 DEVICE=br0 
 TYPE=Bridge 
 BOOTPROTO=dhcp 
 ONBOOT=yes 

重新启动网络,激活网桥:
 /etc/init.d/network restart

网桥 br0 应该获得 IP 地址(静态或 DHCP),同时物理的 eth0 必须不配置 IP 地址。重新启动网络后,主机的网络设备列表如清单 6 所示:


清单 6. 主机的网络设备列表
linux-gwsa:~ # ifconfig 
 br0       Link encap:Ethernet  HWaddr 00:1A:64:48:87:B6  
          inet addr:192.168.0.13  Bcast:192.168.0.255  Mask:255.255.255.0 
          inet6 addr: fe80::21a:64ff:fe48:87b6/64 Scope:Link 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:669843 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:344910 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:0 
          RX bytes:113618306 (108.3 Mb)  TX bytes:495318687 (472.3 Mb) 

 eth0      Link encap:Ethernet  HWaddr 00:1A:64:48:87:B6  
          inet6 addr: fe80::21a:64ff:fe48:87b6/64 Scope:Link 
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1 
          RX packets:11681269 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:5505473 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:16627242146 (15856.9 Mb)  TX bytes:485265358 (462.7 Mb) 
          Interrupt:16 

 eth1      Link encap:Ethernet  HWaddr 00:1A:64:48:87:B7  
          inet addr:9.123.99.193  Bcast:9.123.99.255  Mask:255.255.255.0 
          inet6 addr: fe80::21a:64ff:fe48:87b7/64 Scope:Link 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:5481826 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:5453113 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:5100133488 (4863.8 Mb)  TX bytes:4753271194 (4533.0 Mb) 
          Interrupt:17 

 lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope:Host 
          UP LOOPBACK RUNNING  MTU:16436  Metric:1 
          RX packets:187412 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:187412 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:0 
          RX bytes:801868898 (764.7 Mb)  TX bytes:801868898 (764.7 Mb) 

 linux-gwsa:~ # brctl show 
 bridge name 	 bridge id 		 STP enabled 	 interfaces 
 br0 		 8000.001a644887b6 	 no 		 eth0

此外,需要一个包含如下内容的 qemu-ifup 脚本,作为客户机的网络配置脚本。/etc/qemu-ifup是默认的客户机网络配置文件,如果使用其他名字或拷贝到其他位置,请用script=file参数指定。


清单 7. 客户机网络配置脚本
linux-gwsa:~ # cat /etc/qemu-ifup 
 #!/bin/sh 

 echo 'config qemu network with bridge for ' $* 

 bridge=br0 
 # Exit if $bridge is not a bridge.  Exit with 0 status 
 # so qemu-dm process is not terminated.  No networking in 
 # vm is bad but not catastrophic.  The vm could still run 
 # cpu and disk IO workloads. 
 # Include an useful error message in qemu-dm log file. 
 if [ ! -e "/sys/class/net/${bridge}/bridge" ] 
 then 
   echo "WARNING! ${bridge} is not a bridge.  qemu-ifup exiting.   \n 
   VM may not have a functioning networking stack." 
   exit 0 
 fi 

 ifconfig $1 0.0.0.0 up 
 brctl addif $bridge $1 || true

主机上如果有多台客户机使用网络,每个客户机必须有不同的 MAC 地址,所以需要在网络参数中为每个客户机指定不同的 MAC 地址。以下脚本可以自动生成 MAC 地址(执行 python 脚本需要系统安装了 python 解释器)。


清单 8. 生成 MAC 地址的代码
linux-gwsa:~ # cat macgen.py 
 #!/usr/bin/python 
 # macgen.py script to generate a MAC address for Red Hat Virtualization guests 
 # 
 import random 
 # 
 def randomMAC(): 
	 mac = [ 0x00, 0x16, 0x3e, 
		 random.randint(0x00, 0x7f), 
		 random.randint(0x00, 0xff), 
		 random.randint(0x00, 0xff) ] 
	 return ':'.join(map(lambda x: "%02x" % x, mac)) 
 # 
 print randomMAC() 

生成 MAC 地址的示例:
 linux-gwsa:~ # ./macgen.py 
 00:16:3e:51:fb:ce


清单 9. 启动客户机的命令
linux-gwsa:~ # qemu-kvm -m 8192 -smp 4 -hda /dev/sdb1 -net    \n 
 nic,model=e1000,macaddr=00:16:3e:51:fb:ce -net tap 

参数说明
 -net nic,model=e1000,macaddr=00:16:3e:51:fb:ce  设置虚拟网卡类型为 e1000,设置 MAC 地址。
 -net tap     使用 tap 网络模式,默认的配置脚本是 /etc//etc/qemu-ifup ( 见 qemu-kvm 的 manpage) 。

时间:2009-07-31 13:17 来源:developerWorks 中国 作者:郭 晋兵 原文链接

好文,顶一下
(2)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量