1. QEMU、KVM 、QEMU-KVM

QEMU 提供了一系列的硬件模拟设备(cpu、网卡、磁盘等),客户机指令都需要QEMU翻译,因此性能较差。KVM 是Linux 内核提供的虚拟化模块,负责CPU和内存的虚拟化,但是缺少I/O设备的虚拟化。QEMU-KVM 就是 KVM 与 QEMU 的结合,KVM 负责CPU虚拟化+内存虚拟化,QEMU 模拟其他I/O设备。

2. QEMU-KVM 命令详解

2.1 qemu-kvm 命令基本格式

qemu-kvm 工具命令格式如下:

qemu-kvm [options] [disk_image]

其中,opions 是各种选项、参数,disk_image 是客户机的磁盘镜像文件(默认被挂载为第一个 IDE 磁盘设备)。

2.2 CPU 相关的参数

(1)-cpu 参数

指定CPU模型,默认的 CPU 模型为 qemu64,"-cpu ?" 可以查询当前 qemu-kvm 支持哪些 cpu 模型。

[root@192.168.118.14 ~]#qemu-kvm -cpu ?
x86           qemu64  QEMU Virtual CPU version 1.5.3                  
x86           phenom  AMD Phenom(tm) 9550 Quad-Core Processor        
x86         core2duo  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
x86            kvm64  Common KVM processor                            
x86           qemu32  QEMU Virtual CPU version 1.5.3                  
x86            kvm32  Common 32-bit KVM processor                    
x86          coreduo  Genuine Intel(R) CPU           T2600  @ 2.16GHz
x86              486                                                  
x86          pentium                                                  
x86         pentium2                                                  
x86         pentium3                                                  
x86           athlon  QEMU Virtual CPU version 1.5.3                  
x86             n270  Intel(R) Atom(TM) CPU N270   @ 1.60GHz          
x86      cpu64-rhel6  QEMU Virtual CPU version (cpu64-rhel6)          
x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)  
x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)    
x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)      
x86         Westmere  Westmere E56xx/L56xx/X56xx (Nehalem-C)          
x86      SandyBridge  Intel Xeon E312xx (Sandy Bridge)                
x86          Haswell  Intel Core Processor (Haswell)                  
x86        Broadwell  Intel Core Processor (Broadwell)                
x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)          
x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)          
x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)          
x86       Opteron_G4  AMD Opteron 62xx class CPU                      
x86       Opteron_G5  AMD Opteron 63xx class CPU                      
x86             host  KVM processor with all supported host features (only available in KVM mode)

如果想尽可能多的将宿主机的 CPU 特性暴露给客户机使用,则可以使用 "-cpu host" 参数。使用 "-cpu host" 参数会带来动态迁移的限制,不让客户机在不同的cpu硬件上迁移。

(2)-smp 参数

-smp n[,scores=scores][,threads=threads][,sockets=sockets]

设置客户机总共有 n 个逻辑CPU,并设置了其中 CPU socket 的数量、每个socket 上核心(core)的数量、每个核心上的线程(thread)数量。其中:n = sockets x cores x threads

2.3 内存相关的参数

(1) -m megs 参数

设置客户机内存大小为 megs MB。默认单位:MB,可设置 GB

(2)--mem-path path参数

从path路径表示的临时文件中为客户机分配内存,主要是分配大页内存(如2 MB 大页),如 "--mem-path /dev/hugepages"

(3)--mem-prealloc 参数

启动时即分配全部的内存,而不是根据客户机请求而动态分配,必须与 "--mem-path" 参数一起使用

(4)-balloon 开启内存气球的设置

"-balloon virtio" 为客户机提供 virtio_balloon 设备,从而通过内存气球balloon,可以在 QEMU monitor 中用 "balloon"命令来调节客户机占用内存的大小。

2.4 磁盘相关的参数

Block device options:
-fda/-fdb file  use 'file' as floppy disk 0/1 image
-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
       [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]
       [,serial=s][,addr=A][,id=name][,aio=threads|native]
       [,readonly=on|off][,copy-on-read=on|off]
       [[,bps=b]|[[,bps_rd=r][,bps_wr=w]]][[,iops=i]|[[,iops_rd=r][,iops_wr=w]]
                use 'file' as a drive image
-mtdblock file  use 'file' as on-board Flash memory image
-sd file        use 'file' as SecureDigital card image
-pflash file    use 'file' as a parallel flash image
-snapshot       write to temporary files instead of disk image files
-hdachs c,h,s[,t]
                force hard disk 0 physical geometry and the optional BIOS
                translation (t=none or lba) (usually QEMU can guess them)
-fsdev fsdriver,id=id[,path=path,][security_model={mapped-xattr|mapped-file|passthrough|none}]
[,writeout=immediate][,readonly][,socket=socket|sock_fd=sock_fd]
-virtfs local,path=path,mount_tag=tag,security_model=[mapped-xattr|mapped-file|passthrough|none]
        [,writeout=immediate][,readonly][,socket=socket|sock_fd=sock_fd]
-virtfs_synth Create synthetic file system image

(1)-hda、-hdb 和 -cdrom 等参数

  设置客户机的 IDE 磁盘和光盘设备。如 "-hda centos7.img" 将 centos7.img 镜像文件作为客户机的第一个 IDE 磁盘。

(2)-drive 参数

  详细的配置一个驱动。

例如: -drive file=/images/centos7.img,if=virtio,cache=writeback 使用 virtio_blk 驱动 和 磁盘回写机制 来支持该磁盘文件

(3)-boot 参数

-boot [order=drives][,once=drives][,menu=on|off]

设置客户机启动的各种选项(包括启动顺序等),如:在安装客户机操作系统时,使用 "-boot order=dc -hda centos7.img -cdrom centos7.iso",让 centos.img 文件作为IDE磁盘,安装光盘 centos7.iso 作为 IDE 光驱,并且从光盘启动客户机,从而让客户机进入到系统安装的流程中。

2.5 网络相关参数

(1) -net nic 参数

为客户机创建一个网卡,凡是使用 qemu-kvm 模拟的网卡作为客户机网络设备的情况都应该使用该参数,通常该参数与 -net tap 连用。

例如:-net nic model=virtio, macaddr=52:54:00:ac:0f:11 使用 -net nic 命令时,一定要手动指定mac地址,否则客户机的mac地址会与宿主机mac一致。

(2)-net user参数

让客户机使用不需要管理员权限的用户模式网络

例如:-net nic -net user

(3)-net tap参数

使用宿主机的TAP网络接口来帮助客户机建立网络。使用网桥连接和NAT模式网络的客户机都会使用到 "-net tap" 参数。

例如:-net nic -net tap,ifname=vnet0,script=/etc/qeum-ifup,downscript=no  ifname 指定在宿主机空间的网卡名称,script 和 downscript 为配置网络脚本。

2.6 显示相关的参数

(1)vnc参数

默认使用 vnc 方式显示客户机。

例如手动指定:-vnc localhost:2

(2)-nographic参数

让客户机以命令行的方式在当前终端启动显示。

例如:

[root@192.168.118.14 ~]#qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -nographic
...
[系统启动信息]
... login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
<!DOCTYPE login:    # Ctrl+A H 获取帮助信息
C-a h    print this help
C-a x    exit emulator
C-a s    save disk data back to file (if -snapshot)
C-a t    toggle console timestamps
C-a b    send break (magic sysrq)
C-a c    switch between console and monitor
C-a C-a  sends C-a [00:00:33.833] login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
<!DOCTYPE login:    # Ctrl+A C 切换到 qemu-monitor 模式
[00:00:37.237] (qemu) [00:00:37.237] (qemu)   # Ctrl+A C 切换为命令行模式
[00:01:13.592] login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
<!DOCTYPE login:

(3)-daemonize 参数

在启动时让 qemu-kvm 作为守护进程在后台运行。如果没有该参数,默认 qemu-kvm 在启动客户机后就会占用标准输入输出,直到客户机退出。

2.7 其他参数

(1)-name 参数

-name 指定客户机名称可用于宿主机上唯一标识该客户机。

2.8 总结

总结实际场景中经常用到的一些关于 qeum-kvm 的命令组合:

(1)直接通过镜像文件启动客户机方式:

[root@192.168.118.14 ~]#qemu-img -name 'test' -smp 1 -m 512m /images/cirros-0.3.5-i386-disk.img [-daemonize | -nographic]
# -daemonize 守护进程方式启动
# -nographic 占用终端输出输入直接显示
二者选其一。

(2)创建镜像文件并通过 iso 安装 客户机操作系统:

关于 qemu-img 的使用查看:KVM 基础功能详解 倒数第二部分。

[root@192.168.118.14 ~]#qemu-kvm -name "centos7" -smp 2 -m 1024m -drive file=/images/centos_7.qcow2,if=virtio,cache=writeback -cdrom /usr/local/src/CentOS-7-x86_64-Minimal-1511.iso -daemonize
VNC server running on `::1:5900'

上面两种方式都没有应用网络方式,如果需要使用网络服务请参考:

[kvm] 四种简单网络模型

[ kvm ] 学习笔记 5:QEMU-KVM 命令详解的更多相关文章

  1. linux命令学习笔记-kill和killall命令详解

    *杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常都能达到目 ...

  2. IP地址和子网划分学习笔记之《IP地址详解》

    2018-05-03 18:47:37   在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. ...

  3. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  4. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  5. Shell学习(五)—— awk命令详解

    一.awk简介   awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...

  6. [ kvm ] 学习笔记 6:virsh 命令及功能详解

    1. 虚拟机管理操作 attach-device 从XML文件附加设备 attach-disk 附加磁盘设备 attach-interface 连接网络接口 autostart 自动启动一个域 blk ...

  7. [ kvm ] 学习笔记 4:KVM 高级功能详解

    1. 半虚拟化驱动 1.1 virtio 概述 KVM 是必须使用硬件虚拟化辅助技术(如 Intel VT-x .AMD-V)的 Hypervisor,在CPU 运行效率方面有硬件支持,其效率是比较高 ...

  8. [ kvm ] 学习笔记 3:KVM 基础功能详解

    1. 构建 KVM 环境 KVM 从诞生开始就需要硬件虚拟化的支持,KVM 必需的硬件虚拟化扩展分别是:Intel 的虚拟化技术(Intel VT)和 AMD 的 AMD-V 技术.首先处理器(CPU ...

  9. linux命令学习笔记(25):linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组. 最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loc ...

随机推荐

  1. 深入了解js函数

    <script> //深入了解函数1.函数参数:2.函数的返回值:3. 变量的作用域:4.自调用函数 //函数的定义 function test(){ console.log(" ...

  2. Codeforces Round #609 (Div. 2) 【A,B,C】

    题意:给一个n<=1e7,找两个合数a和b使得a-b的差为n. 构造a=3n,b=2n,必含有公因子n,只有当n是1的时候是特例. #include<bits/stdc++.h> u ...

  3. Webstorm 2019最新激活码

    Webstorm 2019激活码(有效期至2020年6月5日)   K6IXATEF43-eyJsaWNlbnNlSWQiOiJLNklYQVRFRjQzIiwibGljZW5zZWVOYW1lIjo ...

  4. SAM:后缀自动机

    好文转载 luoguP3804 代码: /* 定义.对给定字符串s的后缀自动机是一个最小化确定有限状态自动机,它能够接收字符串s的所有后缀. 对给定字符串s的后缀自动机是一个最小化确定有限状态自动机, ...

  5. 【dp】P1026 统计单词个数

    题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个).要求将此字母串分成kk份(1<k \le 401& ...

  6. 20、Task原理剖析与源码分析

    一.Task原理 1.图解 二.源码分析 1. ###org.apache.spark.executor/Executor.scala /** * 从TaskRunner开始,来看Task的运行的工作 ...

  7. LOJ6071. 「2017 山东一轮集训 Day5」字符串 [SAM]

    LOJ 思路 这种计数题显然是要先把每一个合法的串用唯一的方法表示出来.(我连这都没想到真是无可救药了) 如何唯一?容易想到把前缀尽可能多地在第一个串填掉,然后填第二个,第三个-- 如何做到这样?可以 ...

  8. 实体类(VO,DO,DTO,PO)的划分《转载---》

    转载自:https://blog.csdn.net/u010722643/article/details/61201899 经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实 ...

  9. 中山纪中集训Day2又是测试(划水)

    A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...

  10. vue中如何动态添加readonly属性

    动态绑定input的readonly属性 1 <inpu :readonly="status ? false : 'readonly'"> status 为 false ...