libvirt工具栈详解
支持的虚拟化技术
KVM
Xen
LXC
VMware
Qemu
OpenVZ
libvirt组件
常用libvirt工具
virsh-manager
虚拟机图形化管理工具
virsh-install
能实现虚拟机的创建、安装
virsh
丰富的管理命令管理虚拟机
guestfish
磁盘映像文件API接口,在不挂载磁盘映像文件的前提的,修改文件内容
guestmount
无须挂载映像为即可使用
virt-builder
快速构建、定制虚拟机
virt-cat
快速查看磁盘映像文件中的内容
virt-customize
定制磁盘映像文件
virt-df
磁盘映像文件空间查看
virt-diff
比较两个磁盘映像文件差异
virt-edit
编辑磁盘映像文件
virt-filesystems
发现文件系统、分区、管理卷等
virt-log
虚拟机日志
virt-make-fs
创建文件系统
virt-rescue
进入磁盘映像救援模式
virt-resize
修改磁盘映像文件大小,存储模式
virt-top
查看各虚拟机资源利用率情况
virt-viewer
虚拟机图形化管理功能
wirt-what
探测某程序是否运行在虚拟化环境中
virt-xml-validate
判断xml文件语法
libvirt工具安装
# CentOS6
yum install -y libvirt libvirt-client python-virtinst virt-manager
# CentOS7
yum install -y libvirt libvirt-client virt-manager virt-install
启动libvirtd服务
1 systemctl start libvirtd
libvirt和libvirtd配置文件
# 库文件, master and agent all need
libvirt配置文件 /etc/libvirt/libvirt.conf
守护进程配置文件 /etc/libvirt/libvirtd.conf
virt-install
简介
它是一个命令行管理工具,它能够为KVM、Xen、或其他支持libvirt API的hypervisor创建虚拟机并完成GuestOS安装
它能够基于串行控制台、VNC或SDL支持文件或图形化安装界面
安装介质
本地介质
如CDROM
通过网络方式,如NFS、HTTP或FTP服务实现
virt-install可以自动加载必要文件以启动安装过程而无须额外提供引导工具
也支持PXE安装
还可以使用现有磁盘映像文件直接启动安装过程
virt-install命令选项
一般选项 指定虚拟机名称、内存大小、VCPU个数及其它特性等
-n NAME, --name=NAME 虚拟名称,需要全局唯一
-r MEMORY, --ram=MEMORY 虚拟机内存大小,单位为MB
--vcpus=VCPUS[,maxvcpus=MAX][,socket=#][,cores=#][,threads=#] VCPU个数
--cpu=CPU CPU模式及特性,如coreduo等
可以使用qemu-kvm -cpu ? 来获取支持的CPU模式
安装选项 指定安装方法、GuestOS类型
-c CDROM, --cdrom=CDROM 指定光盘安装介质
-l LOCATION, --location=LOCATION 安装源URL,支持FTP、HTTP及NFS等
ftp://x.x.x.x/path
--pxe 基于PXE完成安装
--livecd 把光盘当作LiveCD
--os-type = DISTRO_TYPE 操作系统类型,如linux、unix或windows等
--os-variant = DISTRO_VARIANT 某类型操作系统的发行版本,如rhel5、fedora8等
-x EXTRA, --extra-args = EXTRA 根据--location指定的方式安装GuestOS时,用于传递给内核的额外参数
例如指定kickstart文件的位置, --extra-args "ks=http://x.x.x.x/file_path"
--boot=BOOTOPTS 指定安装过程完成后的配置选项
指定引导设备次序
使用指定的而非安装的kernel/initrd来引导系统启动
--boot cdrom,hd,network 指定引导次序
--boot kernel = KERNEL,initr=INITRD,kernel_args="console=/dev/ttyS0" 指定启动系统的内核及initrd文件
存储配置 指定存储类型、位置及属性等
--disk = DISKOPTS 指定存储设备及其属性
--disk /some/storage/path,opt1=var1,opt2=var2
常用选项有
device 设备类型,如cdrom、disk、floppy等,默认disk
bus 磁盘总线类型,其值可以为ide、scsi、usb、virtio、或xen
perms 访问权限,如rw、ro、sh(共享可读写),默认为rw
size 新建磁盘映像文件大小、单位为GB
cache 缓存类型、其值有none、writethrough、及writeback
format 磁盘映像格式,例如raw、qcow2、vmdk等
sparse 磁盘映像使用稀疏格式,即不立即分配指定大小的空间
--nodisks 不使用本地磁盘,在LiveCD模式中使用
网络配置 指定网络接口的网络类型及接口属性如MAC地址、驱动模式等
-w NETWORK, --network=NETWORK,opt1=var1,opt2=var2 将虚拟机连入宿主机的网络中
其中NETWORK可以为
bridge=BRIDGE 连接至名为BRIDGE的桥设备
network=NAME 连接至名为NAME的网络
其它常用的选项有
model GuestOS中看到网络设备型号,如e1000、rtl8139或virtio等
mac 固定mac地址,省略此选项将使用随机地址,但无论哪种方式、对KVM来说,其产商标识符为52:54:00
--nonetwork 虚拟机不使用网络功能
图形配置 定义虚拟机显示功能相关的配置,如VNC相关配置
--graphics TYPE,opt1=var1,opt2=var2 指定图形显示相关的配置
此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口
TYPE 指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc
port TYPE为vnc或spice时,所监听的端口
listen TYPE为vnc或spice是,所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值
password TYPE为vnc或spice时,为远程访问监听的服务进行指定认证密码
--noautoconsole 禁止自动连接至虚拟机的控制台
设备选项 指定文本控制台、声音设备、串行接口、并行接口、显示接口等
--serial=CHAROPTS 附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项
--serial=TYPE,opt1=var1,opt2=var2
--serial pty 创建伪终端
--serial dev,path=HOSTPATH 附加主机设备至此虚拟机
--video=VIDEO 指定显卡设备模型,可用取值为cirrus、vag、qxl或vmvga
虚拟化平台 虚拟化模型(hvm或paravirt)、模拟的CPU平台类型、模拟的主机类型、hypervisor类型(如kvm、xen或qemu等)以及当前虚拟机的UUID等
-v, --hvm 当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化
-p, --paravirt 指定使用半虚拟化
--virt-type 使用的hypervisor,如kvm、qemu、xen等
所有可用值可以使用 virsh capabilities 命令获取
其它
--autostart 指定虚拟机是否在物理机启动后自动启动
--print-xml 如果虚拟机不需要安装过程(--import、--boot)
显示生成的XML而不是创建此虚拟机,默认情况下,此选项仍会创建磁盘映像
--force 禁止进入交互模式,如果有需要回答yes or no,自动回答yes
--dry-run 执行整个创建虚拟机的过程,并不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt
-d, --debug 显示debug信息
PS
尽管virt-install命令有着众多选项,但实际中,必须提供的选项仅包括
--name、--ram、--disk及安装过程相关选项
有时还需要使用--connect=CONNECT选项来指定连接至一个非默认的hypervisor
virt-install使用实例
实例一
# 基本安装
virt-install -n "centos6" -r 512 --vcpus=2 -l http://192.168.180.128/yum/centos6 \
-x "ks=http://192.168.168.180.128/centos6.x86_64.cfg" --disk path=/images/kvm/centos6.img,size=50G,sparse=yes \
--force -w bridge=br0,model=virtio
实例二
# 下面这个实例创建一个名为rhel5的虚拟机,其hypervisor为KVM,内存大小为512MB,磁盘为8G的映像文件/var/lib/libvirt/images/rhel5.img,通过boot.iso光盘镜像来引导启动安装过程
virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 \
--disk path=/var/lib/libvirt/images/rhel5.img,size=8G \
--graphics vnc --cdrom /tmp/boot.iso --os-variant rhel5
实例三
# 创建一个名为rhel6的虚拟机,其有两个虚拟CPU,安装方法为FTP,并指定了ks文件路径,磁盘映像文件为稀疏格式,连接至物理主机上的名为brnet0的桥接网络
virt-install --connect qemu:///system --virt-type kvm --name rhel6 --ram 1024 \
--vcpus 2 --network bridge=brnet0 --disk path=/iamges/kvm/rhel6.img,size=50G,sparse=yes \
--location ftp://192.168.180.128/rhel/dvd --extra_args "ks=http://192.168.180.128/rhel6.cfg" \
--os-variant rhel6 --force
实例四
# 创建一个名为rhel5的虚拟机,磁盘映像文件为稀疏模式,磁盘映像文件格式为qcow2且总线类型为virtio,安装过程不启动图形界面,
# 但会启动一个串行终端将安装过程以字符形式显示在当前文本模式下,虚拟机显卡类型为cirrus
virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 \
--vcpus 2,maxvcpus=4 --disk path=/images/kvm/rhel5.8.img,size=50G,format=qcow2,bus=virtio,sparse=yes \
--network bridge=brnet0,model=virio --nographics --location ftp://192.168.180.128/pub \
--extra-agrs "ks=http://192.168.180.128/rhel5.8.cfg console=ttyS0 serial" \
--os-variant rhel5 --force --video=cirrus
实例五
# 利用已经存在的磁盘映像文件(已经安装好的系统)创建一个名为rhel5.8的虚拟机
virt-install --name rhel5.8 --ram 512 --disk /iamges/kvm/rhel5.8.img --import
# 添加一个物理终端,并添加控制台到终端设备上
virt-install --name rhel5.8 --ram 512 --disk /iamges/kvm/rhel5.8.img --import --serial=pty --console=pty --nographics
# 回到原终端 " Ctrl + ] "
# 重新连接
virsh console Domain_ID
PS
每个虚拟机创建后,其配置信息保存在/etc/libvirt/qemu目录中,文件名与虚拟机相同,格式为XML
virsh工具使用
帮助
virsh help
man virsh
virsh help <options>
命令解析
Domain Management (help keyword 'domain'):
* attach-device 从一个XML文件附加装置
* attach-disk 附加磁盘设备
* attach-interface 获得网络界面
autostart 自动开始一个域
blkdeviotune 设定或者查询块设备 I/O 调节参数。
blkiotune 获取或者数值 blkio 参数
blockcommit 启动块提交操作。
blockcopy 启动块复制操作。
blockjob 管理活跃块操作
blockpull 使用其后端映像填充磁盘。
blockresize 创新定义域块设备大小
change-media 更改 CD 介质或者软盘驱动器
* console 连接到客户会话
cpu-baseline 计算基线 CPU
cpu-compare 使用 XML 文件中描述的 CPU 与主机 CPU 进行对比
* cpu-stats 显示域 cpu 统计数据
* create 从一个 XML 文件创建一个域
define 从一个 XML 文件定义(但不开始)一个域
desc 显示或者设定域描述或者标题
* destroy 销毁(停止)域
* detach-device 从一个 XML 文件分离设备
* detach-disk 分离磁盘设备
* detach-interface 分离网络界面
domdisplay 域显示连接 URI
domfsfreeze Freeze domain's mounted filesystems.
domfsthaw Thaw domain's mounted filesystems.
domfsinfo Get information of domain's mounted filesystems.
domfstrim 在域挂载的文件系统中调用 fstrim。
domhostname 输出域主机名
domid 把一个域名或 UUID 转换为域 id
domif-setlink 设定虚拟接口的链接状态
domiftune 获取/设定虚拟接口参数
domjobabort 忽略活跃域任务
domjobinfo 域任务信息
domname 将域 id 或 UUID 转换为域名
domrename rename a domain
dompmsuspend 使用电源管理功能挂起域
dompmwakeup 从 pmsuspended 状态唤醒域
domuuid 把一个域名或 id 转换为域 UUID
domxml-from-native 将原始配置转换为域 XML
domxml-to-native 将域 XML 转换为原始配置
dump 把一个域的内核 dump 到一个文件中以方便分析
* dumpxml XML 中的域信息
edit 编辑某个域的 XML 配置
event Domain Events
inject-nmi 在虚拟机中输入 NMI
iothreadinfo view domain IOThreads
iothreadpin control domain IOThread affinity
iothreadadd add an IOThread to the guest domain
iothreaddel delete an IOThread from the guest domain
send-key 向虚拟机发送序列号
send-process-signal 向进程发送信号
lxc-enter-namespace LXC 虚拟机进入名称空间
managedsave 管理域状态的保存
managedsave-remove 删除域的管理保存
memtune 获取或者数值内存参数
perf Get or set perf event
metadata show or set domain's custom XML metadata
migrate 将域迁移到另一个主机中
migrate-setmaxdowntime 设定最大可耐受故障时间
migrate-compcache 获取/设定压缩缓存大小
migrate-setspeed 设定迁移带宽的最大值
migrate-getspeed 获取最长迁移带宽
migrate-postcopy Switch running migration from pre-copy to post-copy
numatune 获取或者数值 numa 参数
qemu-attach QEMU 附加
qemu-monitor-command QEMU 监控程序命令
qemu-monitor-event QEMU Monitor Events
qemu-agent-command QEMU 虚拟机代理命令
* reboot 重新启动一个域
reset 重新设定域
* restore 从一个存在一个文件中的状态恢复一个域,重新继续运行
* resume 重新恢复一个域
* save 把一个域的状态保存到一个文件,挂起
save-image-define 为域的保存状态文件重新定义 XML
save-image-dumpxml 在 XML 中保存状态域信息
save-image-edit 为域保存状态文件编辑 XML
schedinfo 显示/设置日程安排变量
screenshot 提取当前域控制台快照并保存到文件中
set-user-password set the user password inside the domain
* setmaxmem 改变最大内存限制值
* setmem 改变内存的分配
* setvcpus 改变虚拟 CPU 的号
* shutdown 关闭一个域
* start 开始一个(以前定义的)非活跃的域
* suspend 挂起一个域
ttyconsole tty 控制台
undefine 取消定义一个域
update-device 从 XML 文件中关系设备
* vcpucount 域 vcpu 计数
* vcpuinfo 详细的域 vcpu 信息
* vcpupin 控制或者查询域 vcpu 亲和性
emulatorpin 控制火车查询域模拟器亲和性
* vncdisplay vnc 显示
guestvcpus query or modify state of vcpu in the guest (via agent)
setvcpu attach/detach vcpu or groups of threads
domblkthreshold set the threshold for block-threshold event for a given block device or it's backing chain element
Domain Monitoring (help keyword 'monitor'):
domblkerror 在块设备中显示错误
domblkinfo 域块设备大小信息
* domblklist 列出所有域块
domblkstat 获得域设备块状态
domcontrol 域控制接口状态
domif-getlink 获取虚拟接口链接状态
domifaddr Get network interfaces' addresses for a running domain
* domiflist 列出所有域虚拟接口
domifstat 获得域网络接口状态
* dominfo 域信息
dommemstat 获取域的内存统计
* domstate 域状态
* domstats get statistics about one or multiple domains
* domtime domain time
* list 列出域
Host and Hypervisor (help keyword 'host'):
allocpages Manipulate pages pool size
* capabilities 性能
* cpu-models CPU models
domcapabilities domain capabilities
freecell NUMA可用内存
freepages NUMA free pages
hostname 打印管理程序主机名
* maxvcpus 连接 vcpu 最大值
node-memory-tune 获取或者设定节点内存参数
nodecpumap 节点 cpu 映射
nodecpustats 输出节点的 cpu 状统计数据。
* nodeinfo 节点信息
nodememstats 输出节点的内存状统计数据。
nodesuspend 在给定时间段挂起主机节点
* sysinfo 输出 hypervisor sysinfo
* uri 打印管理程序典型的URI
* version 显示版本
Interface (help keyword 'interface'):
iface-begin 生成当前接口设置快照,可在今后用于提交 (iface-commit) 或者恢复 (iface-rollback)
* iface-bridge 生成桥接设备并为其附加一个现有网络设备
iface-commit 提交 iface-begin 后的更改并释放恢复点
* iface-define 定义(但不启动)XML文件中的物理主机接口
* iface-destroy 删除物理主机接口(启用它请执行 "if-down")
* iface-dumpxml XML 中的接口信息
iface-edit 为物理主机界面编辑 XML 配置
* iface-list 物理主机接口列表
iface-mac 将接口名称转换为接口 MAC 地址
iface-name 将接口 MAC 地址转换为接口名称
iface-rollback 恢复到之前保存的使用 iface-begin 生成的更改
* iface-start 启动物理主机接口(启用它请执行 "if-up")
* iface-unbridge 分离其辅助设备后取消定义桥接设备
* iface-undefine 取消定义物理主机接口(从配置中删除)
Network Filter (help keyword 'filter'):
* nwfilter-define 使用 XML 文件定义或者更新网络过滤器
* nwfilter-dumpxml XML 中的网络过滤器信息
* nwfilter-edit 为网络过滤器编辑 XML 配置
* nwfilter-list 列出网络过滤器
* nwfilter-undefine 取消定义网络过滤器
Networking (help keyword 'network'):
net-autostart 自动开始网络
net-create 从一个 XML 文件创建一个网络
net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file
net-destroy 销毁(停止)网络
net-dhcp-leases print lease info for a given network
net-dumpxml XML 中的网络信息
net-edit 为网络编辑 XML 配置
net-event Network Events
net-info 网络信息
* net-list 列出网络
net-name 把一个网络UUID 转换为网络名
net-start 开始一个(以前定义的)不活跃的网络
net-undefine undefine a persistent network
net-update 更新现有网络配置的部分
net-uuid 把一个网络名转换为网络UUID
Node Device (help keyword 'nodedev'):
nodedev-create 根据节点中的 XML 文件定义生成设备
nodedev-destroy 销毁(停止)节点中的设备
nodedev-detach 将节点设备与其设备驱动程序分离
nodedev-dumpxml XML 中的节点设备详情
nodedev-list 这台主机中中的枚举设备
nodedev-reattach 重新将节点设备附加到他的设备驱动程序中
nodedev-reset 重置节点设备
nodedev-event Node Device Events
Secret (help keyword 'secret'):
secret-define 定义或者修改 XML 中的 secret
secret-dumpxml XML 中的 secret 属性
secret-event Secret Events
secret-get-value secret 值输出
secret-list 列出 secret
secret-set-value 设定 secret 值
secret-undefine 取消定义 secret
Snapshot (help keyword 'snapshot'):
* snapshot-create 使用 XML 生成快照
snapshot-create-as 使用一组参数生成快照
snapshot-current 获取或者设定当前快照
* snapshot-delete 删除域快照
snapshot-dumpxml 为域快照转储 XML
* snapshot-edit 编辑快照 XML
* snapshot-info 快照信息
* snapshot-list 为域列出快照
snapshot-parent 获取快照的上级快照名称
snapshot-revert 将域转换为快照
Storage Pool (help keyword 'pool'):
find-storage-pool-sources-as 找到潜在存储池源
find-storage-pool-sources 发现潜在存储池源
pool-autostart 自动启动某个池
pool-build 建立池
pool-create-as 从一组变量中创建一个池
pool-create 从一个 XML 文件中创建一个池
pool-define-as 在一组变量中定义池
pool-define define an inactive persistent storage pool or modify an existing persistent one from an XML file
pool-delete 删除池
pool-destroy 销毁(删除)池
pool-dumpxml XML 中的池信息
pool-edit 为存储池编辑 XML 配置
pool-info 存储池信息
pool-list 列出池
pool-name 将池 UUID 转换为池名称
pool-refresh 刷新池
pool-start 启动一个(以前定义的)非活跃的池
pool-undefine 取消定义一个不活跃的池
pool-uuid 把一个池名称转换为池 UUID
pool-event Storage Pool Events
Storage Volume (help keyword 'volume'):
vol-clone 克隆卷。
vol-create-as 从一组变量中创建卷
vol-create 从一个 XML 文件创建一个卷
vol-create-from 生成卷,使用另一个卷作为输入。
vol-delete 删除卷
vol-download 将卷内容下载到文件中
vol-dumpxml XML 中的卷信息
vol-info 存储卷信息
vol-key 为给定密钥或者路径返回卷密钥
vol-list 列出卷
vol-name 为给定密钥或者路径返回卷名
vol-path 为给定密钥或者路径返回卷路径
vol-pool 为给定密钥或者路径返回存储池
vol-resize 创新定义卷大小
vol-upload 将文件内容上传到卷中
vol-wipe 擦除卷
Virsh itself (help keyword 'virsh'):
cd 更改当前目录
echo echo 参数
exit 退出这个非交互式终端
help 打印帮助
pwd 输出当前目录
quit 退出这个非交互式终端
connect 连接(重新连接)到 hypervisor
KVM Managerment Tools
http://www.linux-kvm.org/page/Management_Tools
常用
oVirt 较轻量
ConVirt
Eucalyptus
OpenNebula
openQRM