KVM是一个基于linux内核的虚拟机解决方案。本文介绍KVM的使用方法,以及注意要点。
参考资料:?KVM虚拟机和QEMU?linuxbrctl
先决条件
硬件环境
CPU硬件虚拟化
32位与64位
安装KVM
虚拟机连网
brctl
桥接
安装以及运行虚拟机
kvm常用命令
安装虚拟操作系统
远程登录
先决条件
硬件环境
x86(包括32位和64位),就是我们常用的系统。
CPU硬件虚拟化
kvm需要系统CPU支持,下面命令如果有输出,说明CPU支持硬件虚拟化:
egrep"flags.:.(svm|vmx)"/proc/cpuinfo
32位与64位
下面是32bit与64bit和主机系统与虚拟操作系统的关系:
主机操作系统 虚拟机操作系统 是否支持 32位 32位 是 32位 46位 否 64位 32位 是 64位 64位 是 总结为一句话:不能在32位主机上装64位的操作系统。
安装KVM
yao@debian:~$apt-getinstallkvmqemuuml-utilities
一般情况下,安装好kvm后能就自动加载内核模块,你也可以手动加载:
yao@debian:~$modprobekvm_intel#orkvm_amd
虚拟机连网
虚拟机连网是头等大事,所以我们先解决这个问题。通过桥接可以实现联网,主要用到的命令有:brctl,ifconfig,tunctl,route
brctl
brctl是一个以太网桥接工具,常见的用法有:
命令原型 例子 说明 brctlshow brctlshow 显示已有网桥 brctladdbr brctladdbrbr0 增加网桥br0 brctldelbr brctldelbrbr0 删除网桥br0 brctladdif brctladdifbr0eth0 将接口eth0接到网桥br0 brctldelif brctldelifbr0eth0 从网桥上删除一个接口 如果发现无法删除网桥,那么可能是还没有将其关闭:
yao@twomoon:~$sudobrctldelbrbr0
bridgebr0isstillup;can''tdeleteit
yao@twomoon:~$sudoifconfigbr0down
yao@twomoon:~$sudobrctldelbrbr0
桥接
说了这么多,到这才是重点。首先,将物理网卡桥接:
yao@twomoon:~$ifconfig-a|grepeth
eth0Linkencap:EthernetHWaddr90:fb:a6:14:cd:42
yao@twomoon:~$brctladdbrbr0
yao@twomoon:~$brctladdifbr0eth0
yao@twomoon:~$ifconfigeth00.0.0.0
yao@twomoon:~$ifconfigbr0192.168.1.51up
这样又多了一个网络设备br0:
yao@twomoon:~$LANG=Cifconfig-a|grepEthernet
br0Linkencap:EthernetHWaddr2a:24:d3:aa:99:e7
eth0Linkencap:EthernetHWaddr90:fb:a6:14:cd:42
如果没有弄明白为什么,可以上网找找桥接的资料和brctl的用法。
当然不能每次开机后都要手工输入这么多命令。你可以将这些命令写成一个脚本,每次开机就执行这个脚本:
#!/bin/bash
#networking.sh
#changeeth0toyournetworkinterface(eg.eth1)
ifconfiglo127.0.0.1up
if[!-z"`ifconfig-a|grepbr0`"];then
ifconfigbr0down
brctldelifbr0eth0
brctldelbrbr0
fi
brctladdbrbr0
brctladdifbr0eth0
ifconfigeth00.0.0.0up
ifconfigbr0192.168.1.51up
routeadddefaultgw192.168.1.1
exit0
也可以写到网卡的配置文件配置文件(/etc/network/interfaces)里,效果是一样的:
autolo
ifaceloinetloopback
autobr0
ifacebr0inetstatic
address192.168.1.51
netmask255.255.255.0
gateway192.168.1.1
bridge_portseth0
安装以及运行虚拟机
kvm常用命令
参数 示例 说明 -hda -hda/data/windows.img 指定windows.img作为硬盘镜像 -cdrom -hda/data/windows.iso 指定windows.iso作为光盘镜像 -boot -bootc 从硬件启动 ? -bootd 从光盘启动 -m -m512 分配512M内存给虚拟系统 -vnc -vnc:0 作为vnc服务器 -cpu -cpu? 列出支持的CPU ? -cpucore2duo 指定CPU为core2duo -smp -smp2 指定虚拟机有2个CPU -net -netnic 为虚拟机网卡(默认为tap0) ? -nettap 系统分配tap设备(默认为tap0)1 ? -netnic-nettap 将虚拟机的网卡eth0连接真机里的tap0 安装虚拟操作系统
生成镜像文件:
yao@twomoon:~$sudokvm-imgcreatewindows2003-x86.img25G-f"vmdk"
安装系统:
yao@twomoon:~$sudokvm-bootd-m512-hda~/kvm/windows2003-x86.img-cdrom~/software/wzmb2003.iso
运行系统:
yao@twomoon:~$sudokvm-bootc-m512-hda~/kvm/windows2003-x86.img-netnic-nettap
可以发现多了一个网络设备tap0,这是系统自动创建的。
yao@twomoon:~$LANG=Cifconfig-a|grepEthernet
br0Linkencap:EthernetHWaddr2a:24:d3:aa:99:e7
eth0Linkencap:EthernetHWaddr90:fb:a6:14:cd:42
tap0Linkencap:EthernetHWaddr2a:24:d3:aa:99:e7
远程登录
如果虚拟机是linux,那么就用ssh;如果是windows,那么就用rdesktop。
yao@debian:~$rdesktop-uusername-ppasswd192.168.1.52-f&
记得用Ctrl-Alt-Enter从全屏中切回来。
1.?在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行与操作系统上的软件提供与硬件的网络设备完全相同的功能。TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TNU/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。(摘自维基百科)
|
|