libvirt
支持的虚拟化KVM XEN Qemu LXC OpenVZ
安装
yum install libvirt libvirt-client libvirt-manager (python-virtinst or virt-install)
yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm
systemctl restart libvirtd.service
/etc/libvirt/qemu/networks/default.xml #被链接到启动目录的脚本
/etc/libvirt/qemu/networks/autostart/ #libvirtd服务启动时运行的脚本
virt-install
一般选项
-n NAME --name=NAME #指定虚拟机名称
-r MEMORY --ram=MEMORY #指定虚机内存大小MB
--vcpus=VCPUS[,maxvcpus=MAX][,sockets=][,cores=][,threads=]
最大cpu个数,套接字数,核心数,线程数
--cpu=CPU #cpu模式及特性
安装方法
-c --cdrom=CDROM #指定安装介质为光盘
-l --location=URL #支持FTP,http,nfs
--pxe #网络装机
--livecd #不依赖磁盘的操作系统
--os-type= #操作系统类型
--os-variant= #操作系统版本
--boot=BOOTS #指定引导次序
存储配置
--disk=DISKOPTIS #指定存储设备及其属性
device 设备类型 cdrom、disk、floppy 默认disk
bus 磁盘总线类型 ide scsi usb virtio
perms 访问权限 rw ro sh 默认rw
size 新建磁盘大小GB
cache 缓存模型
format 磁盘映像格式 raw qcow2 vmdk
sparse 使用稀疏格式
--nodisks #不使用本地磁盘在livecd模式中使用
网络配置
-w NETWORK --network=NETWORK,opt1=xx #网络接口及其属性
bridge=BRIDGE #指定连接到那个桥接设备
network=NAME #连接至指定网络
model #网络设备驱动 virtio、e1000
mac #52:54:00 手动指定mac 否则自动生成
--nonetworks #不使用网络功能
图形配置
--graphics TYPE,opt=xx #指定虚机启动后访问接口及其属性
TYPE #vnc、sdl
port #监听的端口
listen #监听在那个ip 默认127.0.0.1
可以修改/etc/libvirt/qemu.conf调整默认值
设备选项
虚拟化选项
-v --hvm #指定完全虚拟化
-p #指定使用半虚拟化
--virt-type #指定是使用hypervisor 查看可以使用的# virsh capabilities
其他
--autostart #是否随物理机启动启动
--print-xml #创建不需要安装过程的虚机,显示生成的xml文件
--force #禁止命令进入交互模式
--dry-run #
-d --debug #显示debug信息
--import #使用现有磁盘印象构建
/etc/libvirt/qemu #虚拟机xml配置文件
bridge配置
#!/bin/bash
#添加网桥到物理网络
ip a | grep br0 && echo yes >> /dev/null || brctl addbr br0
ip addr del 192.168.150.15/24 dev em1
ip link set dev em1 master br0
ip addr add 192.168.150.15/24 dev br0
ip link set br0 up || ip link set br0 up
route add default gw 192.168.150.253 dev br0
创建虚拟机示例
virt-install --name cirros034-2 --vcpu 2 --ram 512 \
--disk=/var/image/cirros-0.3.4-x86_64-disk.img,bus=virtio,size=5,format=qcow2,sparse \
--vnc --vnclisten 0.0.0.0 \
--autostart --import \
--network bridge=br0
virt-install --name cirros --vcpu 2 --ram 2048 \
--network bridge=br0,model=virtio \
--disk=/var/image/cirros-0.3.4-x86_64-disk.img,format=qcow2,size=5,perms=rw,bus=virtio \
--disk=/var/image/cirros.img,size=10,format=qcow2,perms=rw,bus=virtio,sparse \
--vnc --vnclisten 0.0.0.0
--import --autostart --force
#cpu
virt-install --name centos1810 --vcpus=2,maxvcpus=6 --ram 4096 \
--network bridge=br0,model=virtio,mac=52:54:00:00:00:00 \
--disk=/var/image/centos_1810.img,format=qcow2,bus=virtio,size=10,sparse \
--cdrom /data/CentOS-7-x86_64-DVD-1810.iso \
--vnc --vnclisten 0.0.0.0 \
--autostart --force
基础管理命令
virsh list --all #查看所有虚拟机
virsh shutdown cirros #关闭指定虚拟机
virsh destroy cirros #强制关闭
virsh start cirros #开启虚拟机
virsh undefine cirros #取消定义域 删除虚拟机
--storage #删除关联的卷
--remove-all-storage #删除所有存储卷
--delete-snapshot #删除所有卷的快照
--snapshots-metadata #删除快照元数据
virsh autostart cirros #设置虚拟机跟随物理机启动
virsh dominfo cirros #查看虚拟机基本信息
virsh vncdisplay cirros #查看虚拟机vnc端口
virsh edit cirros #编辑虚拟机xml配置
域的基本管理
# virsh help domain # 查看domain的命令liebiao
1、附加磁盘设备
qemu-img create -f qcow2 -o size=20G,preallocation=metadata /var/image/centos_1810_20G.qcow2 #创建磁盘
qemu-img info /var/image/centos_1810.img
virsh attach-disk --help #附加磁盘命令
--persistent 永久生效
--config 下一次启动生效
--type 指定磁盘类型
--driver 指定磁盘驱动
--print-xml 显示xml配置,命令不生效
virsh attach-disk --domain centos1810 --source /var/image/centos_1810_20G.qcow2 --target vdb --targetbus virtio #添加磁盘并指定总线类型
virsh detach-disk --help #拆除磁盘命令
--persistent 永久生效
--config 下一次启动生效
virsh detach-disk centos1810 --target vdb
2、附加新的网络
virsh attach-interface --help #附加网络命令
--config
--model #接口模块
--persistent
virsh attach-interface --domain centos-2004-database01 --type bridge --source br0 --model virtio --persistent
virsh detach-interface --help #分离网络
--config
--persistent
--mac #指定卸载网卡的mac
virsh detach-interface --domain centos-2004-database01 --type bridge --mac 52\:54\:00\:14\:ac\:37 --persistent
3、运行状态相关
virsh cpu-stats cirros #域占用物理cpu的状态
virsh dumpxml cirros #域xml信息
--migratable #提供一个适合迁移的xml
virsh reboot cirros #重启一个域
virsh save cirros /var/image/cirros.save #保存一个正在运行的域的ram状态到指定文件
virsh restore /var/image/cirros.save #从文件保存的状态中还原域
virsh suspend --domain cirros #挂起域,暂停在内存中
virsh resume cirros #恢复域
virsh vcpucount cirros #域cpu数
virsh vcpuinfo cirros #域cpu基本信息
virsh vcpupin --help #控制域cpu亲和性 绑定vcpu到cpu
virsh setvcpus --help #改变vcpu的数量,被最大CPU数限制
virsh setvcpu --help #连接或分离vcpu
virsh blkiotune cirros #获取或设置virtio参数
virsh domiflist cirros #列出所有虚拟接口网卡
virsh dominfo cirros #域信息
virsh nodeinfo #节点信息
virsh sysinfo #hypervisor信息
virsh uri #访问接口
virsh version #版本信息
virsh iface-list --all #列出宿主机物理网络接口
virsh iface-bridge --help #创建网桥设备并连接至物理网络设备
virsh iface-unbridge --help #拆下接口,删除桥
virsh nwfilter-list #filter网络过滤
virsh net-list #用户空间网络
snapshot
virsh snapshot-create-as --domain cirros --name null --disk-only
--name
--disk-only #只对磁盘快照
virsh snapshot-list --domain cirros
virsh snapshot-revert --domain cirros --snapshotname null
--children #删除快照和子集
--children-only #只删除子集
--metadata #只删除元数据
storage volume #指外部的网络存储 一般为ISCSI
virsh vol-list --help
virtio
kvm使用了硬件辅助虚拟化所以cpu的效率很高,不过在I/O方面是通过qemu纯软件的方式模拟io,每次虚拟机发起io请求时,kvm内核模块会拦截此次请求,处理请求后将其放入io共享页,后通知用户空间的qemu进程。
qemu获得io操作结果之后,模拟出本次的io操作再次将结果放回io共享页,同时通知kvm模块。
kvm模块读取qemu模拟的io操作返回给虚拟机
virtio是一个运行在hypervisor上的一个api接口,让虚机知道自己运行在虚拟环境中,进行io操作时通过virtio与hypervisor通信,从而拥有更好的性能
磁盘快照
指定数据集合的一个完全可用拷贝,改拷贝包括相应数据在某个时间点的映像。快照可以是所表示的数据的一个副本,也可以是数据的复制品。
快照是指保存在存储设备中的数据的引用标记和指针。
在建立磁盘快照时,并不需要拷贝数据本身,只是通知文件系统将目前有数据的磁盘区块全部保留起来,不被覆写。这个通知只需要很短的时间。
接下来的文件的修改或任何新增、删除动作,均不会覆写数据原来所在的磁盘区块,而是将修改的部分写入其他可用磁盘区块中。