KVM 是 kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM是基于硬件的完全虚拟化
-
查看CPU是否支持虚拟化:无输出则不支持
egrep ‘vmx|svm‘ /proc/cpuinfo
或lscpu
-
安装:
yum install -y kvm virt-manager libvirt
Centos7中kvm已经集成到内核当中
lsmod | grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
-
启动服务,启动GUI虚拟机管理工具
systemctl enable libvirtd
systemctl start libvirtd
virt-manager
-
配置网卡桥接
systemctl stop NetworkManager
systemctl disable NetworkManager
yum install -y bridge-utils #centos7默认安装
方法1:修改配置文件
创建桥接网卡ifcfg-br0
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens32 ifcfg-br0
vim ifcfg-br0
TYPE=Bridge
BOOTPROTO=none
DEFROUTE=yes
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.200.100
PREFIX=24
GATEWAY=192.168.200.2
DNS1=114.114.114.114
修改要桥接的网卡
vim ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens32
DEVICE=ens32
ONBOOT=yes
BRIDGE=‘br0‘
方法2:
virsh iface-bridge ens34 br1
重启网络服务
systemctl restart network
查看网桥状态:
brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29f308bd no ens32
br1 8000.000c29f308c7 yes ens34
virbr0 8000.52540028c2c6 yes virbr0-nic
创建虚拟机
yum install -y virt-install virt-viewer
virt-install --name windows-server-2012 --os-type=windows --os-variant=Win2k12 --hvm --vcpus=2 --ram 1536 --disk path=/mnt/disk01/windows-server-2012.img,size=30,format=qcow2,bus=virtio --network bridge=br0,model=virtio,mac=52:54:00:00:00:00 --noautoconsole --vnc --vncport=5900 --vnclisten=0.0.0.0 --cdrom /mnt/disk01/cn_windows_server_2012_r2_x64_dvd_2707961.iso
参数说明:
--hvm 全虚拟化
--name 虚拟机名称
--ram 内存大小。
--vcpus CPU 核心数
--disk 虚拟机镜像,size指定分配大小,单位为G。
--network 网络类型,此处用的是bridge桥接。
--cdrom 指定安装镜像iso光盘
--vnc 启用VNC远程管理
--vncport 指定VNC监控端口
--vnclisten 指定VNC监听IP
--os-variant 指定操作系统
KVM安装Windows找不到硬盘(无硬盘驱动)?
安装yum源
wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo
yum install -y virtio-win
查看下载的光盘位置
rpm -ql virtio-win | grep ‘.iso‘
/usr/share/virtio-win/virtio-win-0.1.141.iso
/usr/share/virtio-win/virtio-win.iso
virt-install --name windows-server-2012 --os-type=windows --os-variant=Win2k12 --hvm --vcpus=2 --ram 1536 --disk path=/mnt/disk01/windows-server-2012.img,size=30,format=qcow2,bus=virtio --network bridge=br0,model=virtio,mac=52:54:00:00:00:00 --noautoconsole --vnc --vncport=5900 --vnclisten=0.0.0.0 --disk path=/mnt/disk01/cn_windows_server_2012_r2_x64_dvd_2707961.iso,device=cdrom --cdrom /usr/share/virtio-win/virtio-win.iso
加载驱动程序->浏览->CD驱动器 virtio-win-0.1.1->viostor->2k12R2->amd64
克隆
virt-clone --connect=qemu:///system -o windows-server-2012 -n 2012x1 -f /mnt/disk01/2012x1.img
-o表示旧的虚拟机名称,-n表示新的虚拟机名称,-f表示新的虚拟机路径。
常用命令
查看所有虚拟机
virsh list --all
查看网卡
virsh domiflist windows-server-2012
查看存储
virsh domblklist windows-server-2012
查看网络
virsh net-list
关闭虚拟机
virsh shutdown windows-server-2012
关闭电源
virsh destroy windows-server-2012
启动虚拟机
virsh start windows-server-2012
挂起虚拟机
virsh suspend windows-server-2012
恢复虚拟机
virsh resume windows-server-2012
删除(不删除虚拟硬盘)
virsh undefine windows-server-2012
虚拟机随宿主机启动而启动
virsh autostart windows-server-2012
取消虚拟机随宿主机启动而启动
virsh auotstart windows-server-2012
修改内存大小
virsh setmem windows-server-2012 1024M
修改最大内存(QEMU / KVM不支持最大内存限制的实时更改)
virsh setmaxmem windows-server-2012 1024
指定了--live,则会影响正在运行的guest。如果指定了--config,则会影响下一次引导
修改虚拟处理器数量
virsh setvcpus domain 4
Centos7本地console连接
vim /etc/sysconfig/grub 在第6行后添加console=ttyS0
RUB_CMDLINE_LINUX="crashkernel=..........quuiet console=ttyS0"
#grub2-mkconfig -o /boot/grub2/grub.cfg
重新启动
reboot
virsh console centos7.0
退出为CTRL+ ]
存储池管理:
定义存储池和目录
mkdir /mnt/disk01/vdisk-pool-1
Virsh pool-define-as vdisk-pool-1 --type dir --target /disk01/vdisk-pool-1
默认状态为不活跃
virsh pool-list --all
使vdisk-pool-1自动启动
virsh pool-autostart vdisk-pool-1
virsh pool-start vdisk-pool-1
使用NFS存储池
nfs存储搭建见http://blog.rootr.cn/?p=234
创建nfs存储池
mkdir /mnt/nfs/
virsh pool-define-as nfs-pool-1 --source-format nfs --type netfs --source-host 192.168.200.105 --source-path /nfs/ --target /mnt/nfs/
默认状态为不活跃
virsh pool-list --all
virsh pool-start nfs-pool-1
使其nfs-pool-1自动启动
virsh pool-autostart nfs-pool-1
本地存储池查看
ls /etc/libvirt/storage/
编辑存储池disk01配置文件
virsh pool-edit disk01
生成UUID
uuidgen
在存储池中创建虚拟机存储卷
virsh vol-create-as disk01 test.img 1G --format qcow2
在存储池中删除虚拟机存储卷
virsh vol-delete --pool disk01 test.img
取消存储池的活跃状态
virsh pool-destroy disk01
删除存储池定义的目录/data/vmfs
virsh pool-delete disk01
取消定义存储池
virsh pool-undefine disk01
热添加硬盘
-
创建虚拟硬盘
qemu-img create -f qcow2 /mnt/disk01/abc.img 20G
为虚拟机添加虚拟硬盘
virsh attach-disk 2012x1 /mnt/disk01/abc.img vdb --subdriver qcow2 --persistent
-
通过配置文件热添加虚拟硬盘
创建虚拟硬盘
qemu-img create -f qcow2 /mnt/disk01/def.img 20G
vim /tmp/def.xml 文件位置随意
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘writeback‘/>
<source file=‘/mnt/disk01/def.img‘/>
<target dev=‘vdc‘ bus=‘virtio‘/>
</disk>
为虚拟机热添加虚拟硬盘
virsh attach-device 2012x1 /tmp/def.xml
查看centos域的存储设备
virsh domblklist 2012x1
目标 源
------------------------------------------------
vda /mnt/disk01/2012x1.img
vdb /mnt/disk01/abc.img
vdc /mnt/disk01/def.img
热移除虚拟硬盘
virsh detach-disk 2012x1 vdb --config --live
导出KVM虚拟机配置文件
virsh dumpxml 2012x1 > /tmp/2012x1.xml
编辑KVM虚拟机配置文件
virsh edit 2012x1
基于后备镜像创建差值镜像(类似VMware的链接克隆,链接克隆是对原虚拟机的引用。必须能够访问原虚拟机才能运行)
qemu-img create -f qcow2 -b centos7.qcow2 centos7x1.qcow2
qemu-img info centos7x1.qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
backing file: centos7.qcow2
转换差值镜像为普通镜像
qemu-img convert -f qcow2 -O qcow2 centos7x1.qcow2 centos7x2.qcow2
qemu创建快照!!!需要关机!!!
qemu-img snapshot -c snap01 /mnt/disk01/2012x1.img
qemu查看快照
qemu-img snapshot -l /mnt/disk01/2012x1.img
qemu恢复快照!!!需要关机!!!
qemu-img snapshot -a snap01 /mnt/disk01/2012x1.img
qemu删除快照!!!需要关机!!!
qemu-img snapshot -d snap01 /mnt/disk01/2012x3.img
创建快照(系统正在运行)
virsh snapshot-create-as 2012 snap2 test2
创建快照(系统关机后)
virsh shutdown 2012
virsh snapshot-create-as 2012 snap1 test1
查看所有快照
virsh snapshot-list 2012
名称 生成时间 状态
------------------------------------------------------------
snap1 2017-09-14 15:13:25 +0800 shutoff
snap2 2017-09-14 15:16:46 +0800 running
#状态为拍摄快照时系统的状态
查看磁盘信息(快照)
qemu-img info disk01.qcow2
快照配置文件路径:/var/lib/libvirt/qemu/snapshot
恢复快照
virsh snapshot-revert --domain 2012 snap1
删除快照
virsh snapshot-delete 2012 snap2
kvm虚拟机静态迁移
- 导出虚拟机配置文件
- virsh dumpxml 2012 > /root/2012.xml
- 拷贝配置文件
- 查看虚拟机磁盘文件
virsh domblklist domain
- 拷贝虚拟机磁盘文件
- 注册虚拟机
virsh define /mnt/disk01/2012.xml
kvm虚拟机基于共享存储的动态迁移(主机名不能相同,磁盘缓存模式为none)
virsh migrate --live --verbose centos6 qemu+ssh://192.168.200.101/system tcp://192.168.200.101
虚拟机已完成迁移,但是kvm还没有虚拟机配置文件;所以需要创建配置文件并定义虚拟机。
导出虚拟机配置文件
virsh dumpxml centos6 >/root/centos6.xml
注册虚拟机
virsh define /root/centos6.xml