qemu-system-x86_64方式创建KVM虚拟机

2023-10-30

一、QEMU介绍

QEMU是一款高效而实用的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM),主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。

二、软件安装及系统命令安装

1、首先要确保IntelVT技术勾选(虚拟机中使用的话),然后查看cpu是否支持,有vmx输出即可;

grep vmx /proc/cpuinfo

2、安装相关的依赖包,将KVM软件安装完成;

yum install qemu-kvm libvirt-binvirtinst bridge-utils (virt-manager
kvm qemu virt-viewer)

必须安装组件是qemu-kvm libvirt-bin

virt-viewer是一个用于显示虚拟机的图形控制台的最小工具

virt-manager是一个虚拟机管理软件,含图形管理界面

三、qemu-system-x86创建安装虚拟机

qemu-system-x86和qemu-kvm区别:
在老版本中有单独的qemu-kvm模块存在,结合qemu一起做虚拟机工作。在后续新版本中,已经将qemu-kvm模块完全合并到qemu中去。因此当需要使用kvm特性时候,只需要qemu-system-x86_64 启动命令中增加参数 –enable-kvm参数使能即可

1、qemu-img命令创建虚拟机的磁盘镜像

[root@localhost ~]# qemu-img create -f qcow2 /root/kvm-test/CentOS-7.qcow2 10G
-f 指定格式 qcow2 kvm的虚拟磁盘格式
/root/kvm-test/CentOS-7.qcow2 /root/kvm-test目录及CentOS-7.qcow2文件名
10G 虚拟磁盘大小

即可成功创建了10G大小的qcow2格式的镜像,但是创建完成后实际的镜像在磁盘上占用大小并不是真实的10G大小,只有安装完虚拟机系统后才会占用真实大小;
命令qemu-img info source_images.img可以查看镜像的信息

2、qemu-system-x86_64创建并安装虚拟机系统

[root@localhost ~] qemu-system-x86_64 -name vfw -m 8192 -smp 2 -cpu host -hda /gao/kvm-fw.qcow2 -cdrom /gao/vfw3.iso -boot c -enable-kvm -netdev type=tap,ifname=fw-eth0,script=no,downscript=no,id=net0 -device e1000,netdev=net0,mac=52:54:63:02:02:01,bus=pci.0,addr=0x3 -netdev type=tap,ifname=fw-eth1,script=no,downscript=no,id=net1 -device virtio-net-pci,netdev=net1,mac=52:54:63:02:02:02,bus=pci.0,addr=0x4 -netdev type=tap,ifname=fw-eth2,script=no,downscript=no,id=net2 -device virtio-net-pci,netdev=net2,mac=52:54:63:02:02:03,bus=pci.0,addr=0x5 -daemonize -vnc :11

参数解释:

-name 设置虚拟机名称
-m 指定虚拟机内存大小
-smp 设置虚拟机CPU数
-cpu 选择CPU
-hda 选择使用*.qcow2 作为IDE硬盘镜像
-cdrom 选择使用*.iso作为cdrom安装镜像
-boot 选择启动类型: floppy (a), hard disk ©, CD-ROM (d), network (n)
-enable-kvm 使能KVM支持:enable KVM full virtualization support
-netdev 配置主机的虚拟网卡:configure a host TAP network backend with ID ‘str’
type 类型 ifname 名称 connected to a bridge (default=br0)
script:use network scripts ‘file’ (default=/etc/qemu-ifup)
-device 配置虚拟机的网卡类型
-vnc 配置VNC端口

启动后查看VNC端口:

[root@localhost ~]# netstat -natp | grep qemu
tcp 0 0 0.0.0.0:5910 0.0.0.0:* LISTEN 13190/qemu-system-x
tcp 0 0 0.0.0.0:5911 0.0.0.0:* LISTEN 14946/qemu-system-x

使用VNC连接虚拟机并安装指定的ISO镜像系统;

四、配置主机与虚拟机网络

1、配置主机网络

以上虚拟机创建完成后主机中会创建出fw-eth0虚拟网卡,虚拟机中会创建出驱动为e1000类型虚拟网卡net0作为管理口使用,virtio作为业务口使用,-netdev、-device可理解为是成对的一对口,连接主机与虚拟机通信,主机中将管理口和fw-eth0虚拟网卡同时加入桥br0下,配置IP、ROUTE、DNS;客户机管理口配置和桥相同网段的IP、ROUTE后重启网络即可访问外网;

1)手动配置主机网络:

brctl addbr br0 #创建桥
brctl stp br0 on #使能stp
ifconfig br0 up #使能桥up
ifconfig fw-eth0 up #使能虚拟网卡up
ifconfig enp8s0 up #使能管理口up
brctl addif br0 fw-eth0 #绑定虚拟机口到桥
brctl addif br0 enp8s0 #绑定管理网口到桥
ip add del 192.169.8.198/24 dev enp8s0
ip add add 192.169.8.198/24 dev br0 #配置IP ROUTE
ip route add 192.169.0.0/16 via 192.169.8.254

配置完成后查看桥口配置:

配置完成后 可以ip add 或 ifconfig查看配置是否生效,ip route 或者route -n查看路由信息,然后ping 网关、PC机、外网试试;如果不通可以修改/etc/resolv.conf文件试试;

[root@localhost ~]# cat /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8
search localdomain
[root@localhost ~]#

2)开机自动配置主机网络方法:

配置桥口文件:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge #配置桥类型
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.169.8.198
NETMASK=255.255.255.0
GATEWAY=192.169.8.254
DNS1=114.114.114.114
DNS2=8.8.8.8

配置桥绑定的管理口文件:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp8s0
TYPE=Ethernet #以太网类型
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp8s0
UUID=9dbab5a4-2552-4ceb-bc45-a302b88840f2 #不通可考虑去掉
DEVICE=enp8s0
ONBOOT=yes
BRIDGE=br0 #桥下绑定
DNS1=114.144.114.114
DNS2=8.8.8.8

配置完成后systemctl restart network重启网络,可以ip add 或 ifconfig查看配置是否生效,ip route 或者route -n查看路由信息,然后ping 网关、PC机、外网试试;如果网络配置不上或者不通可以如下操作:

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
systemctl restart network

如果还是配置不上网络,建议重启主机系统试试,我这出现了systemctl restart network重启网络后IP配置不上或者DNS配置不上的情况,重启后正常了;
在此要强调一点的是,直接修改/etc/resolv.conf这个文件是没用的,网络服务重启以后会根据/etc/sysconfig /network-scripts/ifcfg-eth0来重载配置,如果ifcfg-eth0没有配置DNS,那么resolv.conf会被冲掉,重新变成空值;配置成功后/etc/resolv.conf会自动加上相关的nameserver,不需要手动配置。

2、配置虚拟机网络:

insmod /firewall/e1000.ko
ifconfig eth0 up
ifconfig eth0 192.169.8.192
route add -net 192.169.0.0 netmask 255.255.0.0 gw 192.169.8.254

虚拟机管理口配置和主机桥口相同的网段、网关、路由即可。配置完成后重启网络,然后ping 网关、PC机、外网试试;

3、虚拟网卡类型

[shell /pkg]$lspci
00:00.0 Class 0600: 8086:1237
00:01.0 Class 0601: 8086:7000
00:01.1 Class 0101: 8086:7010
00:01.3 Class 0680: 8086:7113
00:02.0 Class 0300: 1234:1111
00:03.0 Class 0200: 8086:100e
00:04.0 Class 0200: 1af4:1000
00:05.0 Class 0200: 1af4:1000

记录一下: -device e1000创建的虚拟网卡厂商ID是8086, -device virtio-net-pci 不是8086;

五、虚拟机重启及重新配置

对于已经创建的虚拟机ps -ax | grep qemu查看对应的PID,然后kill -9 pid杀掉 或者killall -9 qemu后可以修改-m 6144值、-device e1000类型、addr=0x8总线值 、ifname=vfw1-eth1接口名、-vnc端口号等参数,重新启动后虚拟机会按照新的配置进行启动,启动后重新配置主机、虚拟机网络即可;比如:

[root@localhost ~] qemu-system-x86_64 -name vfw -m 4096-smp 2 -cpu host -hda /gao/kvm-fw.qcow2 -cdrom /gao/vfw3.iso -boot c -enable-kvm -netdev type=tap,ifname=fw-eth0,script=no,downscript=no,id=net0 -device e1000,netdev=net0,mac=52:54:63:02:02:01,bus=pci.0,addr=0x6 -netdev type=tap,ifname=fw-eth1,script=no,downscript=no,id=net1 -device e1000,netdev=net1,mac=52:54:63:02:02:02,bus=pci.0,addr=0x7 -netdev type=tap,ifname=fw-eth2,script=no,downscript=no,id=net2 -device e1000,netdev=net2,mac=52:54:63:02:02:03,bus=pci.0,addr=0x8 -daemonize -vnc :22

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qemu-system-x86_64方式创建KVM虚拟机 的相关文章

  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • numpy 未定义符号:PyFPE_jbuf

    我正在尝试使用一百万首歌曲数据集 为此我必须安装 python 表 numpy cython hdf5 numexpr 等 昨天我设法安装了我需要的所有内容 在使用 hdf5 遇到一些麻烦之后 我下载了预编译的二进制包并将它们保存在我的 b
  • gentoo crontab:为什么这个简单的 crontab 不起作用?

    我使用 GENTOO 发行版 crontab e 35 12 root php5 home www cron php 当我手动运行时 php5 php5 home www cron php 这有效 它向我发送了一封电子邮件 然后我检查日期
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • 在 LINUX 上使用 Python 连接到 OLAP 多维数据集

    我知道如何在 Windows 上使用 Python 连接到 MS OLAP 多维数据集 嗯 至少有一种方法 通常我使用 win32py 包并调用 COM 对象进行连接 import win32com client connection wi
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • win10计算器rsh_厉害了我的哥!win10计算器自带程序员模式太强大了!

    生活工作中常常会遇到用计算器的地方 比如算工资 算房贷啦 算卡路里等 一个有诸多功能的计算器能帮你省去大部分时间 你们知道吗 在windows计算器里 竟然还有程序员模式 可进行各种逻辑运算 快来和小编一起来看一下吧 相信大家Windows
  • C++几个关键字总结——const、static、extern、volatile

    1 const const 基本原理 被修饰的对象的值不可以被修改 const 推出的初始目的 正是为了取代预编译指令 消除它的缺点 同时继承它的优点 1 const修饰基本数据类型 表示常量 必须进行初始化 有以下两种初始化的方式 编译时
  • 数据分析中的mysql基础

    引言 之前的博客对mysql的一些入门知识进行了讲解 该博客将对sql的四个分类进行讲解 之前博客地址 https blog csdn net weixin 45696161 article details 106310108 sql的分类
  • python热度图改坐标_python matplotlib imshow热图坐标替换/映射实例

    今天遇到了这样一个问题 使用matplotlib绘制热图数组中横纵坐标自然是图片的像素排列顺序 但是这样带来的问题就是画出来的x y轴中坐标点的数据任然是x y在数组中的下标 实际中我们可能期望坐标点是其他的一个范围 如图 坐标点标出来的是
  • 笔记本关机后耗电严重问题怎么解决?一秒快速解决笔记本电脑关机掉电快的问题

    前言 或许许多使用笔记本的朋友都会遇到一个很头疼的问题 那就是笔记本关机放一段时间后 一周以内或者几个小时 电池电量消耗非常大 那么到底是什么原因导致笔记本关机后耗电快呢 如何解决耗电快的问题呢 下面详细讲述问题点及其解决方法 几个问题点
  • mysql数据库字符集_超详细的MySQL数据库字符集总结,值得收藏

    MySQL支持多种字符集 character set 提供用户存储数据 同时允许用不同排序规则 collation 做比较 下面基于MySQL5 7介绍一下字符集相关变量的使用 一 字符集 字符序的概念与联系 在数据的存储上 MySQL提供
  • c语言负数翻转问题

    1 在项目中 我们经常会用到变量 那么在变量的定义和传递过程中 经常会出现负数的翻转问题 int test funtion return 1 void poll fun unsigned int a while a gt 250 print
  • 你是一名努力工作的程序员,还是懒惰的程序员?

    当人们在进行一项体力工作时 你很容易评估他们工作的努力程度 你可以看到他们的身体动作 看他们流了多少汗水 也可以去看他们的工作成果 砖墙越砌越高 地上的洞越来越大 对努力工作的认可和奖励是人类一个非常基本的本能 这也是为什么我们对耐力运动如
  • 自已动手修改同花顺K线周期的快捷键

    同花顺的1分钟 5分钟 15分钟 30分钟 60分钟的K线周期快捷键为M1 M5 M15 M3 M6 不像大智慧为1 2 3 4 操作很是方便 让我们来把它给改一改 1 下载Restorator http www downxia com d
  • Java批量发带远程附件的邮件2--发送远程附件

    业务背景及需求 公司需要统一发送同类型的邮件给一批人时 比如发送员工个人薪资表分别至个人邮箱 此类邮件标题 内容 发送人等基本一致 且需要带附件 而其附件是收件人的隐私性个人信息 若通过上传文件保存到数据库里然后在发邮件的方式 浪费空间和时
  • WiFi以及天线测试项目详解

    1 相关术语 天线增益 天线增益就是某天线在最大辐射方向上的辐射能量跟点源天线 dBi 或偶极子天线 dBd 在同方向上的辐射能量的比值 天线规格书的几个参数 Gain dBi 在相同的输入功率下 天线在空间某点的辐射功率与理想无方向性点源
  • zabbix详解(十一)——zabbix监控MySQL性能实战

    今天继续给大家介绍Linux运维相关知识 本文主要内容是zabbix监控MySQL性能 一 实战目的 通过在zabbix客户端编写脚本 实现对MySQL数据库的性能进行信息进行提取 并配置成zabbix的监控项 以实现zabbix对MySQ
  • CSDN,这东西我得退了

    断更了那么久 得有个交代了 Albus Dumbledore好我是兄弟们 这一年里很高兴认识大家 CSDN这东西也让我接触到了很多有关技术和编程之类的东西 也收获了很多粉丝 但是 我因为学业及其他原因 这个网站我得先退了 账号我不会注销 说
  • [git]分支操作

    Checkout 相当于切换到该分支 但是因为不能直接操作远程分支 会在本地同步一个完全一样的分支 注意 切换分支前本地先进行提交 add commit 否则有可能代码会丢失 New Branch from Selected 创建一个新的分
  • 多态与多态对象模型

    这里简单介绍下什么是多态 多态的构成条件 多态原理以及多态的对象模型 在介绍多态之前 先简单的介绍下什么是虚函数 虚函数 类的成员函数前面加virtual关键字 则这个成员函数称为虚函数 注 1 除静态成员函数 2 内联函数不能定义为虚函数
  • NetworkManager is not running-liunx nmtui不可用

    NetworkManager 是CentOS 7 下的网络配置工具 如果遇到提示NetworkManager is not running那么需要安装一下 之前在CentOS 6下编辑网卡 直接使用setup工具就可以了 但在新版的Cent
  • error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

    学会C语言也挺长时间了 当时写的时候就记得经常出现这个错误 在网络上查找感觉原因也林林总总 有时候也挺头疼的 就想着在这里记录一下原因 从字面上看是语法上的错误 缺少一些必要的符号 2019 4 26 在文件中找了很久 没有找到语法错误 后
  • storm七之storm java示例

    通过前面6个章节 我们大致了解apache storm的核心细节了 现在我们开始写一些简单的代码 来感受下storm的魅力 场景 移动呼叫日志分析 移动电话呼叫号及其持续时间将作为Apache stormd的输入流 storm将根据拨号方和
  • ARM(IMX6U)裸机之I.MX6ULL硬件启动方式的选择

    参考 Linux之ARM IMX6U 裸机之I MX6ULL启动方式详解 作者 一只青木呀 发布时间 2020 08 09 16 32 07 网址 https blog csdn net weixin 45309916 article de
  • qemu-system-x86_64方式创建KVM虚拟机

    一 QEMU介绍 QEMU是一款高效而实用的模拟器及虚拟机监管器 Virtual Machine Monitor VMM 主要提供两种功能给用户使用 一是作为用户态模拟器 利用动态代码翻译机制来执行不同于主机架构的代码 二是作为虚拟机监管器