[toc]

kvm 学习笔记

kvm相关知识梳理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
KVM: kernel-based Virtual Machine, Qumranet 公司,依赖于HVM: Intel VT-x, ADM  ADM-V:
KVM模块载入后的系统的运行模式:
内核模式: GuestOS执行I/O类操作,或其它的特殊指令的操作:称作“来宾-内核”模式;
用户模式: 代表GuestOS请求I/O类操作,宿主机用户模式;
来宾模式: GuestOS的非I/O类操作;事实上,它被称为“来宾-用户”模式。
kvm hypervisor:
KVM的组件:
/dev/kvm: 工作于hypervisor,在用户空间,可通过ioctl()系统调用来完成VM创建、启动管理功能;它是一个字符设备,功能: 创建VM、为VM分配内存、读写VCPU的寄存器、向VCPU注入中断、运行VCPU等等;
qemu进程: 工作于用户空间,主要用于实现模拟PC机的IO设备;
KVM特性:
内存管理:
将分配给VM的内存交换至SWAP;
支持使用Huge Page;
支持使用Intel EPT或AMD RVI技术完成内存地址映射; GVA--> GPA -->HPA
支持KSM(Kernel Same-page Merging)
硬件支持:
取决于Linux内核
存储:
本地存储:
网络附加存储:
存储区域名网络
分布式存储: 例如GlustFS
实时迁移:
实时迁移:
支持的GuestOS:
Linux, Windows, OpenBSD, FreeBSD, OpenSolaris;
设备驱动:
IO设备的完全虚拟化: 模拟硬件
IO设备的半虚拟化: 在GuestOS中安装驱动: virtio
virtio-blk, virtio-net, virtio-pci,virtio-console, virtio-ballon
KVM局限性:
一般局限性:
CPU overcommit
时间记录难以精确,依赖于时间同步机制
MAC地址:
VM量特别大时,存在冲突的可能性;
实时迁移:
性能局限性:
KVM的工具栈
qemu:
qemu-kvm
qemu-img
libvirt
GUI: virt-manager, virt-viewer
CLI: virt-install, virsh
QEMU主要用到以下几个部分:
处理器模拟器
仿真IO设备
关联模拟的设备至真实设备;
调试器
与模拟器交互的用户接口

安装

1、确保CPU支持HVM
# grep -E --color=auto "(vmx|svm)" /proc/cpuinfo
2、装载模块
# modeprobe kvm
# modeprobe kvm-intel
3、验证 /dev/kvm

管理工具栈

qemu-kvm
libvirt
管理kvm虚拟的方案:
qemu: /usr/libexec/
安装工具:
libvirt: virt-install virt-manager
管理工具:
virsh virt-manager virt-viewer VM Platform

1
2
3
4
5
6
7
8
9
10
11
# yum install qemu-kvm
# ln -sv /usr/libexec/qemu-kvm /usr/bin/
命令选项
标准选项:
显示选项:
块设备选项:
i386平台专用选项:
字符设备选项:
蓝牙设备选项:
Linux 启动专用选项:
调试/专家模式选项:


补充资料: KVM内存管理
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更的好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。

KVM基于Intel的EPT(Extended Page Table) 或AMD的 RVI(Rapid Virtualization Indexing) 技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。

此外,KVM还借助于KSM(kernel Same-page Merging) 这个内核特性实现了内存页面共享,KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的页面,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供 一个新的页面副本。实践中,运行于同一个物理主机的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很高的,比如共享库,内核或其它内存对象等都有可能表现为机同的页面,因此,KSM技术可以降低内存占用进而提高整体性能。


补充资料:
VMM: 对IO的驱动有三种模式:
自主VMM: VMM 自行提供驱动和控制台;
混合VMM: 借助于OS提供驱动;
依赖于外部OS实现特权域
自我提供特权域
寄宿式VMM:
IO虚拟化模型:
模拟
半虚拟化
透传

KVM:hvm
kvm,

1
2
3
4
5
    # modinfo kvm
# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm

启动使用微缩版Linux

cirros project : 为cloud 环境测试vm提供的微缩版Linux:
启动第一个虚拟机:

cirros

1
2
# qemu-kvm -m 128 -smp 2 -name "test" -hda /images/kvm/cirros-0.3.4-x86_64-disk.img
VNC server running on `::1:5900'

安装tigervnc

1
# yum -y install tigervnc

用-drive指定磁盘映像文件

1
#   qemu-kvm -m 128 -name test -smp 2 -drive  file=/images/kvm/cirros-0.3.4-x86_64-disk.img,if=virtio,media=disk,cache=writeback,fromat=qcow2

通过cdrom启动winxp的安装:

1
# qemu-kvm -name winxp -smp 4, sockets=1,cores=2,threads=2 -m 512 -drive file=/images/kvm/winxp.img,if=ide,media=disk,cache=writeback,format=qcow2 -drive file=/root/winxp_ghost.iso,media=cdrom

指定使用格拉网络接口:

1
2
# qemu-kvm -m 128 -name test -smp 2 -drive file= /images/kvm/cirros-0.3.4-x86_64-disk.img
,if=virtio,media=disk,cache=writeback,format=qcow2 -net nic -net tap,script=/etc/if-up,downscript=no -nographic

qemu-kvm管理KVM虚拟机
Qemu是一个广泛使用的开源计算机仿真器和虚拟机。当作为仿真器时,可以在一种架构(如PC机)下运行另一个架构(如ARM)下的操作系统和程序,而通过动态转化,其可以获取很高的运行效率。当作为一个虚拟机时,qemu可以通过直接使用真机的系统资源,让虚拟系统能够获得接近于物理机的性能表现。qemu支持xen或者kvm模式下的虚拟化。当用kvm时,qemu可以虚拟x86、服务器和嵌入式powerpc,以及s390系统。

QEMU 当运行与主机架构相同的目标架构时可以使用KVM例如,当在一个x86兼容处理器上运行 qemu-system-x86时,可以利KVM加速一为宿主机和客户机提供更好的性能。

Qemu 有如下几个部组成:

  • 处理器模拟器(x86、PowerPC和Sparc)
  • 仿真设备(显卡、网卡、硬盘、鼠标等)
  • 用于将仿真设备连接至主机设备(真实设备)的通用设备;
  • 虚拟机的描述信息;
  • 调试器;
  • 与模拟器交互的用户接口。

使用qemu-kvm安装Guest
基于libvirt 的工具如virt-manager和virt-install提供了非常便捷的虚拟机管理接口,但它们事实上已经第二次开发后又封装了qemu-kvm的工具。因此,直接使用qemu-vkm命令也能够完成此前的任务。

1
2
3
# qemu-kvm -m 128 -cpu host -smp 2 -name "test" -drive file=/images/kvm/cirros-0.3.4-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback
# qemu-img create -o size=20G,preallocation=metadata -f qcow2 /images/winxp.qcow2
# qemu-kvm -m 512 -smp 2 -cpu host -drive file=/images/windows/winxp.qcow2,media=disk -drive file=/root/winxp_ghost.iso,media=cdrom --boot order=dc, once=d

指定vnc 桌面,如指定桌面号为1 则启用端口为5901, 若指定桌面号为0,则启用端口为5900

1
# qemu-kvm -m 128 -cpu host -smp 2 -name "test" -drive file=/images/kvm/cirros-0.3.4-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback -vnc 0.0.0.0:1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
qemu-kvm命令

在RHEL6上,qemu-kvm位于/usr/libexec目录中。由于此目录不属于PATH环境变量,故无法直接使用,这样也阻止了可以直接使用qemu作为创建并管理虚拟机。如若想使用qemu虚拟机,可以通过将/usr/libexec/qemu-kvm链接为/usr/bin/qemu实现。

# ln -sv /usr/lib/exec/qemu-kvm /usr/bin/qemu-kvm

qemu-kvm命令使用格式为“qemu-kvm [options] [disk_image]”,其选项非常多,不过,大致可分为如下几类。

👉🏾 标准选项;
👉🏾 USB选项;
👉🏾 显示选项;
👉🏾 i386平台专用选项;
👉🏾 网络选项;
👉🏾 字符设备选项;
👉🏾 蓝牙相关选项;
👉🏾 Linux系统引导专用选项;
👉🏾 调试/专家模式选项;
👉🏾 PowerPC专用选项;
👉🏾 Sparc32专用选项;

考虑到篇幅及使用需要,这里介绍的选项主要涉及到标准选项、显示选项、i386平台专用选项及Linux系统引导专用选项等相关的选项。

qemu-kvm的标准选项

qemu-kvm的标准选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等。
👉🏾 -name name:设定虚拟机名称;
👉🏾 -M machine:指定要模拟的主机类型,如Standard PC、ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”获取所支持的所有类型;
👉🏾 -m megs:设定虚拟机的RAM大小;
👉🏾 -cpu model:设定CPU模型,如coreduo、qemu64等,可以使用“qemu-kvm -cpu ?”获取所支持的所有模型;
👉🏾 -smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:设定模拟的SMP架构中CPU的个数等、每个CPU的核心数及CPU的socket数目等;PC机上最多可以模拟255颗CPU;maxcpus用于指定热插入的CPU个数上限;
👉🏾 -numa opts:指定模拟多节点的numa设备;
👉🏾 -fda file
👉🏾 -fdb file:使用指定文件(file)作为软盘镜像,file为/dev/fd0表示使用物理软驱;
👉🏾 -hda file
👉🏾 -hdb file
👉🏾 -hdc file
👉🏾 -hdd file:使用指定file作为硬盘镜像;
👉🏾 -cdrom file:使用指定file作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用;将file指定为/dev/cdrom可以直接使用物理光驱;
👉🏾 -drive option[,option[,option[,...]]]:定义一个硬盘设备;可用子选项有很多。
👉🏾 file=/path/to/somefile:硬件映像文件路径;
👉🏾 if=interface:指定硬盘设备所连接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
👉🏾 index=index:设定同一种控制器类型中不同设备的索引号,即标识号;
👉🏾 media=media:定义介质类型为硬盘(disk)还是光盘(cdrom);
👉🏾 snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或off;
👉🏾 cache=cache:定义如何使用物理机缓存来访问块数据,其可用值有none、writeback、unsafe和writethrough四个;
👉🏾 format=format:指定映像文件的格式,具体格式可参见qemu-img命令;
👉🏾 -boot [order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一个字符表示;不同的架构所支持的设备及其表示字符不尽相同,在x86 PC架构上,a、b表示软驱、c表示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器;默认为硬盘设备;
-boot order=dc,once=d

qemu-kvm的显示选项

显示选项用于定义虚拟机启动后的显示接口相关类型及属性等。

👉🏾 -nographic:默认情况下,qemu使用SDL来显示VGA输出;而此选项用于禁止图形接口,此时,qemu类似一个简单的命令行程序,其仿真串口设备将被重定向到控制台;
👉🏾 -curses:禁止图形接口,并使用curses/ncurses作为交互接口;
👉🏾 -alt-grab:使用Ctrl+Alt+Shift组合键释放鼠标;
👉🏾 -ctrl-grab:使用右Ctrl键释放鼠标;
👉🏾 -sdl:启用SDL;
👉🏾 -spice option[,option[,...]]:启用spice远程桌面协议;其有许多子选项,具体请参照qemu-kvm的手册;
👉🏾 -vga type:指定要仿真的VGA接口类型,常见类型有:
👉🏾 cirrus:Cirrus Logic GD5446显示卡;
👉🏾 std:带有Bochs VBI扩展的标准VGA显示卡;
👉🏾 vmware:VMWare SVGA-II兼容的显示适配器;
👉🏾 qxl:QXL半虚拟化显示卡;与VGA兼容;在Guest中安装qxl驱动后能以很好的方式工作,在使用spice协议时推荐使用此类型;
👉🏾 none:禁用VGA卡;
👉🏾 -vnc display[,option[,option[,...]]]:默认情况下,qemu使用SDL显示VGA输出;使用-vnc选项,可以让qemu监听在VNC上,并将VGA输出重定向至VNC会话;使用此选项时,必须使用-k选项指定键盘布局类型;其有许多子选项,具体请参照qemu-kvm的手册;

display:
(1)host:N
172.16.100.7:1, 监听于172.16.100.7主的5900+N的端口上
(2) unix:/path/to/socket_file
(3) none
options:
password: 连接时需要验正密码;设定密码通过monitor接口使用change
reverse: “反向”连接至某处于监听状态的vncview上;
-monitor stdio:表示在标准输入输出上显示monitor界面
-nographic
Ctrl-a, c: 在console和monitor之间切换
Ctrl-a, h: 显示帮助信息
SDL: Simple Directmedia Layer
VNC: Virtual Network Computing,基于RFB

# rpm -ql bridge-utils

1
2
3
4
5
6
7
8
# brctl addbr br0
# brctl stp br0 off
# brctl delbr br0
# brctl show
# ip link set dev br0 down
# ip link set dev br0 up
# ip link show
# 临时生效
1
2
# nmtui
# nmcli
1
2
# qemu-kvm -net nic,model=?
qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
网络属性相关选项

网络属性相关选项用于定义网络设备接口类型及其相关的各属性等信息。这里只介绍nic、tap和user三种类型网络接口的属性,其它类型请参照qemu-kvm手册。

👉🏾 -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:创建一个新的网卡设备并连接至vlan n中;PC架构上默认的NIC为e1000,macaddr用于为其指定MAC地址,name用于指定一个在监控时显示的网上设备名称;emu可以模拟多个类型的网卡设备,如virtio、i82551、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不过,不同平台架构上,其支持的类型可能只包含前述列表的一部分,可以使用“qemu-kvm -net nic,model=?”来获取当前平台支持的类型;
👉🏾 -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:通过物理机的TAP网络接口连接至vlan n中,使用script=file指定的脚本(默认为/etc/qemu-ifup)来配置当前网络接口,并使用downscript=file指定的脚本(默认为/etc/qemu-ifdown)来撤消接口配置;使用script=no和downscript=no可分别用来禁止执行脚本;
注意: 默认mac 地址均为: 52:54:00:12:34:56,使用中需要手动指定。
👉🏾 -net user[,option][,option][,...]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:
👉🏾 vlan=n:连接至vlan n,默认n=0;
👉🏾 name=name:指定接口的显示名称,常用于监控模式中;
👉🏾 net=addr[/mask]:设定GuestOS可见的IP网络,掩码可选,默认为10.0.2.0/8;
👉🏾 host=addr:指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2;
👉🏾 dhcpstart=addr:指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.16-x.x.x.31;
👉🏾 dns=addr:指定GuestOS可见的dns服务器地址;默认为GuestOS网络中的第三个地址,即x.x.x.3;
👉🏾 tftp=dir:激活内置的tftp服务器,并使用指定的dir作为tftp服务器的默认根目录;
👉🏾 bootfile=file:BOOTP文件名称,用于实现网络引导GuestOS;如:qemu -hda linux.img -boot n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0

brctl addbr br0
brctl addif br0 eth0

brctl addbr br1

kvm的网络模型:

1、隔离模型: 在host 创建一个vswitch (bridge device): 每个虚拟机的tap设备直接添加至vswitch上;
2、路由模型:激活tap,并将其加入到指定的bridge,给虚拟的brige添加地址,打开核心转发;
3、NAT模型:激活tap,并将其加入到指定的bridge; 额外: 打开核心转发,并添加到nat规则;
4、桥接模型:激活tap,并将其加入到指定的bridge;

安装示例

1
2
3
4
5
6
# qemu-kvm -name "rhel5.8" -m 512 \
-smp 2 -boot d \
-drive file=/VM/images/rhel5.8/hda,if=virtio,index=0,media=disk,format=qcow2 \
-drive file=/isos/rhel-5.8.iso,index=1,media=cdrom \
-net nic,model=virtio,macaddr=52:54:00:A5:41:1E \
-vga cirrus -balloon virtio
1
2
# qemu-img create /images/centos/centos6.img -o size=120G, preallocation=metadata -f qcow2
# qemu-kvm -m 512 -smp 2 -name centos -drive file=/images/centos/centos6.img,media=disk,if=virtio -net nic,model=virtio,macaddr=52:54:00:55:31:18 -net tap,ifname=centos6.0,script=/etc/qemu-ifup -boot order=nc, once=n

libvirt 工具栈

支持的虚拟化技术: KVM, XEN, VMAWARE, Qemu, LXC, OpenVZ;

安装:
CentOS6
yum install libvirt libvirt-client python-virtinst virt-manager
CentOS7
yum install libvirt libvirt-client virt-install virt-manager

1
2
libvirt: 工具实现虚拟机管理:
装系统:virt-manager, virt-install, virsh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
使用virt-install创建虚拟机并安装GuestOS
virt-install是一个命令行工具,它能够为KVM、Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装;此外,它能够基于串行控制台、VNC或SDL支持文本或图形安装界面。安装过程可以使用本地的安装介质如CDROM,也可以通过网络方式如NFS、HTTP或FTP服务实现。对于通过网络安装的方式,virt-install可以自动加载必要的文件以启动安装过程而无须额外提供引导工具。当然,virt-install也支持PXE方式的安装过程,也能够直接使用现有的磁盘映像直接启动安装过程。
virt-install命令有许多选项,这些选项大体可分为下面几大类,同时对每类中的常用选项也做出简单说明。
👉🏾 一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等;
👉🏾 -n NAME, --name=NAME:虚拟机名称,需全局惟一;
👉🏾 -r MEMORY, --ram=MEMORY:虚拟机内在大小,单位为MB;
👉🏾 --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,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://172.16.0.1/pub;
👉🏾 --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://172.16.0.1/class.cfg"
👉🏾 --boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 ;例如:
👉🏾 --boot cdrom,hd,network:指定引导次序;
👉🏾 --boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”:指定启动系统的内核及initrd文件;
👉🏾 存储配置:指定存储类型、位置及属性等;
👉🏾 --disk=DISKOPTS:指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;常用的选项有:
👉🏾 device:设备类型,如cdrom、disk或floppy等,默认为disk;
👉🏾 bus:磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
👉🏾 perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
👉🏾 size:新建磁盘映像的大小,单位为GB;
👉🏾 cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
👉🏾 format:磁盘映像格式,如raw、qcow2、vmdk等;
👉🏾 sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
👉🏾 --nodisks:不使用本地磁盘,在LiveCD模式中常用;
👉🏾网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;
👉🏾 -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
👉🏾 bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
👉🏾 network=NAME:连接至名为“NAME”的网络;
其它常用的选项还有:
👉🏾 model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;
👉🏾 mac:固定的MAC地址;省略此选项时将使用随机地址,但无论何种方式,对于KVM来说,其前三段必须为52:54:00;
👉🏾 --nonetworks:虚拟机不使用网络功能;
👉🏾 图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;
👉🏾 --graphics TYPE,opt1=val1,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;
👉🏾 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=val1,opt2=val2,...”,例如:
👉🏾 --serial pty:创建伪终端;
👉🏾 --serial dev,path=HOSTPATH:附加主机设备至此虚拟机;
👉🏾 --video=VIDEO:指定显卡设备模型,可用取值为cirrus、vga、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或no选项,则自动回答为yes;
👉🏾 --dry-run:执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt;
👉🏾 -d, --debug:显示debug信息;

尽管virt-install命令有着类似上述的众多选项,但实际使用中,其必须提供的选项仅包括--name、--ram、--disk(也可是--nodisks)及安装过程相关的选项。此外,有时还需要使用括--connect=CONNCT选项来指定连接至一个非默认的hypervisor。
1
# virt-install -n centos6.7 -r 512 -vcpus=2, maxvcpus=4 --pxe --disk /images/centos/centos6.7.qcow2,size=120,format=qcow2,bus=virtio,spare=yes --network bridge=br0,model-virtio --force 

生产示例

1
virt-install --name testwinserver  --memory 6144 --vcpus 2 --disk device=cdrom,path=/kvmiso/cn_windows_server_2016_x64_dvd_9718765.iso --disk device=cdrom,path=/usr/share/virtio-win/virtio-win.iso --disk path=/kvmdata/testwinserver.img,size=300,bus=virtio --network bridge=br-ext,model=virtio --noautoconsole --accelerate --hvm --graphics vnc,listen=0.0.0.0 --video vga --input tablet,bus=usb --os-type=windows --check path_in_use=off

评论