qemu参数解析07
- 格式:doc
- 大小:153.00 KB
- 文档页数:1
详解虚拟化技术QEMU-KVM⼊门⼀.QEMU、KVM、QEMU-KVMQEMU提供⼀系列的硬件模拟设备(CPU,⽹卡,磁盘等),客户机指令都需要QEMU翻译,因⽽性能较差。
KVM是linux内核提供的虚拟化,可以⽤来进⾏vCPU的创建与运⾏,虚拟内存的地址空间分配,指令执⾏效率较⾼,但缺少IO设备的虚拟化。
QEMU-KVM就是KVM与QEMU的结合,KVM负责CPU虚拟化+内存虚拟化,QEMU模拟其它IO设备。
⼆.安装并创建虚拟机安装qemu-kvm软件faramita2016@linux-l9e6:~> zypper install qemu-kvm // Ubuntu系统使⽤apt-get install qemu-kvm创建qcow2格式虚拟机磁盘⽂件faramita2016@linux-l9e6:~> qemu-img create -f qcow2 vdisk.img 5G // 磁盘⼤⼩5G使⽤debian镜像安装虚拟机,order=dc优先使⽤CD-ROW(d),后使⽤硬盘(c),内存默认128m,使⽤-m 512指定faramita2016@linux-l9e6:~> qemu-kvm -cpu host -cdrom debian-9.4.0.iso -hda vdisk.img -boot order=dc三.设置虚拟机使⽤⽹桥bridge模式宿主机中执⾏,qemu-bridge-helper增加当前⽤户可执⾏权限,⽤来⾃动添加⽹络后端tap设备faramita2016@linux-l9e6:~> sudo chmod o+x /usr/lib/qemu-bridge-helper宿主机中执⾏,-net nic为虚拟机创建nic⽹卡(⽹络前端),-net bridge指定宿主机中使⽤⽹桥(⽹络后端)faramita2016@linux-l9e6:~> qemu-kvm -cpu host -hda vdisk.img -net nic -net bridge,br=br0 // 指定⽹桥br0虚拟机中执⾏,编辑/etc/network/interfaces,设置静态IProot@debian:~# vi /etc/network/interfaces# The primary network interfaceallow-hotplug ens3#iface ens3 inet dhcpiface ens3 inet staticaddress 10.0.0.8netmask 255.0.0.0gateway 10.0.0.1hwaddress ether 52:54:00:12:34:56 // 设置mac地址,前3组不变root@debian:~# ifup ens3 // 打开ens3⽹络接⼝,ifdown关闭⽹络接⼝root@debian:~# /etc/init.d/networking restart // 重启⽹络服务虚拟机中执⾏,编辑/etc/resolv.conf,设置DNSroot@debian:~# vi /etc/resolv.confnameserver 8.8.8.8 // Google DNS四.设置虚拟机为⾮图形模式虚拟机中执⾏,编辑/etc/default/grub⽂件,添加console=ttyS0启动参数root@debian:~# vi /etc/default/grubGRUB_DEFAULT=0 // 默认启动项GRUB_TIMEOUT=0 // 默认菜单项停留时间GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`GRUB_CMDLINE_LINUX_DEFAULT="quiet" // 默认内核启动参数GRUB_CMDLINE_LINUX="console=ttyS0" // ⼿动添加内核启动参数,添加console=ttyS0虚拟机中执⾏,更新grub配置,并重启root@debian:~# update-grubroot@debian:~# shutdown -h nowa.宿主机中执⾏,添加-nographic参数创建虚拟机,当前shell前台创建虚拟机faramita2016@linux-l9e6:~> qemu-kvm -cpu host -hda vdisk.img -net nic -net bridge,br=br0 -nographicb.宿主机中执⾏,添加-display none -daemonize参数创建虚拟机,当前shell后台创建虚拟机faramita2016@linux-l9e6:~> qemu-kvm -cpu host -hda vdisk.img -net nic -net bridge,br=br0 -display none -daemonize五.以只读⽅式启动虚拟机a.创建⼀个快照⽤qemu-img命令创建⼀个原始镜像的快照faramita2016@linux-l9e6:~> qemu-img create -f qcow2 -b vdisk.img snapshot.img使⽤快照⽂件启动虚拟机faramita2016@linux-l9e6:~> qemu-kvm -cpu host -hda snapshot.img -net nic -net bridge,br=br0 -nographicb.使⽤临时快照原理:创建⼀个临时快照,虚拟机启动之后,⾃动删除快照⽂件faramita2016@linux-l9e6:~> qemu-kvm -cpu host -hda vdisk.img -net nic -net bridge,br=br0 -snapshot -nographic以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
qemu参数QEMU是一款全系统模拟器、虚拟机监管工具,可以在各种平台上运行不同架构的操作系统。
在使用QEMU时,根据需求设置相应的参数可以实现不同的功能。
本文将围绕“QEMU参数”展开,分步骤介绍QEMU的参数及其作用。
1. 基本参数QEMU的基本参数可以用来指定模拟环境和虚拟机的配置。
基本参数的格式如下:`qemu-system-ARCH [options] [disk_image]`其中,ARCH代表模拟的CPU架构,options为QEMU的其它参数,disk_image为虚拟机的磁盘映像文件。
常见的基本参数包括:-A:指定CPU架构(例如,x86、ARM、MIPS等)。
-m:设置虚拟机的内存大小。
-net:启用虚拟机的网络功能。
-hda /dev/hda:设置虚拟机的第一块硬盘。
2. 设备参数QEMU的设备参数用于指定虚拟机所需的硬件设备。
设备参数的格式如下:`qemu-system-ARCH [options] [-deviceDEVICE[,OPTION=value][,OPTION=value]...] [...]`其中,设备参数可以通过多个“-device”参数进行指定,可以通过逗号后面的选项来指定设备的具体配置。
常见的设备参数包括:-device ich9-usb-ehci1:虚拟机使用的USB控制器。
-device virtio-blk-pci:使用virtio形式的磁盘控制器。
-device virtio-net-pci:使用virtio形式的网络控制器。
3. 挂载参数QEMU的挂载参数用于挂载虚拟机中的磁盘镜像文件。
挂载参数的格式如下:`qemu-system-ARCH [options] -drive if=drv[,options] [...]`其中,if参数用于指定虚拟机中设备的驱动类型,options用于指定具体的设备配置。
常见的挂载参数包括:-drive file=disk_image,if=ide:指定IDE接口的磁盘镜像。
Qemu分析报告1 Qemu简介一个由Fabrice Bellard开发的普通的开源计算机仿真器和虚拟化软件,他是一个简洁版C编译器的作者。
QEMU上可以运行操作系统,并可以在不同的机器上为另一台机器运行程序。
当作为一个虚拟化软件使用的时候,主机和客户机必须使用与X86架构兼容的处理器。
在仿真模式下,它支持X86 PFC、MIPS R4000、Sun SPARC和PowerPC处理器。
QEMU支持2个操作模式. 一个是全系统模拟模式. 该模式类似Bochs模拟整个计算机系统(包括处理器和外设). 而且能在合理的速度下使用动态翻译模拟一些处理器架构如X86, X86_64, ARM, SPARC, PowerPC和MIPS. 你还可以在Linux, Solaris和FreeBSD系统上模拟Windows系统(包括XP)和Linux系统. QEMU支持其它的操作系统组合(更多信息见参考资料栏目).QEMU的第二个模式: 用户模式模拟. 该模式能寄存在Linux上, 不同平台的二进制程序也能运行. 比如, 一个MIPS平台上的二进制程序能够运行在x86平台上的Linux系统. 其它支持的平台包括ARM, SPARC和PowerPC, 而且还有更多正在开发的平台.如果作为mips操作系统开发的虚拟机,那么就需要工作在全系统模拟模式。
2 Qemu可行性分析Qemu的mips目标下的全系统模式没有x86下的方便使用,不能直接使用iso光盘镜像进行发行版的操作系统的安装。
主要是因为没有mips的bios,不过从/wiki/Qemu中得知已有几个firmware可以在Qemu上使用,其中一种叫做mmon。
2.1 kernel运行方式Qemu的使用方式一种是如下的命令:#Qemu-system-mips.exe -L . -m 64 -kernel vmlinux-r1 -initrd initrd -append "root=/dev/ram console = tty0 console=ttyS0 init=/bin/sh"主要参数:-kernel vmlinux-r1 使用vmlinux-r1这个bzImage文件作为kernel镜像//目前我也不是很清楚加载到到哪了-initrd initrd 使用'file'作为初始化内存盘…附录中有其他参数介绍。
QEMUQEMU 1: 使用QEMU创建虚拟机一、QEMU简介QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。
QEMU主要提供两种功能给用户使用。
一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。
二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
用户可以通过不同Linux发行版所带有的软件包管理器来安装QEMU。
如在Debian系列的发行版上可以使用下面的命令来安装:sudo apt-get install qemu或者在红帽系列的发行版上使用如下命令安装:sudo yum install qemu -y除此之外,也可以选择从源码安装。
获取QEMU源码可以从QEMU官网上下载QEMU源码的tar包,以命令行下载2.0版本的QEMU为例:$wget /download/qemu-2.0.0.tar.bz2$tar xjvf qemu-2.0.0.tar.bz2如果需要参与到QEMU的开发中,最好使用Git获取源码:$git clone git:///qemu.git编译及安装获取源码后,可以根据需求来配置和编译QEMU。
$cd qemu-2.0.0 //如果使用的是git下载的源码,执行cd qemu$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror --target-list="x86_64 -softmmu"$make -j8$sudo make installconfigure脚本用于生成Makefile,其选项可以用./configure --help查看。
这里使用到的选项含义如下:--enable-kvm:编译KVM模块,使QEMU可以利用KVM来访问硬件提供的虚拟化服务。
一,什么是KVMKVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器到一种新的用户(guset)模式。
用户模式有自己的ring状态集合,但是特权ring0的指令会陷入到管理器(hypervisor)的代码。
由于这是一个新的处理器执行模型,代码不需要任何的改动。
除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用于管理VM)和一部分PCI模拟的硬件。
在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专注于内核模块(如果某些部分确实有性能提升的话,KVM会将一小部分模拟代码移进来)和与剩下的用户空间代码的交互。
kvm-qemu可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用calling KQemu,它创建了一个线程(这个很重要);这个线程调用KVM 内核模块去切换到用户模式,并且去执行VM代码。
当遇到一个特权指令,它从新切换会KVM内核模块,该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。
这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。
如果你需要一个有2或者4核的虚拟机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。
并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的Linux调度器,这个使得KVM代码量十分的小当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。
二,安装配置KVM查看复制打印?1.# yum -y install kvm python-virtinst libvirt bridge-utils \2.virt-manager qemu-kvm-tools virt-viewer virt-v2v qemu-kvm tunctl3.4.[root@localhost ~]#vim /etc/sysconfig/selinux //关闭selinux5.6.SELINUX=disabled7.8.[root@localhost ~]#reboot9.10.[root@localhost ~]# cat /etc/redhat-release11.CentOS release 6.5 (Final) //centos 6.5三,启动libvirtd查看复制打印?1.[root@localhost ~]# /etc/init.d/libvirtd start //启动2.3.[root@localhost ~]# ps -e|grep libvirtd //查看是否启动4.19458 ? 00:00:01 libvirtd四,查看kvm模块是否正确加载1.[root@localhost ~]# lsmod |grep kvm2.kvm_intel 54285 03.kvm 333172 1 kvm_intel五,配置网络桥接查看复制打印?1.[root@localhost network-scripts]# cat ifcfg-eth0 |awk '{if($0 !~ /^$/ && $0 !~/^#/) {print $0}}'2.DEVICE=eth03.TYPE=Ethernet4.ONBOOT=yes5.BOOTPROTO=none6.BRIDGE=br07.IPV6INIT=no8.HWADDR=F8:BC:12:60:99:869.10.[root@localhost network-scripts]# cat ifcfg-br0 |awk '{if($0 !~ /^$/ && $0 !~ /^#/){print $0}}'11.DEVICE=br012.TYPE=Bridge13.ONBOOT=yes14.BOOTPROTO=static15.IPADDR=192.168.10.10316.GATEWAY=192.168.10.1MASK=255.255.255.018.DNS1=192.168.10.119.IPV6INIT=no20.DELAY=0重启网络,发现报以下错误:查看复制打印?1.[root@localhost network-scripts]# /etc/init.d/network start2.弹出环回接口: [确定]3.弹出界面 eth0:错误:激活连接失败:Master connection not found or invalid4.[失败]5.弹出界面 br0:错误:激活连接失败:Failed to determine connection's virtual interfacename6.[失败]7.RTNETLINK answers: File exists8.RTNETLINK answers: File exists9.RTNETLINK answers: File exists解决办法:查看复制打印?1.[root@localhost rules.d]# service NetworkManager stop //这个关闭掉就行2.停止 NetworkManager 守护进程: [确定]3.4.[root@localhost rules.d]# service network restart5.正在关闭接口 br0: [确定]6.正在关闭接口 eth0: [确定]7.关闭环回接口: [确定]8.弹出环回接口: [确定]9.弹出界面 eth0: [确定]10.弹出界面 br0: Determining if ip address 192.168.10.103 is already in use for devicebr0...11.[确定]如果以下内容就说明配置成功了:查看复制打印?1.[root@localhost network-scripts]# ifconfig2.br0 Link encap:Ethernet HWaddr F8:BC:12:60:99:86 //有这个就OK3.inet addr:192.168.10.103 Bcast:192.168.10.255 Mask:255.255.255.04.inet6 addr: fe80::fabc:12ff:fe60:9986/64 Scope:Link5.UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:16.RX packets:36416 errors:0 dropped:0 overruns:0 frame:07.TX packets:28648 errors:0 dropped:0 overruns:0 carrier:08.collisions:0 txqueuelen:09.RX bytes:13151508 (12.5 MiB) TX bytes:5962449 (5.6 MiB)10.11.eth0 Link encap:Ethernet HWaddr F8:BC:12:60:99:8612.inet6 addr: fe80::fabc:12ff:fe60:9986/64 Scope:Link13.UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:114.RX packets:1360857 errors:0 dropped:0 overruns:0 frame:015.TX packets:902173 errors:0 dropped:0 overruns:0 carrier:016.collisions:0 txqueuelen:100017.RX bytes:1913592871 (1.7 GiB) TX bytes:72387220 (69.0 MiB)18.19.lo Link encap:Local Loopback20.inet addr:127.0.0.1 Mask:255.0.0.021.inet6 addr: ::1/128 Scope:Host22.UP LOOPBACK RUNNING MTU:16436 Metric:123.RX packets:176842 errors:0 dropped:0 overruns:0 frame:024.TX packets:176842 errors:0 dropped:0 overruns:0 carrier:025.collisions:0 txqueuelen:026.RX bytes:880282316 (839.5 MiB) TX bytes:880282316 (839.5 MiB)27.28.virbr0 Link encap:Ethernet HWaddr 52:54:00:1A:B6:F129.inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.030.UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:131.RX packets:0 errors:0 dropped:0 overruns:0 frame:032.TX packets:37 errors:0 dropped:0 overruns:0 carrier:033.collisions:0 txqueuelen:034.RX bytes:0 (0.0 b) TX bytes:4651 (4.5 KiB)35.36.[root@localhost network-scripts]# brctl show37.bridge name bridge id STP enabled interfaces38.br0 8000.f8bc12609986 no eth0 //有这个就OK39.virbr0 8000.5254001ab6f1 yes virbr0-nic六,用virt-install生成.img文件1.# virt-install --name=ubuntu1 \2.--ram 1024 --vcpus=1 \3.--disk path=/root/ubuntu1.img,size=10 \4.--accelerate --cdrom /root/ubuntu-14.04-desktop-amd64.iso \5.--graphics vnc,port=5920 --network bridge=br0如果报以下错误:1.could not open disk image : Permission denied解决方法:查看复制打印?1.[root@localhost ~]# cat /etc/libvirt/qemu.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/){print $0}}'2.vnc_listen = "0.0.0.0"er = "root"//去掉注释4.group = "root"//去掉注释5.dynamic_ownership = 0 //去掉注释,把1改为0这一步做完,系统文件就好了。
qemu -kernel参数摘要:1.QEMU 与KVM 的关系2.QEMU 的作用3.qemu-kernel 参数的含义4.常用的qemu-kernel 参数5.qemu-kernel 参数的使用方法正文:QEMU 是一个开源的虚拟机模拟器,其可以在不同的硬件架构上模拟不同的硬件,并将KVM 虚拟机映射到物理机上。
KVM 是Linux 内核中的一个功能模块,它使Linux 系统具有虚拟化功能。
QEMU 与KVM 的关系非常紧密,QEMU 作为虚拟机的管理工具,负责虚拟机的创建、启动、停止等操作,而KVM 则负责虚拟机的运行。
QEMU 在虚拟机管理过程中,主要起到以下几个作用:1.虚拟机启动:QEMU 可以启动一个新的虚拟机,并在虚拟机启动时,将KVM 虚拟机的内核传递给虚拟机。
2.虚拟机管理:QEMU 可以对已经启动的虚拟机进行管理,包括停止、重启、挂起等操作。
3.虚拟机监控:QEMU 可以监控虚拟机的性能,包括CPU 利用率、内存使用情况等。
4.虚拟机网络配置:QEMU 可以配置虚拟机的网络接口,使虚拟机可以访问外部网络。
在QEMU 的参数中,有一个非常重要的参数,就是qemu-kernel 参数。
qemu-kernel 参数用于指定要加载的KVM 内核模块。
在使用qemu-kernel 参数时,需要注意以下几点:1.qemu-kernel 参数的格式为“-kernel <内核模块路径>”,例如“-kernel /usr/lib/modules/<内核版本>/build/<架构>/modules/内核模块名称”。
2.如果内核模块的路径中包含空格,需要将路径用引号括起来。
3.如果内核模块的路径不在默认的/lib/modules目录下,需要指定内核模块的完整路径。
在实际使用中,常用的qemu-kernel 参数有以下几种:1.-kernel:用于指定要加载的KVM 内核模块。
qemu源码分析参考:1. qemu与Bochs的区别:1. BochsBochs和qemu都是以软件仿真为主的虚拟软件,⼆者的区别何在?Bochs完全是以软件的⽅式对⽬标程序(OS以及运⾏在其上的应⽤程序)进⾏仿真。
Bochs在⾃⼰的内部维护着CPU、内存、IO设备的数据结构,每当Bochs仿真⼀条指令,就会按照这条指令在真实硬件上运⾏时应当产⽣的效果,对这些软件维护硬件数据结构产⽣相应的影响。
这种逐条处理的⽅式,可以保持与真实运⾏时完全相同的粒度,便于学习和调试。
但是由于这是⼀种⼀对多的映射⽅式,即⼀条机制指令,会被解释成N条指令执⾏,因此效率的下降是在所难免。
2. qemuqemu采取的是另外⼀种粒度的仿真。
qemu会从⽬标程序中,截取当前需要运⾏的⼀段代码(被称作Translation Block),将这段代码先翻译成中间语⾔(Intermediate Code),再将中间语⾔翻译成主机体系相关的⼆进制代码。
由于Translation Block的粒度⼤于单条机制指令的粒度,qemu相当于是batch处理指令的仿真操作的,因此会⽐逐条处理的Bochs性能上快⼀些。
除此之外,qemu还会优化对于Translation Block的缓存,以及将多个连接执⾏的Translation Block链接起来在同⼀批次进⾏处理;这两种⽅式对于反复执⾏的代码段的仿真性能有很⼤的提升。
3. 总结简⽽⾔之,Bochs适合⽤于学习,以及⽐较简单的任务处理,Bochs⾃带的调试器也很给⼒,⽤Bochs调试Linux内核是不错的选择(可以参考:等等),但是Bochs不适合⽤于真实地仿真⼤型的操作系统,⽐如Windows,基本上⽆法做到。
qemu由于处理⽅式上有优化,不像Bochs那样可以“原汁原味”地展现指令级别的执⾏过程,因此不太适合于学习;但是由于qemu性能上的提升,还可以配合内核虚拟化模块kvm,甚⾄xen,因此qemu可以像主流的虚拟桌⾯软件(VirtualBox, Vmware等等)⼀样流畅地运⾏多种操作系统。
QEMU热迁移功能旨在实现虚拟机的无缝迁移,使得虚拟机能够在不停机的情况下从一个物理主机迁移到另一个物理主机,为虚拟化技术的发展提供了重要的支持。
在实际应用中,了解QEMU热迁移功能的函数流程对于虚拟化技术的研究和应用具有重要的意义。
本文将详细介绍QEMU热迁移功能的函数流程,希望能够为读者深入理解该功能提供帮助。
1. 热迁移概述热迁移是指在虚拟机运行过程中将虚拟机迁移到另一个宿主机上,同时保持虚拟机运行的连续性和完整性,使得用户无需感知迁移的发生。
QEMU作为一款开源的虚拟机监控程序,提供了丰富的功能和强大的性能,其中热迁移功能就是其重要的特点之一。
2. 热迁移的实现原理热迁移功能的实现主要依赖于两个关键技术:内存迁移和CPU 状态迁移。
内存迁移包括虚拟机的内存页和设备给定的状态,而 CPU 状态迁移则包括虚拟 CPU 的状态和其运行上下文。
3. 热迁移的函数流程QEMU实现热迁移功能的函数流程主要分为以下几个步骤:3.1. 准备工作在进行热迁移前,首先要进行一系列的准备工作,包括创建迁移目标、准备迁移环境、开启迁移线程等。
在这个阶段,QEMU会对迁移目标进行初始化,并为之分配资源,以便后续的迁移操作。
3.2. 内存迁移内存迁移是热迁移功能的核心,它包括了虚拟机的内存页和设备的状态迁移。
在内存迁移阶段,QEMU会首先对虚拟机的内存进行迁移,将其复制到目标宿主机上,同时保证迁移过程中虚拟机的运行不受影响。
在内存迁移完成后,QEMU还会进行设备状态的迁移,将设备的状态信息同步到迁移目标上,以确保迁移后虚拟机的设备状态和原始状态一致。
3.3. CPU 状态迁移CPU 状态迁移是热迁移功能的另一个重要组成部分,它涉及到虚拟CPU 的状态和其运行上下文。
在 CPU 状态迁移阶段,QEMU会首先暂停虚拟 CPU 的运行,然后将其状态保存到迁移目标上,最后再在迁移目标上恢复虚拟 CPU 的运行。
这样一来,虚拟机的 CPU 状态就能够在迁移过程中得到保证,从而保证了虚拟机的连续性和完整性。