QEMU-KVM基本操作

2023-10-30

本文主要介绍KVM虚拟机的一些基本实践操作。对KVM虚拟机的管理操作主要是基于libvirt的命令行工具virsh进行的。

一、安装与启动

1. KVM模块检查

(1)查看当前Linux系统核心是否包含KVM模块(Linux内核2.6.20及以上版本包含KVM模块):

uname` `-r``#或``cat` `/proc/version``#或``dmesg | ``grep` `Linux

(2)检查当前Linux系统是否已加载KVM核心模块:

lsmod | ``grep` `kvm

2. 安装libvirt,qemu-kvm

yum ``install` `libvirt libvirt-devel qemu-kvm

3. 启动libvirtd

systemctl start libvirtd``systemctl ``enable` `libvirtd

二、连接配置

1. 本地控制配置

libvirt安装后默认配置就可以连接到本地libvirtd。

测试是否可用:

virsh list

不可用重启试试:

systemctl restart libvirtd

2. 远程控制配置

只需修改服务端配置项,客户端保持默认配置即可。

(1)修改服务端配置文件/etc/libvirt/libvirtd.conf

listen_tls = 0``listen_tcp = 1``tcp_port = ``"16509"``auth_tcp = ``"none"

(2)修改服务端/etc/sysconfig/libvirtd

LIBVIRTD_ARGS=``"--listen"

(3)重启服务端libvirtd服务

systemctl restart libvirtd

(4)客户端保持默认配置,连接服务端的libvirtd服务执行命令

示例:

virsh -c qemu+tcp:``//root``@192.168.2.102:16509``/system` `list --all

此命令连接到服务端192.168.2.102的libvirtd服务,执行命令 virsh list --all。

这里使用的是tcp连接,也可使用其它连接方式,如TLS、ssl等,但配置文件需要做相应修改。

三、日志配置

libvirtd的日志文件一般为:/var/log/libvirt/libvirtd.log

若没有这个文件,需要修改libvirtd服务的日志级别和日志文件配置,配置文件:/etc/libvirt/libvirtd.conf。

配置示例:

log_level = 1``log_outputs = ``"1:file:/var/log/libvirt/libvirtd.log"

然后重启libvirtd:

systemctl restart libvirtd

在日志文件 /var/log/libvirt/libvirtd.log 中可查看每次执行virsh命令输出的info、debug等信息。

另外,目录 /var/log/iibvirt/qemu/ 下保存了每个虚拟机具体的日志信息,log文件名称与虚拟机名称相关。

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

四、网络配置

1. 默认网络配置

查看libvirt的默认网络配置:

virsh net-list

默认网络配置文件为:/etc/libvirt/qemu/networks/default.xml,其内容示例如下:

其中配置项“bridge”、“mac”和“ip”分别定义了宿主机用于与虚拟机通信的网桥名称、mac地址和ip地址,libvirtd服务启动的时候会自动创建并启动该网桥,“dhcp”则配置了libvirt启动的虚拟机的ip地址范围。

“forward”配置的是网络模式,kvm虚拟机支持两种网络模式:

(1)NAT(网络地址转换):虚拟系统通过网络地址转换,将虚拟机地址映射到宿主机地址上,通过宿主机进行网络访问。这样虚拟机就可访问外网和局域网内的其他主机,但是局域网内的其他主机不能访问虚拟机,相当于单向访问。

(2)Bridge(桥接):双向访问。每个虚拟机都具有一个独立的局域网ip地址,虚拟机与局域网其他主机可相互访问。

2. 自定义网络配置

用户可参考libvirt的默认网络配置文件添加自定义网络配置。

(1)创建网络xml配置文件,然后创建新网络:

virsh net-define net-name.xml

此命令会将网络配置文件移至/etc/libvirt/qemu/networks/目录下。

查看/导出网络配置:

virsh net-dumpxml net-name

(2)启动网络:

virsh net-start net-name

(3)设置开机自启动:

virsh net-autostart net-name

此命令会在 /etc/libvirt/qemu/networks/autostart/ 目录下创建 /etc/libvirt/qemu/networks/ 目录下网络配置文件的软链接。

3. 删除网络

(1)关闭网络:

virsh net-destroy my-net

(2)删除网络:

virsh net-undefine my-net

此命令会将网络配置文件从/etc/libvirt/qemu/networks/目录下删除,若/etc/libvirt/qemu/networks/autostart/目录下存在对应软连接也一并删除。

4. 修改网络配置

修改libvirt网络配置有两种方式。

(1)virsh net-edit

修改网络配置文件:

virsh net-edit my-net

重启网络才能生效:

virsh net-destroy my-net``virsh net-start my-net

(2)virsh net-update

virsh net-update my-net add-last ip-dhcp-host ``"<host mac='' name='' ip='' />"` `--live --config --parent-index 0

virsh net-edit需要重启网络,对线上系统不友好,而virsh net-update可动态修改运行中的网络,不会影响线上系统,但有些修改无法使用virsh net-update进行。

五、KVM虚拟机管理操作

1. 创建虚拟机

(1)从xml配置文件创建虚拟机但是不启动

virsh define vm-name.xml

(2)从xml配置文件创建虚拟机并启动,但不会持久化,虚拟机关机后就消失了

virsh create vm-name.xml

创建虚拟机后,在 /etc/libvirt/qemu/ 路径下自动生成一份虚拟机的xml配置文件,该配置文件在virsh undefine删除虚拟机的时候会自动删除。

虚拟机的xml配置文件主要配置了虚拟机名称、内存大小、vcpu数量、镜像文件路径、网桥等信息。

查看/导出虚拟机xml文件:

virsh dumpxml vm-name

xml文件修改:

virsh edit vm-name

修改后重启虚拟机才能生效:

virsh reboot vm-name

登录虚拟机:

virsh console vm-name

创建示例:

  准备好虚拟机镜像文件,在虚拟机 xml 配置文件中配置好镜像文件的路径:

然后通过 virsh 命令创建虚拟机:

virsh define vm-name.xml

2. 启动虚拟机

(1)启动:

virsh start vm-name

(2)重启:

virsh reboot vm-name

3. 查看虚拟机列表

(1)运行状态的虚拟机列表

virsh list

(2)所有的虚拟机列表

virsh list --all

4. 关闭虚拟机

(1)正常关闭

virsh ``shutdown` `vm-name

(2)下电,强制立即关闭

virsh destroy vm-name

5. 删除虚拟机

virsh undefine vm-name

将非运行状态的虚拟机从virsh列表中删除,无法删除运行状态的虚拟机。

undefine命令会将虚拟机配置文件 /etc/libvirt/qemu/vm-name.xm 删除,但不会删除镜像文件。

6. 虚拟机挂起与恢复

(1)挂起

virsh suspend vm-name

只有运行状态(running)的虚拟机才能被挂起。

挂起状态的虚拟机无法被登录,也无法关闭。

(2)恢复

virsh resume vm-name

只有挂起状态(paused)的虚拟机才能被恢复。

7. 设置虚拟机在宿主机启动时自动启动

virsh autostart vm-name

8. 查看虚拟机

(1)查看虚拟机状态

virsh domstate vm-name

(2)查看虚拟机信息

virsh dominfo vm-name

9. 虚拟机磁盘管理操作

(1)查看磁盘列表

virsh domblklist vm-name

(2)查看磁盘信息

virsh domblkinfo vm-name block-name

(3)扩容磁盘

virsh blockresize --domain vm-name --path block-name --size 10G

(4)动态设置磁盘qos

virsh blkdeviotune vm-name block-name --``read``-bytes-sec 1024 --write-bytes-sec 1024 --``read``-iops-sec 1000 --write-iops-sec 1024 --live

(5)持久化挂载rbd

virsh attach-device vm-name rbd.xml --persistent

10. 内存、CPU管理操作

(1)动态设置CPU个数

virsh setvcpus vm-name --count 4 --config --live

(2)动态设置内存大小

virsh setmem vm-name --size 1024 --config --live

(3)设置最大内存大小

virsh setmaxmem vm-name --size 102400 --config

11. 网卡管理操作

(1)查看网卡列表

virsh domiflist vm-name

(2)添加持久化网卡

virsh attach-interface --domain vm-name --``type` `bridge --``source` `br111 --model virtio --mac ``'00.00.00.00.00.01'``- -live --config --persistent

(3)删除持久化网卡

virsh detach-interface --domain vm-name --``type` `bridge --mac ``'00.00.00.00.00.01'``- -live --config --persistent

参考:

KVM详解,学习kvm系列文章 - 腾讯云开发者社区-腾讯云

KVM 虚拟化技术 - 腾讯云开发者社区-腾讯云

linux如何载入kvm内核_linux 内核 kvm_linux无法载入新内核 - 腾讯云开发者社区 - 腾讯云

原文链接:https://www.cnblogs.com/wujuntian/p/16295818.html

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

QEMU-KVM基本操作 的相关文章

  • 请求的资源不支持 HTTP 方法“GET”

    我的路线配置正确 并且我的方法具有装饰标签 我仍然收到 请求的资源不支持 HTTP 方法 GET 消息 System Web Mvc AcceptVerbs GET POST System Web Mvc HttpGet public st
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • System.MissingMethodException:找不到方法?

    以前工作的 ASP NET WebForms 应用程序现在抛出此错误 System MissingMethodException 找不到方法 The DoThis方法位于同一个类上 它应该可以工作 我有一个这样的通用处理程序 public
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 将 Visual Studio 2012 C++ 单元测试项目链接到 exe 会导致访问冲突

    我从现有的整体 exe 本机 Visual Studio 2012 项目开始 我想添加一个本机单元测试项目 根据http msdn microsoft com en us library hh419385 aspx objectRef ht
  • 为什么 CMake 不通过在定义该变量之前创建的 CMAKE_CXX_STANDARD 将语言标准编译标志添加到目标?

    我在用着cmake version 3 22 1 and c Ubuntu 11 3 0 1ubuntu1 22 04 11 3 0 以及非常简约的CMakeLists txt 我无法让 CMAKE 使用 C 20 Setting set
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • 接口中的私有成员

    是否可以在 NET 接口中创建私有成员 我听说现在可以了 但我的 IDE 拒绝了 public interface IAnimal void SetDefaultName string name ChangeName name privat
  • tcmalloc/jemalloc 和内存池之间有什么区别(以及选择的理由)?

    tcmalloc jemalloc是改进的内存分配器 还引入了内存池以更好地分配内存 那么它们之间有什么区别以及在我的应用中如何选择它们呢 这取决于您的程序的要求 如果您的程序有更多的动态内存分配 那么您 需要从可用的分配器中选择一个内存分
  • 在 C# 中使用 as 关键字与泛型类型发生冲突的编译时行为

    当尝试对无法转换为的非泛型类型使用 C as 关键字时 编译器会给出无法转换类型的错误 但是 当对泛型类型使用 as 关键字时 编译器不会给出错误 public class Foo public class Bar
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • 从 Linq 的列表中选择多个字段

    在 ASP NET C 中 我有一个结构 public struct Data public int item1 public int item2 public int category id public string category
  • 在 C# 4.0 中,是否可以从泛型类型参数派生类?

    我一直在尝试这个 但我似乎无法弄清楚 我想做这个 public abstract class SingletonType
  • 为什么 C# 编译的正则表达式比等效的字符串方法更快?

    每次我必须对字符串执行简单的包含或替换操作 其中我正在搜索的术语是固定值 时 我发现如果我获取示例输入并对其进行一些分析 则使用编译的正则表达式是几乎 总是比使用 String 类中的等效方法更快 我尝试过比较多种方法 hs是要搜索的 干草
  • System.Drawing.Icon 构造函数抛出“操作成功完成”异常

    在 Windows XP 计算机上 以下代码抛出 System ComponentModel Win32Exception 并显示消息 操作成功完成 System Drawing Icon icon new System Drawing I
  • g++4.9 不支持 std::align

    在学习对齐问题等时 我意识到我的 g 4 9 macports OS X 实现不支持std align 如果我尝试编译 使用 std c 11 此示例代码来自http www cplusplus com reference memory a
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果
  • 访问 Visual Studio 扩展中的当前代码窗格

    我正在编写一个 Visual Studio 2010 扩展 在代码视图中带有右键单击菜单 我希望能够从菜单项事件处理程序检查当前代码 但无法在对象模型中找到执行此操作的位置 如何在 Visual Studio 扩展中访问当前窗口中的代码 E
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理

随机推荐

  • micropython 固件开发_Micropython编译固件的操作步骤

    目标 编译STM32F4固件并刷入到我们的开发板 STM32F407VET6 1 在Linux系统下进行编译操作 windows用户可以在虚拟机下运行Linux系统 推荐下载kali Linux系统 https www kali org d
  • 16个推荐系统开放公共数据集整理分享

    本文由深度学习与NLP编译 本文主要整理了一些与推荐系统相关的高质量的数据集 整理自Stack Overflow 一些文章 推荐站点和学术实验 其中 大多数数据集都是免费 开放的 但有些不是 需要获得许可或引用作者的工作才能使用 此外 其中
  • 微信云开发——日记小程序

    真正的大师 永远都怀着一颗学徒的心 一 项目简介 前一段时间在网上看到了一个云笔记的小程序 感觉挺不错的 闲暇之余 把他改造了一波 改成了一个专门写日记的小程序 同时 还增加了类似广场的小功能 就是可以把日记设置成公开 让所有的人都能看到
  • redis持久化配置

    redis有两种持久化方式 RDB和AOF 1 RDB配置方式 默认情况下 是快照RDB的持久化方式 将内存中的数据以快照的方式写入二进制文件中 默认的文件名是dump rdb redis conf默认配置 save 900 1 save
  • java多个jdk切换不同版本无法切换且上移环境JAVA_HOME无效的解决方案

    背景 我电脑上之前安好了java19 因为一些原因要下java1 8 发现可以设置计算机里的多个jdk版本 于是兴冲冲的开始了 网上的教程很详细 我也不啰嗦 前面进行的一切顺利 但是我始终无法切换对应的版本号 一直是原来的java19 后面
  • volatile概念详解及使用场景

    文章目录 一 volatile关键字特性 1 概念 2 特性 可见性 有序性 禁止指令重排序 原子性 二 使用场景 模式1 状态标志 模式2 独立观察 independent observation 模式3 一次性安全发布 模式4 vola
  • 1.1.2 python基本数据类型与运算符

    本章引言 任何计算机语言的学习都离不开其基础中的基础 即数据类型和运算 所以要学好一门语言必须具有扎实的基础 后期是否能够灵活使用就取决于第二章 第三章内容是否深而透 变量含义 用来存储一些之后可能会变化的值 对科比投篮ID为 1 的一次投
  • 输入入栈序列判断出栈序列是否合法(c语言实现)

    题目 分别给定入栈序列和出栈序列 然后判断出栈序列是否合法 如入栈序列是 6 5 4 3 2 1 出栈序列 4 5 3 1 2 6 是合法的 3 4 6 5 2 1 是不合法的 思路 判断出栈序列是否合法的标准是 栈顶如果是需要出栈的元素
  • Unity Code  鼓励师 插件

    使用 Visual Studio Code 编写代码 有隐藏福利插件设置哦 1 打开 Code 在扩展 搜索 鼓励 多种 插件 供你选 2 看看介绍 可以自定义哦 自己安装体验吧 3 还可以使用 蔡徐坤鼓励师 4 好想 体验 有真人 鼓励师
  • c++--解决cin输入流中遇到空格结束问题

    解决cin输入流中遇到空格结束问题 cout lt lt 请输一个字符串 lt
  • 基于stm32f1的内部读写flash

    flash是存储芯片的一种 通过特定的程序可以修改里面的数据 FLASH在电子以及半导体领域内往往表示Flash Memory的意思 即平时所说的 闪存 全名叫Flash EEPROM Memory 它结合了ROM和RAM的长处 不仅具备电
  • mysql5 autoreconnect_Mysql5的auto Reconnect错误

    一 解决方案一 最近在一个J2EE项目的开发过程中 遇到了这样的问题 在服务器上部署好这个Web系统后 这时访问系统是很正常的 当把服务器的时间 例如 2008 03 31 加一天或更多天 例如 2008 04 01 2008 04 02
  • 语义分割代码阅读---评价指标mIoU的计算

    1 语义分割IoU的定义 传统意义上的IoU Intersection over Union 交并比 直观表示 公式 语义分割中的IoU 在语义分割的问题中 这两个集合为真实值 ground truth 和预测值 predicted seg
  • react、vue项目代码阅读熟悉技巧

    在没有人给你解读项目的情况下 接手到老项目该如何开始起步熟悉呢 除了要大致到了解项目业务背景 技术栈 还应该要有通用化熟悉项目的技巧 每个人熟悉项目习惯技巧都不一样 尊重每个人的习惯和想法 建议收藏以下我的分享的熟悉项目技巧 拉项目 先熟悉
  • unity异常:InvalidOperationException: Burst failed to compile the function pointer `Int32

    异常信息具体如下 InvalidOperationException Burst failed to compile the function pointer Int32 ValidateCollinear BurstManaged Uni
  • 哈夫曼树以及哈夫曼编码的构造步骤

    注意 哈夫曼树并不唯一 但带权路径长度一定是相同的 第一部分 由给定结点构造哈夫曼树 1 8个结点的权值大小如下 2 从19 21 2 3 6 7 10 32中选择两个权小结点 选中2 3 同时算出这两个结点的和5 3 从19 21 6 7
  • C# Json的添加方式

    json的几种添加方式 1 只能添加JProperty类的Object 可以一次性添加多个 Add方法添加只能针对于json中的第一层 第二层添加目前还无法得知 但是有其他方法进行弥补 string json ReqCode errcode
  • 【报错】Python:WARNING: You are using pip version 21.1.3; however, version 23.0.1 is available.

    想使用pip安装Scrapy时 报了这个错误 WARNING You are using pip version 21 1 3 however version 23 0 1 is available You should consider
  • 《深入理解Java虚拟机 3》类加载机制与字节码执行引擎

    本系列是用来记录 深入理解Java虚拟机 这本书的读书笔记 方便自己查看 也方便大家查阅 欲速则不达 欲达则欲速 第六章 类文件结构 讲完了自动内存管理 我们来说说执行子系统 执行子系统讲解的是JVM如何执行程序 Class文件概述 这篇我
  • QEMU-KVM基本操作

    本文主要介绍KVM虚拟机的一些基本实践操作 对KVM虚拟机的管理操作主要是基于libvirt的命令行工具virsh进行的 一 安装与启动 1 KVM模块检查 1 查看当前Linux系统核心是否包含KVM模块 Linux内核2 6 20及以上