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