本文主要对本人在工作过程中对虚拟化环境及虚拟机管理的一些总结,方便每次虚拟环境的安装和虚拟机管理,后续有时间会对网络管理进行整理。本文分两部分,第一部分介绍虚拟化环境的安装和虚拟机的创建和管理;第二部分给出一些参考信息,如果在第一部分需要问题或者参数方面的疑问,可参看第二部分是否能找到答案。
第一部分 安装管理
CentOS:
一、虚拟化环境安装:
yum -y install qemu-kvm libvirt-python libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v virt-install
yum install libguestfs-tools -y
yum upgrade device-mapper-libs
yum -y install avahi
systemctl daemon-reload
systemctl restart libvirt
二、虚拟机磁盘准备(以Ubuntu1204为例)
wget http://releases.ubuntu.com/12.04/ubuntu-12.04.5-server-amd64.iso
qemu-img create -f img ubuntu1204.img 10G
三、虚拟机安装
virt-install --virt-type kvm --name precise --ram 1024 --cdrom=ubuntu-12.04.5-server-amd64.iso --disk ubuntu1204.img,format=img --network bridge=virbr0 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type-linux --os-variant=ubuntuprecise
执行以上命令后,可通过virt-manager或者vncviewer进入到虚拟机界面进行系统安装。
四、虚拟机管理
通过以上步骤,从无到有在系统上安装了一台虚拟机,如果需要克隆多台虚拟机,则可通过virsh命令进行操作。通过上面创建出来的虚拟机克隆一个新的虚拟机,示例如下:
1、重新创建虚拟机磁盘文件
qemu-img create -f img vm-test.img 10G
2、导出并修改xml文件
#virsh list --all
precise
可查看到precise虚拟机,然后将xml文件导出
#virsh dumpxml precise>> vm-test.xml
3、创建虚拟机
virsh define vm-test.xml
4、虚拟机启停和删除
#启动
virsh start vm-test
#停止
virsh destroy vm-test
#重启
virsh reboot vm-test
#删除
virsh undefine vm-test
五、如果有qcow2镜像文件,可直接通过xml创建虚拟机,此处附上此种系统的xml文件
-----------------------
<domain type='kvm'>
<name>trusty</name>
<uuid>39a0e004-97f2-48b4-8ff2-91da1dd8bac7</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact'>
<model fallback='allow'>cpu64-rhel6</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/ubuntu1204.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<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:a4:c9:21'/>
<source bridge='virbr0'/>
<model type='virtio'/>
<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='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='vga' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</memballoon>
</devices>
</domain>
--------------------------
Ubuntu:
一、虚拟化环境安装:
apt-get install qemu qemu-kvm libvirt-bin virt-manager bridge-utils virtinst virt-viewer
二、虚拟机磁盘准备(以Ubuntu1204为例)
wget http://releases.ubuntu.com/12.04/ubuntu-12.04.5-server-amd64.iso
qemu-img create -f img ubuntu1204.img 10G
三、虚拟机安装
方法一 (install at onetime):
virt-install --virt-type kvm --name precise --ram 1024 --cdrom=ubuntu-12.04.5-server-amd64.iso --disk ubuntu1204.qcow2,format=qcow2 --network bridge=virbr0 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type-linux --os-variant=ubuntuprecise
方法二 (install with graphic):
1) install
qemu-system-x86_64 -hda ubuntu1204.img -cdrom /opt/kvm/ubuntu-12.04-server-amd64.iso -boot d -m 1024 -no-acpi
2) boot
qemu-system-x86_64 ubuntu.img -m 1024
四、虚拟机管理(请参考CentOS部分)
五、Ubuntu系统的xml文件
---------------------------
<domain type='kvm' id='2'>
<name>precise</name>
<uuid>7d2f6378-0763-b2f0-448b-d1e73352cf3e</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>destroy</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/kvm-spice</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/ubuntu1204.qcow2'/>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/home/huangqg/ubuntu-12.04.5-server-amd64.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<alias name='ide0-1-0'/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0'>
<alias name='usb0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'>
<alias name='pci.0'/>
</controller>
<controller type='ide' index='0'>
<alias name='ide0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:7b:38:8b'/>
<source bridge='virbr0'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/0'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/0'>
<source path='/dev/pts/0'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<alias name='video0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</memballoon>
</devices>
<seclabel type='dynamic' model='apparmor' relabel='yes'>
<label>libvirt-7d2f6378-0763-b2f0-448b-d1e73352cf3e</label>
<imagelabel>libvirt-7d2f6378-0763-b2f0-448b-d1e73352cf3e</imagelabel>
</seclabel>
</domain>
---------------------------
第二部分 参考帮助
一、查看os-variant:
ubuntu:
virt-install --os-variant list
centos:
none
result:
---------
win7 : Microsoft Windows 7
vista : Microsoft Windows Vista
winxp64 : Microsoft Windows XP (x86_64)
winxp : Microsoft Windows XP
win2k : Microsoft Windows 2000
win2k8 : Microsoft Windows Server 2008
win2k3 : Microsoft Windows Server 2003
openbsd4 : OpenBSD 4.x
freebsd8 : FreeBSD 8.x
freebsd7 : FreeBSD 7.x
freebsd6 : FreeBSD 6.x
solaris9 : Sun Solaris 9
solaris10 : Sun Solaris 10
opensolaris : Sun OpenSolaris
netware6 : Novell Netware 6
netware5 : Novell Netware 5
netware4 : Novell Netware 4
msdos : MS-DOS
generic : Generic
debianwheezy : Debian Wheezy
debiansqueeze : Debian Squeeze
debianlenny : Debian Lenny
debianetch : Debian Etch
fedora18 : Fedora 18
fedora17 : Fedora 17
fedora16 : Fedora 16
fedora15 : Fedora 15
fedora14 : Fedora 14
fedora13 : Fedora 13
fedora12 : Fedora 12
fedora11 : Fedora 11
fedora10 : Fedora 10
fedora9 : Fedora 9
fedora8 : Fedora 8
fedora7 : Fedora 7
fedora6 : Fedora Core 6
fedora5 : Fedora Core 5
mageia1 : Mageia 1 and later
mes5.1 : Mandriva Enterprise Server 5.1 and later
mes5 : Mandriva Enterprise Server 5.0
mandriva2010 : Mandriva Linux 2010 and later
mandriva2009 : Mandriva Linux 2009 and earlier
rhel7 : Red Hat Enterprise Linux 7
rhel6 : Red Hat Enterprise Linux 6
rhel5.4 : Red Hat Enterprise Linux 5.4 or later
rhel5 : Red Hat Enterprise Linux 5
rhel4 : Red Hat Enterprise Linux 4
rhel3 : Red Hat Enterprise Linux 3
rhel2.1 : Red Hat Enterprise Linux 2.1
sles11 : Suse Linux Enterprise Server 11
sles10 : Suse Linux Enterprise Server
opensuse12 : openSuse 12
opensuse11 : openSuse 11
ubuntutrusty : Ubuntu 14.04 LTS (Trusty Tahr)
ubuntusaucy : Ubuntu 13.10 (Saucy Salamander)
ubunturaring : Ubuntu 13.04 (Raring Ringtail)
ubuntuquantal : Ubuntu 12.10 (Quantal Quetzal)
ubuntuprecise : Ubuntu 12.04 LTS (Precise Pangolin)
ubuntuoneiric : Ubuntu 11.10 (Oneiric Ocelot)
ubuntunatty : Ubuntu 11.04 (Natty Narwhal)
ubuntumaverick : Ubuntu 10.10 (Maverick Meerkat)
ubuntulucid : Ubuntu 10.04 LTS (Lucid Lynx)
ubuntukarmic : Ubuntu 9.10 (Karmic Koala)
ubuntujaunty : Ubuntu 9.04 (Jaunty Jackalope)
ubuntuintrepid : Ubuntu 8.10 (Intrepid Ibex)
ubuntuhardy : Ubuntu 8.04 LTS (Hardy Heron)
virtio26 : Generic 2.6.25 or later kernel with virtio
generic26 : Generic 2.6.x kernel
generic24 : Generic 2.4.x kernel
----------------
二、查看机器类型
ubuntu:
qemu-kvm -machine help
centos:
/usr/bin/qemu-system-x86_64 -machine help
Supported machines are:
pc-0.13 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.0 Standard PC (i440FX + PIIX, 1996)
pc-1.0 Standard PC (i440FX + PIIX, 1996)
pc-q35-1.7 Standard PC (Q35 + ICH9, 2009)
pc-1.1 Standard PC (i440FX + PIIX, 1996)
q35 Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-2.0)
pc-q35-2.0 Standard PC (Q35 + ICH9, 2009)
pc-i440fx-1.4 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.5 Standard PC (i440FX + PIIX, 1996)
pc-0.14 Standard PC (i440FX + PIIX, 1996)
pc-0.15 Standard PC (i440FX + PIIX, 1996)
xenfv Xen Fully-virtualized PC
pc-q35-1.4 Standard PC (Q35 + ICH9, 2009)
isapc ISA-only PC
pc-0.10 Standard PC (i440FX + PIIX, 1996)
pc Ubuntu 14.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-trusty)
pc-i440fx-trusty Ubuntu 14.04 PC (i440FX + PIIX, 1996) (default)
pc-1.2 Standard PC (i440FX + PIIX, 1996)
pc-0.11 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.7 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.5-saucy Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-1.5-qemu-kvm)
pc-i440fx-1.5-qemu-kvm Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.6 Standard PC (i440FX + PIIX, 1996)
none empty machine
xenpv Xen Para-virtualized PC
pc-q35-1.5 Standard PC (Q35 + ICH9, 2009)
pc-1.0-precise Standard PC (i440FX + PIIX, 1996) (alias of pc-1.0-qemu-kvm)
pc-1.0-qemu-kvm Standard PC (i440FX + PIIX, 1996)
pc-q35-1.6 Standard PC (Q35 + ICH9, 2009)
pc-0.12 Standard PC (i440FX + PIIX, 1996)
pc-1.3 Standard PC (i440FX + PIIX, 1996)
三、问题:
1、error: Unable to add port vnet0 to OVS bridge br1: Operation not permitted
解决方法:
#apparmor_status
if libvirtd is in enforced mode,exec
#aa-complain /etc/apparmor.d/*
see again, it would change to complain mode
#apparmor_status
四、命令解释:
=====virt-install=========
virt-install常用参数
-n --name= 客户端虚拟机名称
-r --ram= 客户端虚拟机分配的内存
-u --uuid= 客户端UUID 默认不写时,系统会自动生成
--vcpus= 客户端的vcpu个数
-v --hvm 全虚拟化
-p --paravirt 半虚拟化
-l --location=localdir 安装源,有本地、nfs、http、ftp几种,多用于ks网络安装
--vnc 使用vnc ,另有--vnclient=监听的IP --vncport =VNC监听的端口
-c --cdrom= 光驱 安装途径
--disk= 使用不同选项作为磁盘使用安装介质
-w NETWORK, --network=NETWORK 连接客户机到主机网络
-s --file-size= 使用磁盘映像的大小 单位为GB
-f --file= 作为磁盘映像使用的文件
--cpuset=设置哪个物理CPU能够被虚拟机使用
--os-type=OS_TYPE 针对一类操作系统优化虚拟机配置(例如:‘linux’,‘windows’)
--os-variant=OS_VARIANT 针对特定操作系统变体(例如’rhel6’, ’winxp’,'win2k3')进一步优化虚拟机配置
--host-device=HOSTDEV 附加一个物理主机设备到客户机。HOSTDEV是随着libvirt使用的一个节点设备名(具体设备如’virsh nodedev-list’的显示的结果)
--accelerate KVM或KQEMU内核加速,这个选项是推荐最好加上。如果KVM和KQEMU都支持,KVM加速器优先使用。
-x EXTRA, --extra-args=EXTRA 当执行从"--location"选项指定位置的客户机安装时,附加内核命令行参数到安装程序
--nographics "virt-install" 将默认使用--vnc选项,使用nographics指定没有控制台被分配给客户机