1. 查看CPU是否支持VT技术
cat /proc/cpuinfo | egrep 'vmx|svm'
flags : fpu vme de pse tsc msr pae mce cx8 apic
mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2
ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts
rep_good aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16
xtpr pdcm dca sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
如果执行指令后有类似返回,则证明CPU支持VT
2. 安装KVM组件
yum groupinstall Virtualization
yum groupinstall "Virtualization Platform"
3. 检查KVM模块加载
lsmod | grep kvm
kvm_amd 37434 4
kvm 292815 1 kvm_amd
如果执行指令后有类似返回,则证明KVM模块加载正常,否则检查BIOS中是否开启了CPU VT支持
4. 安装virtsh virt-install 管理工具
yum install libvirt-client python-virtinst
二、虚拟机安装
1. 建立虚拟机磁盘镜像文件
qcow2格式是kvm支持的标准格式,raw格式为虚拟磁盘文件通用格式。有测试数据表明raw格式的I/O性能略高于qcow2格式,但是在加密,容量,快照方面qcow2格式有优势
qemu-img create -f qcow2 test.qcow2 20G //建立qcow2格式磁盘文件
qemu-img create -f raw test.raw 20G //建立raw格式磁盘文件
qemu-img info test.qcow2 //查看已经创建的虚拟磁盘文件
2. 建立虚拟机示例
创建1G内存、2核CPU、单网卡,磁盘和网络驱动使用virtio的linux虚拟机
virt-install --name rhel5.4 \
--boot network,cdrom,menu=on \
--ram 1024 --vcpus=2 \
--os-variant=rhel5.4 \
--accelerate \
--cdrom=/troodon/ISO/CentOS-6.2-x86_64-bin-DVD1.iso \
--disk path=/troodon/KVM/test01/test01.img,size=30,format=qcow2,bus=virtio \
--bridge=br0,model=virtio --mac=54:52:00:01:79:e9 \
--vnc --vncport=5991 --vnclisten=0.0.0.0.
创建8G内存、4核CPU、双网卡,磁盘和网络驱动使用virtio的linux虚拟机
virt-install --name rhel5.2 \
--boot network,cdrom,menu=on \
--ram 8192 --vcpus=4 \
--os-variant=rhel6 \
--cdrom=/troodon/ISO/CentOS-6.2-x86_64-bin-DVD1.iso \
--disk path=/troodon/KVM/test01/test01.img,format=qcow2,bus=virtio \
--bridge=br0,model=virtio --mac=54:52:00:0b:8b:79 \
--bridge=br1,model=virtio --mac=54:52:00:7e:8e:cd \
--vnc --vncport=5991 --vnclisten=0.0.0.0
创建1G内存、1核CPU、单网卡,磁盘和网络驱动使用virtio的windows虚拟机
virt-install --name win2k3 \
--ram 1024 --vcpus=1 \
--os-variant=win2k3 \
--accelerate \
--cdrom=/troodon/ISO/Windows/2003/win2k3sp1.iso \
--disk path=/troodon/KVM/win2k3/win2k3.img,size=5,format=qcow2,bus=virtio \
--bridge=br0,model=virtio \
--vnc --vncport=5991 --vnclisten=0.0.0.0
一些解释:
virtio驱动对于磁盘和网络I/O性能有很大提升(默认qemu驱动),linux虚拟机安装完成后自动加载virtio驱动,windows虚拟机需要下载virtio驱动后安装
--mac参数指定网卡mac地址,如果不指定系统会自动分配
虚拟机配置文件存储在 /etc/libvirt/qemu 目录,配置文件为XML格式
开机自启动的虚拟机配置可以通过链接放到 /etc/libvirt/qemu/autostart 目录,配置文件为XML格式
3. 虚拟机安装指令 virt-install 简介
--name 指定虚拟机名称,virsh操作指定虚拟机时所需要的参数,不可以重复。
--ram 分配内存大小,安装完成后可以用 virsh 调整。
--vcpus 分配CPU核心数,最大与实体机CPU核心数相同,安装完成后也可以用 virsh 调整。
--disk 指定虚拟机镜像, size 指定分配大小单位为G。
--network 网络类型,此处用的是默认,一般用的应该是 bridge 桥接。
--os-variant 指定操作系统类型,此处使用的是标准Linux 2.6,其他的可以通过 man virt-install 详细查看。
--accelerate 加速,具体什么原理还不太清楚。
--cdrom 指定安装镜像所在。
--vnc 启用VNC远程管理,一般安装系统都要启用。
--vncport 指定 VNC 监控端口,默认端口为 5900,端口不能重复。
--vnclisten 指定 VNC 绑定IP,默认绑定127.0.0.1,这里将其改为 0.0.0.0 以便可以通过外部连接。
4. 虚拟机管理指令 virsh 简介
virsh list 列出当前虚拟机列表,不包括未启动的
virsh list --all 列出所有虚拟机,包括所有已经定义的虚拟机
virsh start domain-name 启动指定虚拟机
virsh shutdown domain-name 停止指定虚拟机
virsh reboot domain-name 重新启动指定虚拟机
virsh destroy domain-name 强制关闭电源
virsh autostart domain-name 指定虚拟机开机自动启动
virsh edit domain-name 编制虚机配置
virsh undefine domain-name 删除虚机信息
virsh net-list --all 查看网络配置信息
brctl show 查看网络信息
brctl addbr net1 vnet1 添加虚拟接口
brctl delbr net1
brctl addif net1 vnet
brctl delif net1 vnet
/etc/libvirt/qemu 虚机配置文件默认存放路径
virsh define /etc/libvirt/qemu/**.xml 更新虚机配置
virsh domiflist daemon-name 查看网卡资源
virsh domblklist daemon-name 查看硬盘资源
virsh dumpxml daemon-name >/tmp/daemon-name.xml 备份虚机当前配置到文件
修改虚机监听vnc地址
1. 修改qemu.conf
# vi /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0" 一般监听为内网地址, 安全!
说明1:vnclisten 默认绑定127.0.0.1 在配置文件里指定VNC 绑定0.0.0.0IP,就不用在安装kvm虚拟机时指定vnclisten参数了。
说明2:在虚拟主机上有很多个虚拟机的时候,需要指定每个虚拟机的端口,否则将会很乱。
2. 修改虚拟机配置文件
# virsh edit daemon-name 或者 vim /etc/libvirt/qemu/daemon-name.xml
<graphics type='vnc' port='5910' autoport='no' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>
virt-install --name test --ram 1024 --vcpus=2 --os-variant=rhel6 --accelerate --cdrom=/home/ISO/CentOS-6.3-x86_64-bin-DVD1.iso --disk path=/var/lib/libvirt/images/test.qcow2,size=5,format=qcow2,bus=virtio --bridge=br0,model=virtio --vnc --vncport=5991 --vnclisten=0.0.0.0
virt-install --name centos6 --ram 1024 --vcpus=2 --os-variant=rhel6 --accelerate --disk path=/var/lib/libvirt/images/test.qcow2,size=5,format=qcow2,bus=virtio --bridge=br0,model=virtio --locationhttp://192.168.137.111/cobbler/ks_mirror/centos-6.4-x86_64/
--extra-args"ks=http://192.168.137.111/centos6.x86_64.cfg" --vnc --vncport=5991 --vnclisten=0.0.0.0 --force
关于console无反应
下面的操作都在 虚拟机上做:
修改 /boot/grub/menu.lst 在 kernel 行最后添加 console=ttyS0,115200
修改 /etc/inittab 添加 co:2345:respawn:/sbin/mingetty ttyS0 115200 vt100
修改 /etc/securetty 到最后添加 ttyS0
help 打印基本帮助信息。
list 列出所有客户端。
dumpxml 输出客户端 XML 配置文件。
create 从 XML 配置文件生成客户端并启动新客户端。
start 启动未激活的客户端。
destroy 强制客户端停止。
define 为客户端输出 XML 配置文件。
domid 显示客户端 ID。
domuuid 显示客户端 UUID。
dominfo 显示客户端信息。
domname 显示客户端名称。
domstate 显示客户端状态。
quit 退出这个互动终端。
reboot 重新启动客户端。
restore 恢复以前保存在文件中的客户端。
resume 恢复暂停的客户端。
save 将客户端当前状态保存到某个文件中。
shutdown 关闭某个域。
suspend 暂停客户端。
undefine 删除与客户端关联的所有文件。
migrate 将客户端迁移到另一台主机中。
命令
Description
setmem 为客户端设定分配的内存。
setmaxmem 为管理程序设定内存上限。
setvcpus 修改为客户端分配的虚拟 CPU 数目。
vcpuinfo 显示客户端的虚拟 CPU 信息。
vcpupin 控制客户端的虚拟 CPU 亲和性。
domblkstat 显示正在运行的客户端的块设备统计。
domifstat 显示正在运行的客户端的网络接口统计。
attach-device 使用 XML 文件中的设备定义在客户端中添加设备。
attach-disk 在客户端中附加新磁盘设备。
attach-interface 在客户端中附加新网络接口。
detach-device 从客户端中分离设备,使用同样的 XML 描述作为命令attach-device。
detach-disk 从客户端中分离磁盘设备。
detach-interface 从客户端中分离网络接口。
命令
Description
version 显示 virsh 版本
nodeinfo 有关管理程序的输出信息
虚机的克隆
virt-clone -o vm1 -n vm2 --file /var/lib/libvirt/images/vm2/a.img --file /var/lib/libvirt/images/vm2/b.img
在线迁移
virsh migrate --live nginxm qemu+ssh://node4:9527/system