当前位置: 首页 > news >正文

kvm 虚拟机命令行虚拟机操作、制作快照和恢复快照以及工作常用总结

文章目录

  • kvm 虚拟机命令行虚拟机操作、制作快照和恢复快照
    • 一、kvm 虚拟机命令行虚拟机操作(创建和删除)
      • 查看虚拟机
      • virt-install创建一个虚拟机
      • 关闭虚拟机
      • 重启虚拟机
      • 销毁虚拟机
    • 二、kvm 制作快照和恢复快照
      • **创建快照**
      • 工作常见问题
        • 创建快照报错::internal snapshots of a VM with pflash based firmware are not supported
          • 检查虚拟机是否包含 pflash 设备
    • 工作常用总结
      • 获取某个镜像的qcow文件
      • 压缩快照

kvm 虚拟机命令行虚拟机操作、制作快照和恢复快照

一、kvm 虚拟机命令行虚拟机操作(创建和删除)

查看virsh支持的命令

virsh --help

查看虚拟机

显示服务器上所有虚拟机,如果没有root权限,将只能输出当前用户创建的虚拟机。

virsh list --all

virt-install创建一个虚拟机

我们在最新欧拉系统(Kylin Linux Advanced Server release V10 (Lance)
)上,创建Kylin-Server-V10-SP3-General-Release-2303-ARM64 为例子

virt-install \
--virt-type=kvm \
--name KylinV10-{ip} \
--vcpus=8 \
--ram 16384 \
--os-variant=generic \
--location=/home/she/Kylin-Server-V10-SP3-General-Release-2303-ARM64.iso \
--network bridge=virbr0 \
--graphics none \
--console pty \
--noautoconsole -v \
--disk path=/home/she/kvm/KylinV10.qcow2,format=qcow2,size=200
  • –name:指定虚拟机名称

  • –ram:内存大小

  • –disk:系统盘路径和大小

  • –vcpus:vCPU核心数

  • –os-type:操作系统类型

  • –network:网络模式,桥接到 virbr0,
    virt-install 前可以使用 brctl show 查看当前主机上的桥设备

  • –os-variant:操作系统变种,这里用generic

如果指定了 --console pty 参数,可以通过 virsh console 来连接:

virsh console <vm-name>

或者,通过ID值接入虚拟机终端窗口,进入虚拟机窗口。

virsh console 2

在使用 virt-install 创建虚拟机时,有两种方法可以提供 ISO 镜像:

  1. 使用 --location 参数指定 ISO 镜像路径:
    –location=/path/to/iso/image.iso
    这会在创建虚拟机时上传指定的 ISO 到虚拟机中。
  2. 使用 --cdrom 参数指定 ISO 镜像路径:
    –cdrom=/path/to/iso/image.iso
    这会在虚拟机创建后,挂载给定的 ISO 作为 CDROM。
    两者的区别是:
  • –location: 在虚拟机安装时提供 ISO,系统安装完成后会被删除。
  • –cdrom: 挂载 ISO 作为 CDROM,可以在系统运行时继续访问。
    如果只需要在安装时使用 ISO,推荐使用 --location 参数,这样安装完成后不会占用资源。
    如果需要持续访问 ISO 中的数据,则可以使用 --cdrom,这样可以像真实 CDROM 一样使用。

虚拟机安装前设置,[!]表示必填,[X]表示选填。
在这里插入图片描述各选项含义如下:
1)语言设置 2)时区设置 3)安装源 4)软件包选择
5)系统分区 6)Kdump功能 7)网络配置 8)密码设置
9)创建用户
按“q”退出,按“b”开始安装。必须把带“!”号的都设置好才能开始安装。

总结,发现使用命令行安装,也需要很多交互,因此这里推荐使用界面安装虚拟机,创建快照等操作,再使用命令行方式。

关闭虚拟机

virsh shutdown CNEOS-xxx

重启虚拟机

virsh reboot CNEOS-wangyang16-1

销毁虚拟机

virsh undefine CNEOS-wangyang16-1

二、kvm 制作快照和恢复快照

在 KVM 中,可以通过 libvirt 提供的接口来为虚拟机创建快照和恢复快照。

创建快照

使用 virsh snapshot-create 命令创建快照:

virsh list
virsh snapshot-create vm1 --atomic --disk-only

这里我们为虚拟机 vm1 创建了一个快照,使用了 --disk-only 表示仅对磁盘创建快照。

查看快照
使用 virsh snapshot-list 命令可以查看虚拟机的快照:
bash

virsh snapshot-list vm1

这会列出 vm1 所有可用的快照。
恢复快照
使用 virsh snapshot-revert 命令可以恢复快照:

virsh snapshot-revert vm1 snapshot1

这会将 vm1 恢复到名为 snapshot1 的快照状态。
删除快照
使用 virsh snapshot-delete 命令可以删除快照:

virsh snapshot-delete vm1 snapshot1

这会删除名为 snapshot1 的快照。
在创建和管理快照时,可以添加选项控制快照类型(disk-only、system-checkpoint等)、是否包含内存状态等,灵活控制快照行为。

工作常见问题

创建快照报错::internal snapshots of a VM with pflash based firmware are not supported

virsh snapshot-create 24
错误:不支持的操作:internal snapshots of a VM with pflash based firmware are not supported

在通过图形界面创建 KVM 虚拟机时,可以选择不添加 pflash 设备。
通常 pflash 设备是默认被添加的,用于提供 UEFI 固件支持。但是它也会带来快照不兼容等限制。
如果您使用 Virt Manager 等图形工具创建虚拟机,可以在存储配置界面,取消选择 “UEFI ROM” 选项,即可避免添加 pflash 设备。
具体步骤如下:

  1. 在创建虚拟机向导的“存储”界面
  2. 找到“控制器”下拉框,选择需要的控制器模型(如 VirtIO)
  3. 在下方的“管理固件”组
  4. 取消勾选“UEFI ROM”选项
  5. 点击完成后,pflash 设备就不会被添加到虚拟机中
    如果已经添加了 pflash,也可以通过编辑 XML 配置移除它们。
    通过跳过 pflash的添加,可以避免后续的快照问题。但虚拟机将无法使用自定义 UEFI 固件。需要根据需求权衡。
检查虚拟机是否包含 pflash 设备
  1. 关闭虚拟机
virsh shutdown your_vm
  1. 打印虚拟机 XML 配置, 在输出的 XML 中查找是否存在 pflash 的定义
virsh dumpxml your_vm   |grep pflash 

为了移除 pflash 并解决快照问题:

virsh edit  your_vm
  1. 在XML文件里找到上面这一段 pflash loader 的定义
  2. 删除这一整段内容,移除 pflash loader
    在这里插入图片描述
  3. 保存编辑后的XML文件
    修改完xml报错配置报错:# virsh edit openEuler22.03-144.65
    错误:不支持的配置:ACPI requires UEFI on this architecture
    失败的。 再次尝试? [y,n,i,f,?]:
    在删除了 pflash loader 配置后,虚拟机的 ACPI 设置还依赖于 UEFI 模式。
    由于 pflash 提供了 UEFI 支持,直接删除它会导致这种不兼容。
    可以尝试:
  4. 同时删除 XML 文件里与 ACPI 相关的设置,例如:
    xml


测试失败,改为之后,虚拟机启动不起来了。

直接在虚拟机配置中删除 pflash 设备后导致虚拟机无法启动,这通常有以下几个原因:

  1. 删除pflash后,虚拟机仍被配置为UEFI模式启动,而缺少pflash无法实现UEFI启动。
  2. 虚拟机配置依赖于pflash提供的OVMF固件,删除后引发不兼容。
  3. pflash上保存了UEFI NVRAM变量数据,删除后这些变量丢失,导致启动失败。
  4. pflash删除后,虚拟机的其他设备配置存在不兼容,例如声明需要APIC/ACPI但未正确启用。

不推荐该方式尝试~

在这里插入图片描述
如果machine是virt,表示默认是UEFI固件。

工作常用总结

获取某个镜像的qcow文件

  1. 列出所有虚拟机
    首先,使用以下命令列出所有虚拟机及其状态:
virsh list --all

这将显示所有虚拟机,包括正在运行和已关闭的虚拟机。

  1. 检查虚拟机的 XML 配置
    使用 virsh dumpxml 命令查看虚拟机的完整 XML 配置,其中将包含有关磁盘设备的信息:
virsh dumpxml "vm-name-or-id"

替换 为您的虚拟机名称或 ID。

  1. 查找 标签

在输出中,查找包含 标签的部分。这通常会包含关于虚拟磁盘的信息,例如:

<disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/your_image.qcow2'/>...
</disk>

压缩快照

镜像主机先关机,通过宿主机压缩镜像

  1. 镜像主机先关机
poweroff
  1. 获取镜像的qcow文件(参考前面)
virsh list --all
virsh dumpxml "vm-name-or-id"  |grep qcow
  1. 通过宿主机压缩镜像
virt-sparsify --compress 源qcow2镜像路径 新qcow2镜像路径

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据并通过随机森林和多层感知两种模型进行简单的预测
  • redis基本数据类型和常见命令
  • 工具使用记录-Tkinter
  • Leetcode 无重复字符的最长子串
  • slf4j依赖冲突处理
  • torchvision.transforms.ToPILImage()使用
  • MySQL 故障排查与性能优化指南
  • 韶音开放式耳机好用吗?南卡、韶音、Oladance、Cleer热门开放式耳机一周横评
  • 【Gateway】网关服务快速上手
  • uniapp数据缓存和发起网络请求
  • Unity Apple Vision Pro 开发(五):PolySpatial 2.0 导入方式
  • flink中slotSharingGroup() 的详解
  • 相亲交友程序系统开发产品分析
  • 【H2O2|全栈】关于HTML(4)HTML基础(三)
  • 掌握Go语言中的时间与日期操作
  • “大数据应用场景”之隔壁老王(连载四)
  • CSS相对定位
  • ES6系统学习----从Apollo Client看解构赋值
  • Netty源码解析1-Buffer
  • redis学习笔记(三):列表、集合、有序集合
  • Sass Day-01
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 服务器之间,相同帐号,实现免密钥登录
  • 老板让我十分钟上手nx-admin
  • 手机端车牌号码键盘的vue组件
  • 算法-图和图算法
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • No resource identifier found for attribute,RxJava之zip操作符
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • # 数论-逆元
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Java入门)学生管理系统
  • (LLM) 很笨
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (图)IntelliTrace Tools 跟踪云端程序
  • (五)Python 垃圾回收机制
  • (一一四)第九章编程练习
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .apk 成为历史!
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core 成都线下面基会拉开序幕
  • .Net Core 中间件与过滤器
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET/C# 的字符串暂存池
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • @SuppressWarnings注解
  • @vue-office/excel 解决移动端预览excel文件触发软键盘