测试使用环境: 服务器:Dell R710 CPU型号物理CPU颗数内存大小和数量 [root@localhost ~]# cat /proc/cpuinfo | grep name | cut -d: -f2 | uniq -c 16 Intel(R) Xeon(R) CPU L5520 @ 2.27GHz [root@localhost ~]# cat /proc/cpuinfo | grep physical | sort -n | uniq -c 16 address sizes : 40 bits physical, 48 bits virtual 8 physical id : 0 8 physical id : 1 ##说明两颗物理cpu
[root@localhost ~]# dmidecode|grep -A5 "Memory Device"|grep Size | cut -d: -f2 | sort -n | uniq -c 10 No Module Installed 8 4096 MB ##接了8根内存,每根内存大小4G ##还有相关命令 ##dmidecode | grep -A16 "Memory Device" | grep Speed | sort -n | uniq -c
[root@localhost ~]# dmidecode|grep 'Maximum Capacity' Maximum Capacity: 288 GB
操作系统Centos 6.4 64位系统 [root@localhost ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m
本文介绍如何安装KVM,在宿主机上如何安装操作系统,添加分离磁盘,软驱,光驱和更改ISO镜像文件,如何克隆Guest系统主机。 一、检查CPU是否支持虚拟化。(在主板BIOS中开启CPU的VirtualizationTechnology) [root@localhost ~]# uname -a Linux localhost.localdomain 2.6.32-358.2.1.el6.x86_64 #1 SMP Wed Mar 13 00:26:49 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# grep -E -o 'vmx|svm' /proc/cpuinfo vmx 二、安装kvm [root@localhost ~]#yum -y install qemu-kvm libvirt python-virtinst bridge-utils 或者 ##yum -y groupinstall 'Virtualization' 'Virtualization Client' 'Virtualization Platform' 'Virtualization Tools' ##查看模块 [root@localhost ~]# lsmod | grep kvm kvm_intel 53484 6 kvm 316506 1 kvm_intel a.网卡桥接配置 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-em1 DEVICE="em1" BOOTPROTO="none" HWADDR="00:24:E8:60:49:66" ONBOOT="yes" TYPE="Ethernet" IPADDR=192.168.18.138 NETMASK=255.255.255.192 GATEWAY=192.168.18.129 DNS1=202.102.134.68 DNS2=202.102.128.68 IPV6INIT=no USERCTL=no BRIDGE=br0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE="br0" BOOTPROTO="none" HWADDR="00:24:E8:60:49:66" ONBOOT="yes" TYPE="Bridge" IPADDR=192.168.18.138 NETMASK=255.255.255.192 GATEWAY=192.168.18.129 DNS1=202.102.134.68 DNS2=202.102.128.68 IPV6=no USERCTL=no
##重启网卡 /etc/init.d/network restart
[root@localhost ~]# ip route list 192.168.18.128/26 dev br0 proto kernel scope link src 192.168.18.138 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 169.254.0.0/16 dev br0 scope link metric 1006 default via 192.168.18.129 dev br0
[root@localhost ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0024e8604966 no em1 virbr0 8000.52540098e2ed yes virbr0-nic b.创建虚拟机(创建宿主机的Guest系统)Guest系统可以是linux 或者windows等系统 我们使用管理工具virt-install ##创建存储镜像目录 [root@localhost ~]# mkdir -p /home/kvm/images 安装guest操作系统 [root@localhost ~]# virt-install --connect qemu:///system \ -n win2003 \ -r 1024 \ --vcpus=2 \ --disk path=/home/kvm/images/win2003.img,cache=writeback,size=10 \ -c /home/iso/WIN_2003.iso \ --vnc --vnclisten=0.0.0.0 --vncport=5901 --noautoconsole \ --os-type windows \ --accelerate --network bridge=br0 \ --hvm --os-variant=win2k3
##下面对virt-install命令做简单介绍,详细可以查看virt-install --help --connect=URI ##连接到虚拟机管理程序与libvirt的URI,如qemu:///system -r MEMORY, --ram=MEMORY ##分配虚拟机实例(Guest)内存,单位为M -n NAME, --name=NAME ##虚拟机实例(Guest)的名称 --vcpus=VCPUS ##配置实例(Guest)CPU数目 --disk path=DISKFILE ##指定实例(Guest)存储路径及其镜像 -c CDROM, --cdrom=CDROM ##指定安装镜像所在位置和名称, 它可以是一个ISO映像的路径, 它也可以是一##个URL,从中提取/访问的最小引导ISO映像。 --vnc ##启用VNC远程管理,该选项不被赞同,可以用"--graphics vnc,..."代替 --vnclisten=VNCLISTEN ##可以用"--graphics vnc,listen=LISTEN,..." 代替 --vncport=VNCPORT ##可以用"--graphics vnc,port=PORT,..."代替 --noautoconsole ##不要自动尝试连接到guest虚拟机控制台。默认行为是启动一个VNC客户端显##示的图形控制台 --os-type=OS_TYPE ##优化实例(Guest)配置操作系统类型如linux或windows --os-variant=OS_VARIANT ##优化实例(Guest)配置一个特定的操作系统(如##win7,winxp,win2k3,win2k8,rhel6) --hvm ##要求使用完全虚拟化 --accelerate ##加速该选项已经过时可以参考--virt-type qemu -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2 ## 实例(Guest)连接到主机的网络,网桥--network bridge=br0,用nat路由出站##--network network=default
##==========================================
##列表(Guest) win2003 virsh -c qemu:///system list --all
##启动Guest) win2003 virsh -c qemu:///system start win2003
##关闭(Guest) win2003 virsh -c qemu:///system destroy win2003
##编辑(Guest) win2003配置文件xml virsh -c qemu:///system edit win2003
##删除(Guest) win2003 virsh -c qemu:///system undefine win2003
##man virsh 可以了解命令
三、我们来创建实例(Guest)win3test 1)首先创建磁盘镜像文件, 文件格式qcow2格式是kvm支持的标准格式,raw格式为虚拟磁盘文件通用格式。 创建文件名win3test.qcow2的磁盘镜像文件名,文件格式为qcow2,磁盘大小为10G
[root@localhost ~]# qemu-img create -f qcow2 /home/kvm/images/win3test.qcow2 15G Formatting '/home/kvm/images/win3test.qcow2', fmt=qcow2 size=16106127360 encryption=off cluster_size=65536
[[root@localhost ~]# qemu-img info /home/kvm/images/win3test.qcow2 image: /home/kvm/images/win3test.qcow2 file format: qcow2 virtual size: 15G (16106127360 bytes) disk size: 264K cluster_size: 65536
2)内存1G,2核CPU ,15G硬盘安装window 2003系统 virt-install --connect qemu:///system \ --name win3test \ --ram 1024 \ --vcpus=2 \ --disk path=/home/kvm/images/win3test.qcow2,device=disk,format=qcow2,bus=ide,cache=writeback,size=15 \ --cdrom /home/iso/WIN_2003.iso --os-type=windows \ --network bridge=br0,model=virtio,model=e1000 \ --hvm --os-variant=win2k3 \ --graphics vnc,listen=0.0.0.0,port=5902 \ --virt-type=kvm \ --noautoconsole
四、我们来创建实例(Guest)linuxtest。 1)创建文件名linuxtest.qcow2的磁盘镜像文件,文件格式为qcow2,磁盘大小为73G [root@localhost ~]# qemu-img create -f qcow2 /home/kvm/images/linuxtest.qcow2 73G Formatting '/home/kvm/images/linuxtest.qcow2', fmt=qcow2 size=78383153152 encryption=off cluster_size=65536 ##======================================================= [root@localhost ~]# qemu-img info /home/kvm/images/linuxtest.qcow2 image: /home/kvm/images/linuxtest.qcow2 file format: qcow2 virtual size: 73G (78383153152 bytes) disk size: 136K cluster_size: 65536 ##========================================================= 2)内存4G,4核CPU ,73G硬盘安装centos 6.4 64位系统
[root@localhost ~]#virt-install --connect qemu:///system \ --name linuxtest \ --ram 4096 \ --vcpus=4 \ --disk path=/home/kvm/images/linuxtest.qcow2,device=disk,format=qcow2,bus=virtio,cache=none,size=73 \ --location='http://mirrors.163.com/centos/6.4/os/x86_64/' \ --os-type=linux \ --network bridge=br0,model=virtio,model=e1000 \ --hvm --os-variant=rhel6 \ --graphics vnc,listen=0.0.0.0,port=5903 \ --virt-type=kvm \ --noautoconsole
4)virtio半虚拟化驱动来提高性能(微软操作系统的IO性能) 下面安装Windows server 2003 Enterprise wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-0.1-52.iso wget http://www.linuxwind.org/download/virtio-win-0.1-52.tar.gz ##解压 tar zxvf virtio-win-0.1-52.tar.gz 安装系统的时候记得按F6从软驱加载驱动 内存4G,4核CPU ,15G硬盘安装windows server 2003系统
[root@localhost ~]# virt-install --connect qemu:///system \ --name win3test \ --ram 4096 \ --vcpus=4 \ --disk path=/home/kvm/images/win3test.qcow2,device=disk,format=qcow2,bus=virtio,cache=none,size=15 \ --cdrom /home/iso/WIN_2003.iso --os-type=windows \ --disk path=/home/iso/virtio-WIN2003-x86.vfd,device=floppy,perms=rw \ --network bridge=br0,model=virtio,model=e1000 \ --hvm --os-variant=win2k3 \ --graphics vnc,listen=0.0.0.0,port=5902 \ --virt-type=kvm \ --noautoconsole ##===================================
##win3test.xml如下 [root@localhost ~]# cat /etc/libvirt/qemu/win3test.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit win3test or other application using the libvirt API. -->
<domain type='kvm'> <name>win3test</name> <uuid>9fd1785e-430a-2aa7-050a-ed76247c7e64</uuid> <memory unit='KiB'>4194304</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='static'>4</vcpu> <os> <type arch='x86_64' machine='rhel6.4.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='localtime'> <timer name='rtc' tickpolicy='catchup'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/home/kvm/images/win3test.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='file' device='floppy'> <driver name='qemu' type='raw' cache='none'/> <source file='/home/iso/virtio-WIN2003-x86.vfd'/> <target dev='fda' bus='fdc'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/home/iso/WIN_2003.iso'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='fdc' index='0'/> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:cc:a1:bd'/> <source bridge='br0'/> <model type='e1000'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='5902' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='vga' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices> </domain> ##============================= ##红色部分为软驱,稍后要卸载(做模版的时候) ##先关机分离软驱 [root@localhost ~]# virsh -c qemu:///system destroy win3test [root@localhost ~]# virsh detach-disk win3test fda --persistent 成功分离磁盘
4)克隆备份虚拟机 a)克隆windows server 2003模板 [root@localhost ~]#virt-clone --original win3test --name 03template --file /home/kvm/images/03template.qcow2 或者 [root@localhost ~]#virt-clone \ --original win3test \ --name 2003template \ --file /home/kvm/images/2003template.qcow2 ##编辑配置03template.xml修改vnc端口修改为5905 [root@localhost ~]# vi /etc/libvirt/qemu/03template.xml
##1)添加分离磁盘=========================== ##启动(Guest)win3test [root@localhost ~]# virsh -c qemu:///system start win3test ##创建磁盘格式raw,添加磁盘 vdb [root@localhost ~]#qemu-img create -f raw /home/kvm/images/vm-add.img 1G ##成功热加载vdb硬盘,硬盘在系统上能正常使用 [root@localhost ~]#virsh attach-disk win3test /home/kvm/images/vm-add.img vdb \ --cache none –persistent ##分离磁盘vdb [root@localhost iso]# virsh detach-disk win3test vdb --persistent ##======================================
##====================================== ##关闭(guest)win3test [root@localhost ~]# virsh -c qemu:///system destroy win3test ##添加IDE硬盘,文件格式qcow2(系统开启来后无法使用新增磁盘,应该是BUG) [root@localhost ~]# qemu-img create -f qcow2 /home/kvm/images/vm-add.qcow2 1G [root@localhost ~]# virsh attach-disk win3test /home/kvm/images/vm-add.qcow2 hde \ --cache none --persistent --subdriver qcow2 ##分离IDE磁盘关,闭系统后操作 [root@localhost iso]# virsh detach-disk win3test hde --persistent ##======================================
##====================================== ##(guest)win3test关机状态的时候能成功添加,但是启动报错,应该是BUG [root@localhost ~]#virsh attach-disk win3test /home/kvm/images/vm-add.qcow2 vdb \ --address pci:0000.00.06.0 --persistent \ --driver qemu --subdriver qcow2 --sourcetype file virsh # start win3test 错误:开始域 win3test 失败 错误:internal error Process exited while reading console log output: char device redirected to /dev/pts/0 qemu-kvm: -drive file=/home/kvm/images/vm-add.qcow2,if=none,id=drive-virtio-disk1,format=qcow2: could not open disk image /home/kvm/images/vm-add.qcow2: Invalid argument ##分离vdb磁盘 [root@localhost iso]# virsh detach-disk win3test vdb --persistent ##======================================
##====================================== ##(guest)win3test开机状态添加磁盘成功,但是磁盘无法读写。因为磁盘文件为qcow2 [root@localhost ~]#virsh attach-disk win3test /home/kvm/images/vm-add.qcow2 vdb \ --persistent ##分离磁盘 [root@localhost ~]# virsh detach-disk win3test vdb --persistent 成功分离磁盘
##======================================
##2)添加分离软驱============================= ##添加fda软盘(guest)win3test关机后操作 [root@localhost ~]#virsh attach-disk win3test /home/iso/virtio-WIN2003-x86.vfd fda \ --type floppy –persistent ##分离fda软驱 [root@localhost ~]#virsh detach-disk win3test fda --persistent 成功分离磁盘 ##======================================
##3)添加分离光驱============================= ##添加分离光驱(guest)win3test关机后操作 [root@localhost~]# virsh detach-disk win3test hdc --persistent 成功分离磁盘 ##加载光驱 [root@localhost ~]#virsh attach-disk win3test /home/iso/WIN_2003.iso hdc \ --type cdrom –persistent ##======================================
##换iso镜像文件 [root@localhost ~]#virsh change-media win3test hdc /home/iso/virtio-win-0.1-52.iso succeeded to complete action update on media ##弹出镜像文件 [root@localhost ~]#virsh change-media win3test hdc --eject
b)克隆Centos 6.2系统模板 virt-clone \ --original linuxtest \ --name Centostemplate \ --file /home/kvm/images/Centostemplate.qcow2
##列表guest系统 [root@localhost ~]#virsh -c qemu:///system list --all Id 名称 状态 ---------------------------------------------------- - linuxtest 关闭 - win3test 关闭
[root@localhost ~]#virt-clone \ > --original linuxtest \ > --name Centostemplate \ > --file /home/kvm/images/Centostemplate.qcow2 正在克隆 linuxtest.qcow2 | 2.0 GB 00:05
Clone 'Centostemplate' created successfully. ##编辑xml修改vnc端口修改为5904 [root@localhost ~]#virsh -c qemu:///system edit Centostemplate
[root@localhost ~]#cat /etc/libvirt/qemu/Centostemplate.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit Centostemplate or other application using the libvirt API. -->
<domain type='kvm'> <name>Centostemplate</name> <uuid>8b5f02f2-ee18-376a-4388-3e8ffff64c06</uuid> <memory unit='KiB'>4194304</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='static'>4</vcpu> <os> <type arch='x86_64' machine='rhel6.4.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/home/kvm/images/Centostemplate.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <interface type='bridge'> <mac address='52:54:00:47:13:79'/> <source bridge='br0'/> <model type='e1000'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices> </domain> ##=================================== ##启动Centostemplate [root@localhost ~]# virsh -c qemu:///system start Centostemplate
[root@localhost ~]# virsh -c qemu:///system list --all Id 名称 状态 ---------------------------------------------------- 22 Centostemplate running - linuxtest 关闭 - win3test 关闭
##用VNC连接 ##登陆进系统删除网卡的MAC和70-persistent-net.rules然后重启机器(这样网卡不会冲突能启动) [root@localhost ~]# rm /etc/udev/rules.d/70-persistent-net.rules
##关闭(Guest) Centostemplate [root@localhost ~]#virsh -c qemu:///system destroy Centostemplate
##删除(Guest) Centostemplate [root@localhost ~]#virsh -c qemu:///system undefined Centostemplate
##关于网桥,查看mac地址 [root@localhost ~]#brctl showmacs br0
##网桥设置mac生存期 [root@localhost ~]#brctl setageing br0 30
##xml虚拟机配置文件目录 /etc/libvirt/qemu (责任编辑:IT) |