QEMU搭建X86_64 + Ubuntu虚拟系统环境

QEMU搭建X86_64 + Ubuntu虚拟系统环境
本文记录一下学习和使用QEMU虚拟工具的过程,初次尝试,如有错误请各位大佬帮忙指正。

提示:不推荐在低版本的Ubuntu中操作,QEMU需要很多依赖所用到的版本比较高,低版本ubuntu系统无法一键安装或者升级到对应的高版本的依赖,需要手动下载安装,期间可能会遇到各种问题,建议还是用20或以上的版本,避免很多麻烦。

当前环境:
Workstation 16 Pro、Ubuntu20.04

一、qemu介绍

QEMU 是一个通用的开源机器仿真器和虚拟化器。

当用作机器仿真器时,QEMU 可以在另一台机器(例如您自己的 PC)上运行为一台机器(例如 ARM 板)制作的操作系统和程序。通过使用动态平移,它实现了非常好的性能。

当用作虚拟器时,QEMU 通过直接在主机 CPU 上执行客户机代码来实现接近本机的性能。QEMU 在 Xen hypervisor 下执行或使用 Linux 中的 KVM 内核模块时支持虚拟化。使用 KVM 时,QEMU 可以虚拟化 x86、服务器和嵌入式 PowerPC、64 位 POWER、S390、32 位和 64 位 ARM 以及 MIPS 客户机。
QEMU是一个支持跨平台虚拟化的虚拟机,QEMU的优势是可以跨指令集,VMware和Virtualbox之类的工具通常只能在x86计算机上虚拟出一个x86计算机,而QEMU支持在x86上虚拟出一个ARM计算机

二、查看环境

1.编译工具

$ gcc -v    # gcc版本不低于7.40
$ dpkg -l | grep glib    # 查看glib

2.查看系统是否支持KVM

开启处理器中的虚拟化 Intel VT-x/EPT或AMD-V/RVI(V)选项,若使用主机,请在BIOS中设置;若使用虚拟机,可以在虚拟机软件中设置:
在这里插入图片描述
开启后可以通过命令检查是支持KVM

$ grep -E '(vmx|svm)' /proc/cpuinfo	# cpu虚拟化支持
$ lsmod|grep kvm   # 查看Linux内核是否已安装KVM内核模块

3.修复主机不支持KVM嵌套虚拟化

配置完重启虚拟机可能会遇到不支持嵌套虚拟化的提示如
在这里插入图片描述
可以参考这个教程:https://blog.csdn.net/Officialcareer/article/details/120800562
但是仍然无法解决我的这个错误。

虚拟机访问物理资源时一定是需要通过VMM去建立一个虚拟的Ring0权限的,二内核隔离开启后, 默认会启动hybrid-v, 这个东西和虚拟机是冲突的,所以我就想会不会时Windows升级的过程中默认开启了内核隔离功能,当我打开Windows安全中心>设备安全性>内核隔离,果然是打开的,然后我就关闭了内核隔离,重启了电脑:
在这里插入图片描述
成功进入虚拟机!

三、qemu安装

1.安装依赖

apt-get update
# 下载依赖项
apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
apt-get install libaio-dev libbluetooth-dev libbrlapi-dev libbz2-dev
apt-get install libnfs-dev libiscsi-dev
# 实际编译时还需要这个依赖
sudo apt-get install ninja-build

2.下载qemu源码

2.1 从git克隆 QEMU / QEMU · GitLab

git clone https://gitlab.com/qemu-project/qemu.git

git下载qemu成功后会产生一个cd进入到qemu目录下,ls查看所有文件如下,其中configure命令是之后要用到的
在这里插入图片描述

2.2 官网下载
qemu-5.1.0.tar.xz

# 解压Qemu源码
$ xz -d qemu-5.1.0.tar.xz
$ tar xvf qemu-5.1.0.tar

3.编译qemu

对编译不太熟悉的同学可以看看这篇文章

3.1 创建一个工作空间来编译:
以官网下载的源码为例

$ cd qemu-5.1.0
# Prepare a native debug build.
$ mkdir -p bin/debug/native
$ cd bin/debug/native
# Return to the QEMU root directory.
$ cd ../../..

3.2 编译解释
configure为shell脚本,用于生成Makefile,其使用方法可使用如下命令查看:

./configure --help

–enable-kvm:

编译KVM模块,是qemu可利用KVM来访问硬件提供的虚拟化服务

–enable-vnc:

启动VNC(远程控制工具软件)

拓展:VNC(https://blog.csdn.net/CH_sir/article/details/107784528)

–target-list:

目标机器的构架,默认是将所有架构都编译,为了更快完成编译,指定需要的架构即可。

在这里插入图片描述

3.3 开始编译
这里选择x86_64-softmmu

$ cd bin/debug/native
$ ../../../configure --enable-kvm --enable-debug --enable-vnc --target-list="x86_64-softmmu"
$ make -j8
$ make install

# 通过指令查看编译是否成功
$ qemu-system-x86_64 -M help

在这里插入图片描述

四、安装linux操作系统

4.1 无图形界面安装

(1).操作系统镜像下载

Ubuntu镜像下载地址
这里下载的版本是ubuntu-20.04.5-live-server-amd64.iso

(2).创建虚拟硬盘

利用qemu-img指令可以创建1个空的虚拟硬盘,便于后面安装的时候将系统安装到虚拟硬盘上
进入到工作空间/qemu/bin/debug/native目录下
使用以下命令创建虚拟硬盘

qemu-img create ubuntu-20.04.5-amd64.img 10G	

在当前目录下会生成ubuntu20.04.5-amd64.img这样一个文件

(3).虚拟机安装

将上面的镜像文件ubuntu-20.04.5-live-server-amd64.iso 放 在/qemu/bin/debug/native该目录下
在这里插入图片描述然后使用以下命令安装:

qemu-system-x86_64 -m 2048 -smp 2 --enable-kvm ubuntu-20.04.5-amd64.img -cdrom ubuntu-20.04.5-live-server-amd64.iso

-m 2048 —— 给客户机分配2G内存(也可以输入“2G”);
-smp 2 —— 指定客户机为对称多处理器结构并分配2个CPU;
–enable-kvm —— 允许kvm(速度快很多)
-cdrom * —— 分配客户机的光驱

ps:输入上述命令会直接进入安装界面,如果命令行卡在那里(没有报错),大概率是没有正常安装,检查命令中的参数是否正确,**(如无特殊需求,建议只用这几个基本参数就好)**然后重新执行安装命令。

正在安装的截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Ubuntu无图形界面安装步骤参考

(4).再次打开创建的虚拟机

启动虚拟机输入命令如下:(不再加载iso镜像)

qemu-system-x86_64 -m 2048 -smp 2 --enable-kvm ubuntu-20.10-desktop-amd64.img 

第一次用此命令开启虚拟机可能会有点慢,需要耐心等待

至此通过QEMU工具安装无界面Ubuntu x86_64虚拟系统完成!接下来尝试带图形UI的Ubuntu

4.2 制作一个有图形界面的虚拟系统

(1).操作系统镜像下载

下载Ubuntu桌面版ubuntu-20.04.4-desktop-amd64.iso

(2).创建虚拟硬盘

emu-img create -f qcow2 test-vm-2.qcow2 10G   

在这里插入图片描述

(3).安装ubuntu20.04图形界面的系统

qemu-system-x86_64 -m 2048 -smp 2 --enable-kvm test-vm-2.qcow2 -cdrom ubuntu-20.04.4-desktop-amd64.iso

在这里插入图片描述
在这里插入图片描述

(4).再次打开创建的虚拟机

重新启动有点慢,需要耐心等待

qemu-system-x86_64 -m 2048 -smp 2 --enable-kvm test-vm-2.qcow2

在这里插入图片描述
在这里插入图片描述

五、可能遇到的问题

1.编译qemu时提示缺少GCC-7.4
在这里插入图片描述

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-7 g++-7
gcc-7 --version

如果仍无法解决:
下载gcc-7.4的tar.gz安装包

apt-get remove gcc  # 删除原有的gcc
tar -zxvf gcc-7.4.0.tar.gz    # 解压tar.gz
cd gcc-7.4.0
# 创建一个build目录,在该目录下编译,避免污染源码。
mkdir build
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make
make install

gcc -v    # 查看gcc版本

参考文章

https://blog.csdn.net/Officialcareer/article/details/120800562
https://blog.csdn.net/M82_A1/article/details/98946271
https://www.cnblogs.com/bakari/p/7858029.html

猜你喜欢

转载自blog.csdn.net/m0_53195006/article/details/129883054