qemu 虚拟化

news2024/10/6 12:48:19

一、介绍QEMU

Qemu是种非常古老的虚拟化技术,用于虚拟化系统组件并在其上运行多种CPU架构的程序或操作系统。
借助KVM,Qemu可以通过使用基于硬件的虚拟化来获得超快的计算速度。QEMU充当硬件供应商,KVM是CPU。KVM驻留在Linux内核中,并且需要一些配置,在QEMU上进行了虚拟化配置。
QEMU是款开源的模拟器虚拟机监管器。QEMU主要提供两种功能给用户:
  1. 作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码;
  2. 作为虚拟机监管器,模拟全系统,利用其他VMM(Xen、KVM)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机

二、安装QEMU

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。
apt list --installed | grep qemu 或者 qemu-img -V   # 查看版本
可执行文件在/usr/bin/目录下
三种安装方法:
  • 直接通过apt-get安装:sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
  • apt-get install qemu
  • 编译安装
git clone git://git.qemu.org/qemu.git
cd qemu
git submodule init
git submodule update --recursive
apt install libglib2.0 libglib2.0-dev
apt install autoconf automake libtool
./configure
make
make install

三、qemu命令语法

可执行文件在/usr/bin/目录下
# 查看帮助 -h
root@node1:/usr/bin# qemu-system-x86_64 -h
   
Qemu语法与大多数Linux命令相同:
qemu-system-x86_64 OPTIONS IMAGE
  • OPTIONS:提供了VM选项,如RAM大小、功能、CPU、显卡等;
  • IMAGE:VM磁盘的文件名。
# 设置Qemu VMCPU和核心计数,-smp选项,该选项将启用具有core=2值的多个CPU内核,这将在给定VM中设置内核计数2
qemu-system-x86_64 -smp cores=2
# 使用-boot order=nc选项从网络引导启动
qemu-system-x86_64 -boot order=nc -drive file=FreeDOS.qcow2    # 需得配合-drive file参数,不然启动失败
# 设置Qemu VMRAM或内存大小, 默认情况下,为启动的VM设置128 MB RAM,使用-m选项显式设置RAM的大小
qemu-system-x86_64 -m 256
# 设置QemuVM名称,使用-name选项并提供VM名称。 VM名称将显示在QemuWindow标头中
qemu-system-x86_64 -name qemu_zq
# 使用-drive选项指定磁盘/映像文件,这使我们能够指定额外的驱动程序相关选项。file用于指定文件大小。 另外if用于提供磁盘的驱动程序或接口类型
qemu-system-x86_64 -drive file=FreeDOS.qcow2,if=virtio
qemu-system-x86_64 -smp cores=-m 256 -name qemu_zq -drive file=FreeDOS.qcow2,if=virtio
弹出框:
# 默认情况下,VM控制台将作为GUI窗口提供。 若要禁用控制台,仅向系统终端提供-nographic选项
$ qemu-system-x86_64 -nographic   # 不会出现弹出框
# virbr0一样连接到虚拟交换机 。默认启动的系统不连接网络,并且仅连接单个接口。
# 但我们可以添加网络接口,并将此接口连接到在主机操作系统中运行的桥接设备
# 下面示例将通过virtio类型的网络接口将客户机连接到名为virbr0的虚拟交换机/桥中
$ qemu-system-x86_64 -drive file=FreeDOS.qcow2,if=virtio -display none -net bridge,br=virbr0 -net nic,model=virtio
# qemu还通过与诸如SSH等不同协议的网络共享来支持远程磁盘映像。将通过以下disk.img在远程系统上使用名为disk.img的磁盘映像:通过使用file选项的SSh
$ qemu-system-x86_64 -drive file=ssh://[email protected]/disk.img

创建及使用虚拟机

4.1、使用qemu-img创建虚拟机镜像

虚拟机镜像用来模拟虚拟机的硬盘,在启动虚拟机之前需要创建镜像文件。
root@node3:/home# qemu-img create -f qcow2 fedora.img 5G
Formatting 'fedora.img', fmt=qcow2 size=1073741824 cluster_size=65536 lazy_refcounts=off refcount_bits=16
root@node3:/home# ll
-rw-r--r--   1 root       root         196624 Sep  2 09:04 fedora.img

-f:指定镜像的格式,qcow2格式是QEMU最常用的镜像格式,采用写时复用技术优化性能;
fedora.img:镜像文件的名字,5G是镜像的大小

镜像文件创建完成后,可用qemu-system-x86来启动x86结构的虚拟机:

root@node3:/home# qemu-system-x86_64 fedora.img
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.vmx [bit 5]
会弹出一个窗口作为虚拟机的显示器: 因为fedora.img中并未给虚拟机安装操作系统,所以会提示“No bootable device”,无可启动设备

4.2、准备操作系统镜像

从不同Linux发行版的官方网站上获取安装镜像,以fedora20为例:
$ wget https://archive.fedoraproject.org/pub/archive/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso

4.3、检查KVM是否可用

QEMU使用KVM来提升虚拟机性能,如果不启用KVM会导致性能损失。要使用KVM,首先要检查硬件是否有虚拟化支持
$ grep -E 'vmx|svm' /proc/cpuinfo
如果有输出则表示硬件有虚拟化支持。其次要检查kvm模块是否已经加载
$ lsmod | grep kvm
kvm_intel 142999 0
kvm 444314 1 kvm_intel  # 如果kvm_intel/kvm_amd、kvm模块被显示出来,则kvm模块已经加载。最后要确保qemu在编译的时候使能了KVM,即在执行configure脚本的时候加入了--enable-kvm选项。
     
若虚拟机的KVM不可用,可根据VMWare中虚拟机(CentOS)如何开启虚拟化功能_weixin_33691700的博客-CSDN博客开启虚拟化功能,需要重启机器:
 

4.4、启动虚拟机安装操作系统

执行下面的命令启动带有cdrom的虚拟机:
$ qemu-system-x86_64 -m 2048 -enable-kvm fedora.img -cdrom ./Fedora-Live-Desktop-x86_64-20-1.iso
  • -m:指定虚拟机内存大小,默认单位是MB
  • -enable_kvm:使用KVM进行加速
  • -cdrom:添加defora的安装镜像
    
可在弹出的窗口中操作虚拟机,安装操作系统,安装完成后重起虚拟机便会从硬盘(fedora.img)启动。之后再启动虚拟机只需要执行:
$ qemu-system-x86_64 -m 2048 -enable-kvm fedora.img

五、参考

VMWare中虚拟机(CentOS)如何开启虚拟化功能_weixin_33691700的博客-CSDN博客
Index of /~aurel32/qemu    镜像下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/848757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix介绍及部署

目录 一、zabbix的基本概述 二、zabbix的构成 三、zabbix的监控对象 四、zabbix 监控原理 zabbix 监控部署的常见5个程序 五、zabbix的监控框架 六、安装zabbix 5.0 服务端 6.1 zabbix服务端部署软件 6.2 关闭防火墙,修改主机名 6.3 获取zabbix 的下载…

Telink泰凌微TLSR8258蓝牙开发笔记(一)

一、开发环境搭建 1.1、软件开发环境: 1.1.1、开发的IDE: IDE下载链接 1.1.2、烧录工具 DBT下载地址 1.1.3、蓝牙SDK 蓝牙SDK下载地址 1.2、硬件开发环境 8258开发板烧录工具一套 二、运行例程,并使能打印调试信息功能 File-->Impo…

【MongoDB】数据库、集合、文档常用CRUD命令

目录 一、数据库操作 1、创建数据库操作 2、查看当前有哪些数据库 3、查看当前在使用哪个数据库 4、删除数据库 二、集合操作 1、查看有哪些集合 2、删除集合 3、创建集合 三、文档基本操作 1、插入数据 2、查询数据 3、删除数据 4、修改数据 四、文档分页查询 …

Java课题笔记~ Spring 的事务管理

一、Spring 的事务管理 事务原本是数据库中的概念,在 Dao 层。但一般情况下,需要将事务提升到业务层,即 Service 层。这样做是为了能够使用事务的特性来管理具体的业务。 在 Spring 中通常可以通过以下两种方式来实现对事务的管理&#xff…

Java基础(七)排序算法

排序 1. 冒泡排序 >> 冒泡排序的思想 冒泡排序是一种简单的排序算法,其基本思想是通过多次遍历待排序序列,依次比较相邻的元素并交换位置,使得每次遍历后最大(或最小)的元素冒泡到序列的末尾。具体步骤如下&a…

一、 Mysql索引

一、 Mysql索引 001 Mysql如何实现的索引机制? MySQL中索引分三类:B树索引、Hash索引、全文索引 002 InnoDB索引与MyISAM索引实现的区别是什么? MyISAM的索引方式都是非聚簇的,与InnoDB包含1个聚簇索引是不同的。 在InnoDB存储引…

C++派生类的构造函数

1.构造函数 定义了派生类之后,要使用派生类就需要声明该类的对象。对象在使用之前必须初始化。 派生类的成员对象是由所有基类的成员对象共同组成的。因此构造派生类函数的对象时,就要对基类的成员对象和新增的成员对象进行初始化。 基类的构造函数并…

负载均衡–HAProxy安装及搭建tidb数据库负载服务

作为一名开发人员,随着经验的增加和技术的沉淀,需要提高自己架构方面的知识,同时对于一个企业来说,搭建一套高可用、高性能的技术架构,对于公司的业务开展和提高服务的性能也是大有裨益的。本文重点从软件安装和搭建ti…

数字体验监控 (DEM)解决方案

数字体验监控 (DEM) 是监控 Web 应用程序的前端和后端以确保无缝交付和最佳性能的过程,DEM 提供对业务应用程序可用性的洞察,可以对其进行分析以改善用户体验。 为什么数字体验监控很重要 在未确保最佳性能和适当行为的情况下向…

python实现对图油画、卡通、梦幻、草图、水彩效果

本篇博客将介绍如何使用wxPython模块和OpenCV库来实现对图像进行灰度化、二值化、伽马校正、色彩空间转换和图像反转这5种效果的合并程序。程序可以通过wxPython提供的GUI界面来选择图片路径和效果类型,程序会将处理后的图像保存到指定路径并打开。 步骤一&#xf…

W5500-EVB-PICO作为TCP Client 进行数据回环测试(五)

前言 上一章我们用W5500-EVB-PICO开发板通过DNS解析www.baidu.com(百度域名)成功得到其IP地址,那么本章我们将用我们的开发板作为客户端去连接服务器,并做数据回环测试:收到服务器发送的数据,并回传给服务器…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法你有多牛逼-下

1.简介 Fiddler是一款强大的HTTP抓包工具,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大的帮助。Fiddler提供的功能基本上能…

在线高精地图生成算法调研

1.HDMapNet 整体的网络架构如图所示,最终的Decoder输出三个分支,一个语义分割,一个embedding嵌入分支,一个方向预测。然后通过后处理将这些信息处理成向量化的道路表示。 img2bev的方式之前有IPM,通过假设地面的高度都…

模仿火星科技 基于cesium+水平面积测量+可编辑

​ 当您进入Cesium的编辑水平积测量世界,下面是一个详细的操作过程,帮助您顺利使用这些功能: 1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。 在屏幕的一角,一个友好的提…

Linux6.34 Kubernetes yaml文件详解

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes yaml文件详解一、yaml文件概述1.查看 api 资源版本标签2.写一个yaml文件demo 计算机系统 5G云计算 第三章 LINUX Kubernetes yaml文件详解 一、yaml文件概述 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式…

ArcGIS Pro基础:【划分】工具实现等比例、等面积、等宽度划分图形操作

本次介绍【划分】工具的使用,如下所示,为该工具所处位置。使用该工具可以实现对某个图斑的等比例面积划分、相等面积划分和相等宽度划分。 【等比例面积】:其操作如下所示,其中: 1表示先选中待处理的图斑,2…

利用GPT打造你的博客|论文的专属讲解员→强制让GPT学习你的知识?(不需要魔法)

文章目录 1 前言2 搭建我的博客问答系统2.1 平台介绍(不需要魔法即可访问)2.2 前期准备2.3 上传博客作为数据集至Dify2.4 搭建你的博客回答专员 3 利用有针对性的GPT帮助我们阅读前沿论文4 结语 个人博客专属问答员:demo 1 前言 GPT是生成式…

React入门学习笔记3

事件处理 通过onXxx属性指定事件处理函数(注意大小写) React使用的是自定义(合成)事件, 而不是使用的原生DOM事件——为了更好的兼容性 eg:οnclick》onClickReact中的事件是通过事件委托方式处理的(委托给组件最外层的元素)——为了更高效通过event.target得到发生…

Go context.WithCancel()的使用

WithCancel可以将一个Context包装为cancelCtx,并提供一个取消函数,调用这个取消函数,可以Cancel对应的Context Go语言context包-cancelCtx 疑问 context.WithCancel()取消机制的理解 父母5s钟后出门,倒计时,父母在时要学习,父母一走就可以玩 …

视频怎么改成gif格式?简单几步就可以轻松视频转gif

平时我们使用的许多gif图片,其实都是视频片段,那么是怎么把视频转gif格式的呢?可以使用视频转gif工具来完成gif制作,下面就给大家分享一个简单的视频转gif在线制作(https://www.gif.cn)的方法,一…