【KVM虚拟化】· virsh管理命令
目录
🍁libvirt架构概述
🍁使用virsh管理虚拟机
🍂常用命令总结
🍁kvm基本功能管理
🍂帮助命令
🍂KVM的配置文件存放目录
🍂查看虚拟机状态
🍂虚拟机关机与开机
🍂强制虚拟机系统关闭电源
🍂通过配置文件启动虚拟机系统
🍂挂起虚拟机
🍂恢复虚拟机
🍂设置虚拟机自启
🍂导出虚拟机配置
🍂删除和导入虚拟机
🍂修改虚拟机配置文件
🍂查看虚拟机信息
🍂连接虚拟机
🍂虚拟机克隆
🍃查看虚拟机状态
🍃克隆虚拟机
🍃查看状态并启动
🍁虚拟机快照
🍃对虚拟机拍摄快照
🍃查看快照详细信息
🍃恢复快照
🍃删除快照
🦐博客主页:大虾好吃吗的博客
🦐专栏地址:KVM虚拟化专栏
libvirt架构概述
libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:libvirt API,libvirtd进程和virsh工具集三部分。最初的目的是为不同的hypervisor提供统一的管理接口。
libvirtd该后台进程主要实现以下功能:
(1)远程代理所有remote client发送来的命令,由该进程监测执行
(2)本地环境初始化libvirt服务的启停,用户connection的响应等
(3)根据环境注册各种Driver(qemu, xen, storage…)的实现不同虚拟化技术以Driver的形式实现,由于libvirt对外提供的是统一的接口,所以各个Driver就是实现这些接口,即将Driver注册到libvirt中。
查看libvirtd服务状态
如果libvirtd服务停止运行,那么你将不能管理虚拟机,也就是不能使用virt-manager等工具来管理虚拟机。
[root@localhost ~]# systemctl status libvirtd
查看配置文件
虚拟机的所有配置是放置在一个xml文件中,位置在/etc/libvirt/qemu/目录中
[root@localhost ~]# ll /etc/libvirt/qemu
total 8
-rw------- 1 root root 3325 Apr 20 23:29 myvm01.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
可以看到创建的2个虚拟机,libvirt的xml文件分为几个重要部分,整体结构如下:
<domain type='kvm'>
虚拟机整体信息
系统信息
硬件资源特性
突发事件处理
虚拟磁盘(单个或多个)
虚拟光盘(可选)
虚拟网络(单个或多个)
vnc/spice 配置
</domain>
使用virsh管理虚拟机
virsh是使用libvirt management API构建的管理工具,virsh的名称的含义是virtualization shell。它有两种工作模式:
立即模式
[root@localhost ~]# virsh list --allId Name State
----------------------------------------------------3 myvm02 running4 myvm01 running
交互模式
[root@localhost ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands'quit' to quit
virsh # list --allId Name State
----------------------------------------------------3 myvm02 running4 myvm01 running
常用命令总结
命令 | 描述 |
---|---|
attach-device | 使用XML文件中的设备定义在虚拟机中添加设备 |
attach-disk | 在虚拟机中附加新磁盘设备 |
attach-interface | 在虚拟机中附加新网络接口 |
create | 在XML配置文件生成虚拟机并启动新虚拟机 |
define | 为虚拟机输出XML配置文件 |
destroy | 强制关闭虚拟机 |
detach-device | 从虚拟机中分离设备,使用同样的XML描述作为命令attach-device |
detach-disk | 从虚拟机中分离磁盘设备 |
detach-interface | 从虚拟机中分离网络接口 |
domblkstat | 显示正在运行的虚拟机的块设备统计 |
domid | 显示虚拟机id |
domifstat | 显示正在运行的虚拟机的网络接口统计 |
dominfo | 显示虚拟机信息 |
domname | 显示虚拟机名称 |
domstate | 显示虚拟机状态 |
domuuid | 显示虚拟机uuid |
dumpxml | 输出虚拟机XML配置文件 |
help | 显示帮助命令 |
list | 列出所有虚拟机 |
migrate | 列出虚拟机迁移到两外一台主机中 |
nodeinfo | 有关管理程序的输出信息 |
quit | 退出交互终端 |
reboot | 重启虚拟机 |
restore | 恢复以前保存在文件中的虚拟机 |
resume | 恢复暂停的虚拟机 |
save | 将虚拟机当前状态保存到某个文件中 |
setmaxmem | 为管理程序设定内存上限 |
setmem | 为虚拟机设定分配的内存 |
setvcpus | 修改为虚拟机分配的虚拟cpu数量 |
shutdown | 关闭虚拟机 |
undefine | 删除与虚拟机关联的所有文件 |
vcpuinfo | 显示虚拟机的虚拟cpu信息 |
vcpupin | 控制虚拟机的虚拟cpu亲和性 |
version | 显示virsh版本 |
start | 启动未激活的虚拟机 |
suspend | 暂停虚拟机 |
kvm基本功能管理
为了区分主机及虚拟机,这里把主机改名为kvmserver
帮助命令
[root@kvmserver ~]# virsh -h
KVM的配置文件存放目录
[root@kvmserver ~]# ll /etc/libvirt/qemu
total 8
-rw------- 1 root root 3325 Apr 20 23:29 myvm01.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
查看虚拟机状态
list只能查看启动状态下的虚拟机,加参数--all可以查看全部虚拟机,但未启动的虚拟机不会有id。
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------5 myvm01 running- myvm02 shut off
虚拟机关机与开机
通过上面查看的虚拟机状态,这里把myvm01关闭,myvm02开启。
[root@kvmserver ~]# virsh shutdown myvm01
Domain myvm01 is being shutdown
[root@kvmserver ~]# virsh start myvm02
Domain myvm02 started
强制虚拟机系统关闭电源
当虚拟机出现故障,通过上面温柔的关机方式,无法关闭时。这时你就需要用到暴力(拔电源)关机了,这种方式关机速度快,但是不推荐!!!
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------6 myvm02 running- myvm01 shut off[root@kvmserver ~]# virsh destroy myvm02
Domain myvm02 destroyed[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------- myvm01 shut off- myvm02 shut off
通过配置文件启动虚拟机系统
启动方式不止start一种,也可以通过启动配置文件来开启虚拟机。
[root@kvmserver ~]# virsh create /etc/libvirt/qemu/myvm01.xml
Domain myvm01 created from /etc/libvirt/qemu/myvm01.xml[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------7 myvm01 running- myvm02 shut off
挂起虚拟机
当虚拟机暂时不使用时,可以通过挂起保存当前的状态。当查看虚拟机的状态是,可以看到虚拟机的状态为被挂起。需要注意的是,挂起时的虚拟机必须为启动状态。
[root@kvmserver ~]# virsh suspend myvm01
Domain myvm01 suspended[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------7 myvm01 paused- myvm02 shut off
恢复虚拟机
恢复挂起状态下的主机
[root@kvmserver ~]# virsh resume myvm01
Domain myvm01 resumed[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------7 myvm01 running- myvm02 shut off
设置虚拟机自启
设置虚拟机随宿主机开启而开启,执行创建命令时在/etc/libvirt/qemu/autostart/目录里面创建开机自启的系统文件链接。
[root@kvmserver ~]# virsh autostart myvm01
Domain myvm01 marked as autostarted[root@kvmserver ~]# cd /etc/libvirt/qemu/autostart/
[root@kvmserver autostart]# ls
myvm01.xml
[root@kvmserver autostart]# virsh list --autostartId Name State
----------------------------------------------------7 myvm01 running[root@kvmserver autostart]# virsh autostart --disable myvm01
Domain myvm01 unmarked as autostarted[root@kvmserver autostart]# virsh list --autostartId Name State
----------------------------------------------------
导出虚拟机配置
下面命令是备份虚拟机myvm01,路径还是放qemu目录下。
[root@kvmserver ~]# virsh dumpxml myvm01 > /etc/libvirt/qemu/myvm01_bak.xml
删除和导入虚拟机
删除虚拟机前需要先关闭虚拟机,让虚拟机处于关机状态。需要注意的是,上面已经备份了myvm01的虚拟机,如果没有备份,建议先备份,以便后面的导入操作。
[root@kvmserver ~]# virsh shutdown myvm01
Domain myvm01 is being shutdown[root@kvmserver ~]# virsh undefine myvm01
Domain myvm01 has been undefined
查看删除结果,虽然文件myvm01.xml被删除了,但是不会删除磁盘文件。通过list命令查看已经没有myvm01虚拟机了。
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------- myvm02 shut off[root@kvmserver ~]# ll /etc/libvirt/qemu
total 8
drwxr-xr-x 2 root root 6 Apr 21 05:04 autostart
-rw-r--r-- 1 root root 4061 Apr 21 05:10 myvm01_bak.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
通过备份的配置文件重新定义虚拟机
[root@kvmserver ~]# mv /etc/libvirt/qemu/myvm01_bak.xml /etc/libvirt/qemu/myvm01.xml
[root@kvmserver ~]# virsh define /etc/libvirt/qemu/myvm01.xml
Domain myvm01 defined from /etc/libvirt/qemu/myvm01.xml[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------- myvm01 shut off- myvm02 shut off
修改虚拟机配置文件
通过vim命令直接对配置文件修改
[root@kvmserver ~]# vim /etc/libvirt/qemu/myvm01.xml
通过edit命令直接对虚拟修改
[root@kvmserver ~]# virsh edit myvm01
查看虚拟机信息
[root@kvmserver ~]# virsh dominfo myvm01
Id: -
Name: myvm01
UUID: 59727769-f3a3-418c-936b-8bf4191c766a
OS Type: hvm
State: shut off
CPU(s): 1
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
连接虚拟机
进入虚拟机后按 ctrl + ] 退出虚拟机,注意需要先启动虚拟机,等待开机完成,输入用户密码登录即可。
[root@kvmserver ~]# virsh start myvm01
Domain myvm01 started[root@kvmserver ~]# virsh console myvm01vm01 login: root
Password:
Last login: Fri Apr 21 14:18:14 on ttyS0
[root@vm01 ~]#
虚拟机克隆
查看虚拟机状态
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running- myvm02 shut off
克隆虚拟机
克隆myvm02的虚拟机,到myvm02_clong
[root@kvmserver ~]# virt-clone -o myvm02 -n myvm02_clong -f /kvm/img/vm02_clong.qcow2
Allocating 'vm02_clong.qcow2' | 8.0 GB 00:00:12 Clone 'myvm02_clong' created successfully.
参数:-o 需要克隆的虚拟机名称;-n 新虚拟机名称; -f 指定克隆到哪个文件目录并命名
查看状态并启动
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running- myvm02 shut off- myvm02_clong shut off[root@kvmserver ~]# virsh start myvm02_clong
Domain myvm02_clong started[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running9 myvm02_clong running- myvm02 shut off
虚拟机快照
快照实际上做的是虚拟机的XML配置文件,默认快照XML文件,在/var/lib/libvirt/qemu/snapshot/虚拟机名/下,快照只支持qcow2磁盘格式的系统。
对虚拟机拍摄快照
拍摄快照有两种方式,第一种是随机生成名称,第二种是指定名称,最后查看虚拟机快照,生成两个虚拟机快照。
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running9 myvm02_clong running- myvm02 shut off[root@kvmserver ~]# virsh snapshot-create myvm01
Domain snapshot 1682069915 created
[root@kvmserver ~]# virsh snapshot-create-as myvm01 as1
Domain snapshot as1 created
[root@kvmserver ~]# virsh snapshot-list myvm01Name Creation Time State
------------------------------------------------------------1682069915 2023-04-21 05:38:35 -0400 runningas1 2023-04-21 05:39:04 -0400 running
查看快照详细信息
[root@kvmserver ~]# virsh snapshot-current myvm01
<domainsnapshot><name>as1</name><state>running</state><parent><name>1682069915</name></parent><creationTime>1682069944</creationTime>
#省略部分内容
恢复快照
恢复myvm01虚拟机到快照1682069915
[root@kvmserver ~]# virsh snapshot-revert myvm01 1682069915[root@kvmserver ~]# virsh snapshot-current myvm01
<domainsnapshot><name>1682069915</name><state>running</state><creationTime>1682069915</creationTime> #虚拟机快照版本号<memory snapshot='internal'/>
#省略部分内容
删除快照
先查看myvm01有哪些快照,删除as1快照后查看是否删除。
[root@kvmserver ~]# virsh snapshot-list myvm01Name Creation Time State
------------------------------------------------------------1682069915 2023-04-21 05:38:35 -0400 runningas1 2023-04-21 05:39:04 -0400 running[root@kvmserver ~]# virsh snapshot-delete myvm01 as1
Domain snapshot as1 deleted[root@kvmserver ~]# virsh snapshot-list myvm01Name Creation Time State
------------------------------------------------------------1682069915 2023-04-21 05:38:35 -0400 running
相关文章:

【KVM虚拟化】· virsh管理命令
目录 🍁libvirt架构概述 🍁使用virsh管理虚拟机 🍂常用命令总结 🍁kvm基本功能管理 🍂帮助命令 🍂KVM的配置文件存放目录 🍂查看虚拟机状态 🍂虚拟机关机与开机 🍂强制虚…...
JS Es6中判断b数组对象是否有跟a数组对象相同的数值(例如:id),有的话就过滤掉
如下[数组]对象a和b let a[{id:1,value:this},{id:2,value:is}] let b[{id:1,value:hello},{id:3,value:world}]filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。 some() 方法用于检测数组中的元素是否满足指定条件&#x…...

python获取某电商平台口红数据并制作词云
目录标题 前言开发环境:模块使用数据来源分析代码展示获取数据制作词云 尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 开发环境: Python 3.8 Pycharm 模块使用 requests jieba 结巴分词 wordcloud 词云 第三方模块安装: win R 输…...

阿里成立AIDC,用“增长”解题国际化
随着阿里巴巴集团2023财年年报的披露,AIDC也随即浮出了水面。 AIDC是阿里国际数字商业集团的英文简称,AIDC即Alibaba International Digital Commerce。阿里是在5月18日公布的截至2023年3月31日的2023财年Q4及全年财报,财报数据之外ÿ…...
全面理解:在计算机科学中同步、异步、并行、并发,他们之间到底有什么区别,如果正确更好的区分它们?
同步,异步,并行,并发的基础概念 在计算机中同步的基础概念 在计算机科学中,同步(Synchronization)是指在多个过程或线程中,它们的执行在时间上是有序的。换句话说,要执行一个特定的…...
9、Ray核心框架介绍
9、Ray核心框架介绍 导航 1.简介和背景 2.Ray的基本概念和核心组件 3.分布式任务调度和依赖管理 4.对象存储和数据共享 5.Actor模型和并发编程 6.Ray的高级功能和扩展性 7.使用Ray构建分布式应用程序的案例研究 8.Ray社区和资源 9.核心框架介绍 10.扩展1...
【华为OD机试python】工单调度策略【 2023 Q1 A卷|100分】
华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! ■ 题目描述 当小区通信设备上报警时,系统会自动生成待处理的工单, 工单调度系统需要根据不同的策略,调度外线工程师(FME)上站去修复工单对应的问题。 根据与运营商签订的合同,不同严重程度…...

[论文阅读72]Parameter-Efficient Transfer Learning for NLP
1. 基本信息 题目论文作者与单位来源年份Parameter-Efficient Transfer Learning for NLPNeil Houlsby等Google Research,雅盖隆大学-波兰PMLR2019 Houlsby N, Giurgiu A, Jastrzebski S, et al. Parameter-efficient transfer learning for NLP[C]//Internationa…...
0基础转行居然拿到9.5K!尘埃深处是繁花,强者从未停下!
人总是越长大越胆小,很多事情不敢做,以后就更不敢做了。 为梦想颠簸的人有很多,可能不差你这个,不如意的时候我们都会想要放弃,但是生活不是一个点,它是一条长长的线,唯有行动,才能摆…...

软考初级程序员上午单选题(13)
1、下列不能兼作输入设备和输出设备的是______。 A.可擦除型光盘 B.软盘 C.硬盘 D.键盘 2、文件型计算机病毒主要感染______。 A..TXT文件 B..GIF文件 C..EXE文件 D..MP3文件 3、_…...

【WSN覆盖】基于麻雀搜索算法的三维无线传感器网络覆盖优化 三维WSN覆盖优化【Matlab代码#26】
文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. SSA算法2. 三维覆盖模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法,获取资源请见文章第5节:资源获取】 1. SSA算法 2. 三维覆盖模型 三维覆盖模…...

【学习日记2023.5.20】 之 菜品模块完善
文章目录 3. 功能模块完善之菜品模块3.1 公共字段自动填充3.1.1 问题分析3.1.2 实现思路3.1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3 步骤三 3.1.4 功能测试3.1.5 提交代码 3.2 新增菜品3.2.1 需求分析与设计3.2.2 代码开发3.2.2.1 文件上传实现3.2.2.2 新增菜品实现 3.2.3 功…...
MySQL高级SQL语句
创建两个表用于演示 location store_info use kgc; create table location (Region char(20),Store_Name char(20)); insert into location values(East,Boston); insert into location values(East,New York); insert into location values(West,Los Angeles); insert into lo…...
rem和em的区别和使用场景,以及如何在实际开发中灵活运用它们
在前端开发中,我们经常使用rem和em作为长度单位来设置页面元素的大小。虽然它们都可以用于实现响应式布局,但是它们之间存在着一些区别。本文将深入探讨rem和em的区别和使用场景,以及如何在实际开发中灵活运用它们。 什么是rem rem是相对于…...

JDK源码阅读环境搭建
本次针对jdk8u版本的搭建 1.新建项目 新建java项目JavaSourceLearn ,这里我创建的是maven 2.获取JDK源码 打开Project Structure 找到本地JDK安装位置将src.zip解压到项目java包中 整理下项目结构,删除用不到的目录 提示: 添加源码到项目之后首次运行…...

基本定时器工作模式
计数和定时 BasicTimer支持8位或16位向上计数模式。当计数值大于等于比较寄存器(CMPH、CMPL),会产生计数中断标志,并从自动重载寄存器(LOADH、LOADL)加载新的比较值。这样可以实时调整每个计数周期的计数长…...
【华为OD机试真题2023B卷 JAVA】报文重排序
华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 报文重排序 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 对报文进行重传和重排序是常用的可靠性机制,重传缓冲区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。。 输入描…...
【Docker】- 02 Docker-Compose
Docker-Compose Docker-Compose1 下载并安装Docker-Compose1.1 下载Docker-Compose1.2 设置权限1.3 配置环境变量1.4 测试 2 Docker-Compose管理MySQL和Tomcat容器3 使用docker-compose命令管理容器4 docker-compose配合Dockerfile使用4.1 docker-compose文件4.2 Dockerfile文件…...

工业相机的Pixel Binning和Pixel Skipping
一般图像传感器的不同分辨率都对应着不同的帧率。如果想要提高帧率,就要考虑是否需要缩小视野。若不希望视野缩小,就需要减小分辨率(resolution)。常用的减少分辨率的两种采样方式是:Skipping和Binning。 什么是Binni…...
c++ 11标准模板(STL) std::set(八)
定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...