[ kvm ] 学习笔记 5:QEMU-KVM 命令详解
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 ] 学习笔记 5:QEMU-KVM 命令详解的更多相关文章
- linux命令学习笔记-kill和killall命令详解
*杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常都能达到目 ...
- IP地址和子网划分学习笔记之《IP地址详解》
2018-05-03 18:47:37 在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. ...
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Shell学习(五)—— awk命令详解
一.awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...
- [ kvm ] 学习笔记 6:virsh 命令及功能详解
1. 虚拟机管理操作 attach-device 从XML文件附加设备 attach-disk 附加磁盘设备 attach-interface 连接网络接口 autostart 自动启动一个域 blk ...
- [ kvm ] 学习笔记 4:KVM 高级功能详解
1. 半虚拟化驱动 1.1 virtio 概述 KVM 是必须使用硬件虚拟化辅助技术(如 Intel VT-x .AMD-V)的 Hypervisor,在CPU 运行效率方面有硬件支持,其效率是比较高 ...
- [ kvm ] 学习笔记 3:KVM 基础功能详解
1. 构建 KVM 环境 KVM 从诞生开始就需要硬件虚拟化的支持,KVM 必需的硬件虚拟化扩展分别是:Intel 的虚拟化技术(Intel VT)和 AMD 的 AMD-V 技术.首先处理器(CPU ...
- linux命令学习笔记(25):linux文件属性详解
Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组. 最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loc ...
随机推荐
- 深入了解js函数
<script> //深入了解函数1.函数参数:2.函数的返回值:3. 变量的作用域:4.自调用函数 //函数的定义 function test(){ console.log(" ...
- 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 ...
- Webstorm 2019最新激活码
Webstorm 2019激活码(有效期至2020年6月5日) K6IXATEF43-eyJsaWNlbnNlSWQiOiJLNklYQVRFRjQzIiwibGljZW5zZWVOYW1lIjo ...
- SAM:后缀自动机
好文转载 luoguP3804 代码: /* 定义.对给定字符串s的后缀自动机是一个最小化确定有限状态自动机,它能够接收字符串s的所有后缀. 对给定字符串s的后缀自动机是一个最小化确定有限状态自动机, ...
- 【dp】P1026 统计单词个数
题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个).要求将此字母串分成kk份(1<k \le 401& ...
- 20、Task原理剖析与源码分析
一.Task原理 1.图解 二.源码分析 1. ###org.apache.spark.executor/Executor.scala /** * 从TaskRunner开始,来看Task的运行的工作 ...
- LOJ6071. 「2017 山东一轮集训 Day5」字符串 [SAM]
LOJ 思路 这种计数题显然是要先把每一个合法的串用唯一的方法表示出来.(我连这都没想到真是无可救药了) 如何唯一?容易想到把前缀尽可能多地在第一个串填掉,然后填第二个,第三个-- 如何做到这样?可以 ...
- 实体类(VO,DO,DTO,PO)的划分《转载---》
转载自:https://blog.csdn.net/u010722643/article/details/61201899 经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实 ...
- 中山纪中集训Day2又是测试(划水)
A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...
- vue中如何动态添加readonly属性
动态绑定input的readonly属性 1 <inpu :readonly="status ? false : 'readonly'"> status 为 false ...