热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kvm常用指令

基础命令列出处于运行状态或暂停状态的虚拟机:virshlist列出所有虚拟机,无论处于什么状态:virshlist--all停止虚拟机:virshshutdown虚拟机名开启虚拟机

基础命令

列出处于运行状态或暂停状态的虚拟机:

virsh list

列出所有虚拟机,无论处于什么状态:

virsh list --all

停止虚拟机:

virsh shutdown 虚拟机名

开启虚拟机:

virsh start 虚拟机名

暂停挂起虚拟机:

virsh suspend 虚拟机名

让处于暂停状态的虚拟机继续运行:

virsh resume 虚拟机名

查看虚拟机的概览信息,例如cpu数量,内存大小,是否自启动等信息:

virsh dominfo 虚拟机名

设置虚拟机自启动:

virsh autostart 虚拟机名

取消虚拟机自启动:

virsh autostart --disable 虚拟机名

查看所有子命令的使用方法:

virsh --help

之前的命令都是在宿主机上的bash中执行的,其实,我们也可以不加任何参数,只执行 virsh命令,这样会进入到 virsh的终端中,然后再在 virsh的终端中执行子命令,效果如下

[root@cos7 ~]# virsh
Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

virsh # list --all

虚拟机详细配置文件默认存放在 /etc/libvirt/qemu目录下,xxx.xml文件中存放的就是某台虚拟机详细的配置

修改虚拟机配置文件的命令:

virsh edit 虚拟机名

图形化界面去修改对应的配置:

virt-manager

导出虚拟机配置文件:

virsh dumpxml 虚拟机名
virsh dumpxml 虚拟机名 > /tmp/虚拟机名.xml

创建磁盘命令:

qemu-img create -f qcow2 test.qcow2 50G

qemu-img命令是一个磁盘镜像管理工具,上述命令表示创建一个格式为 qcow2的磁盘(-f选项用于指定磁盘格式),磁盘名为 test.qcow2,磁盘大小为50G,由于我没有指定路径,所以 test.qcow2文件会在当前目录下创建,除了 qcow2格式,qemu-img还支持很多种其他的磁盘格式,支持的格式如下:

qemu-img -h | grep Supported
Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug

查看磁盘信息:

qemu-img info test.qcow2

刚创建出来的磁盘文件是很小的,不指定空间动态预分配策略时,不会直接分配所有空间,默认动态分配空间


创建

创建虚拟机命令:

virt-install --name=kvm2 --vcpus=2 --memory=2048 --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk path=/var/lib/libvirt/images/kvm2.qcow2 --network network=default --graphics none --extra-args='cOnsole=ttyS0'
上述virt-install命令各个参数含义如下
--name=kvm2表示为创建的虚拟机命名为kvm2。
--vcpus=2表示设置虚拟机cpu有2个核心。
--memory=2048表示设置内存为2G。
--location=/data/iso/CentOS-7-x86_64-DVD-2009.iso表示使用本地iso镜像安装虚拟机
--disk path=/var/lib/libvirt/images/kvm2.qcow2表示指定虚拟机的磁盘镜像的路径
--network network=default表示使用kvm的默认网络,默认网络是IP段为192.168.122.0/24的NAT网络。
--graphics none表示我们安装的过程中,是否需要使用的图形化控制台,由于我们此处模拟的是纯命令行安装,所以图形化控制台指定为none,表示不使用图形化控制台安装虚拟机。
--extra-args='cOnsole=ttyS0'表示为创建的虚拟机指定内核启动时的内核参数,此处为虚拟机内核添加的参数为cOnsole=ttyS0。也就是说,当安装虚拟机时,分配一个ttyS0的虚拟终端,因为我们没有使用图形化控制台安装,所以要分配一个命令行的虚拟终端,以便执行安装操作和安装完成后的登录、执行命令等操作。

在宿主机中,再次登录kvm2虚拟机的控制台,只需要在宿主机中执行:

virsh console kvm2

图形化安装的虚拟机,内核启动时不会分配虚拟终端,可以在此虚拟机中修改内核参数(重要环境提前做好备份):

grubby --update-kernel=ALL --args="cOnsole=ttyS0"

查看客户机是否支持 virtio驱动:

lsmod | grep virtio

如果使用命令安装虚拟机时就想指定使用 virtio模式的驱动,也可以在命令中指定磁盘的 bus和网卡的 model,示例如下:

virt-install --name=kvm2 --vcpus=2 --memory=2048 --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --graphics none --extra-args='cOnsole=ttyS0'

删除虚拟机:

virsh shutdown 虚拟机名
virsh undefine 虚拟机名

删除虚拟机后,qcow2磁盘文件还在,但 xml文件已经删掉了。

如果想要同时删掉 xml文件和 qcow2 磁盘文件,可以在 undefine命令中加入 --remove-all-storage参数,但是这样操作风险较大,一般不推荐使用

virt-install --import --name kvm2import --ram 4096 --vcpus=4 --cpu host-model --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --nographics

还是使用 virt-install命令导入镜像,--import选项表明是导入操作,上述命令中的虚拟机的名称、内存和cpu设置、网络、硬盘、驱动都可以在导入时根据情况进行设定,换句话说就是,即使创建kvm2时设置了2G内存,如果在导入镜像时,想要分配4G内存,那么只要在导入时指定 --ram 4096就行了,并不一定要和原配置保持一致,我在导入时就指定使用了 virtio模式驱动,这是因为我确认虚拟机使用的是centos7.9的系统,不用额外安装任何驱动。

由于我们在创建kvm2虚拟机时配置了虚拟终端(使用了 --extra-args='cOnsole=ttyS0'参数),所以在导入虚拟机时我指定了 --nographics选项,--nographics选项表示使用非图形化的console连入虚拟机(但是前提是我们确定已经为虚拟机配置好了终端),如果你在服务器的桌面环境(图形化环境)中执行上述命令,或者配置好了 x11forward,可以省略 --nographics 选项,默认情况下会为我们分配一个 virt-view图形化控制台,我们也可以通过这个图形化控制台连入导入的虚拟机。

不想在导入虚拟机时连入控制台,则可以直接使用 --noautoconsole选项,表示不会自动连入到虚拟机的控制台

virt-install --import --name kvm2import --ram 4096 --vcpus=4 --cpu host-model --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --noautoconsole

列出虚拟机的磁盘:

virsh domblklist kvm2import

重命名虚拟机:

virsh domrename 虚拟机名 改后的虚拟机名

利用xml文件还原虚拟机(新建):

virsh define 虚拟机xml文件

查看虚拟机状态:

virsh domstate 虚拟机名

克隆

被克隆的主机不能处于running状态,只能是暂停或者停止状态,所以此处先把停止机器kvm1,然后通过 virt-clone命令克隆kvm1模板

# 通过kvm1克隆出kvm2 -o对应的虚拟机为克隆源,-n对应的虚拟机为新克隆出的虚拟机。
virt-clone --auto-clone -o kvm1 -n kvm2

如果想要修改新克隆出的机器中的内容,除了登录进去修改,还可以借助 virt-sysprep或者 guestfish命令,在不启动虚拟机的情况下修改虚拟机中的内容,使用 virt-sysprep命令需要安装 libguestfs-tools,而且需要注意,virt-sysprep命令会默认清除虚拟机中的一些信息,比如 .ssh目录等,所以应该根据情况选择是否使用 virt-sysprep命令。


快照

虚拟机快照分为内部快照和外部快照,内部快照只支持 qcow2格式,外部快照支持更多的格式的磁盘,内部快照的数据包含在虚拟机的磁盘镜像文件中,外部快照会单独使用一个磁盘镜像文件,除了内部快照和外部快照,也可以单独对磁盘创建快照,此处只演示内部快照的常用命令。

创建虚拟机快照
virsh snapshot-create kvm1
查看虚拟机快照,一串数字为创建时间的unix时间戳
virsh snapshot-list kvm1
创建快照时,指定快照名字
virsh snapshot-create-as kvm1 snap2
创建快照时添加注释,比如描述某个快照的作用 --name指定快照名称 --description 指定快照对应的描述信息
virsh snapshot-create-as --domain kvm1 --name snap3 --description 'test snapshot3'

快照配置文件的默认目录为 /var/lib/libvirt/qemu/snapshot/,选择你要查看快照的机器

查看虚拟机某个快照的信息:

virsh snapshot-dumpxml kvm1 snap3

如果需要做快照的虚拟机有多个 qcow2文件组成(不同的 qcow2对应的不同的磁盘挂载)。那么,在创建快照时,应该加上 --atomic参数,以便保证创建快照操作的原子性,可以确保所有磁盘的快照都创建成功,示例命令如下:

virsh snapshot-create kvm1 --atomic
或者
virsh snapshot-create-as kvm1 snap5 --atomic

查看快照间的父子关系:

virsh snapshot-list kvm1 --tree

查看快照的概览信息:

virsh snapshot-info kvm1 1636006069

查看某个快照的父快照:

virsh snapshot-parent kvm1 snap3

查看虚拟机的状态距离哪个快照最近,虚拟机的状态在哪个快照状态之后,会打印出最近快照的配置文件信息:

virsh snapshot-current kvm1

查看虚拟机的状态距离哪个快照最近,虚拟机的状态在哪个快照状态之后,只显示快照名:

virsh snapshot-current kvm1 --name

恢复到某个快照的状态:

virsh snapshot-revert kvm1 --snapshotname snap2

恢复到最近的快照(不指定快照名):

virsh snapshot-revert kvm1 --current

删除某个快照:

virsh snapshot-delete kvm1 snap7

将snap6快照删除的同时,删掉它的后代:

virsh snapshot-delete kvm1 snap6 --children

只删除snap2快照的后代,不删掉它本身:

virsh snapshot-delete kvm1 snap2 --children-only

没有逻辑卷的磁盘扩容

思路:



  • 做好磁盘镜像备份

  • 增加磁盘镜像的容量

  • 登录虚拟机,扩容文件系统

qcow2磁盘只支持增大,不支持缩小,有快照的虚拟机不能扩容

查看磁盘镜像的所有快照:

qemu-img snapshot -l /var/lib/libvirt/images/kvm1.qcow2

扩容步骤:

1.停止虚拟机

virsh shutdown kvm4

2.对磁盘镜像进行扩容

qemu-img resize /var/lib/libvirt/images/kvm4.qcow2 +20G

3.扩容后,查看磁盘镜像信息

qemu-img info /var/lib/libvirt/images/kvm4.qcow2

4.启动虚拟机

virsh start kvm4

5.查看磁盘信息以及分区有没有扩容

fdisk -l
fdisk -lu /dev/vda3

6.MBR分区的扩容步骤:

先安装cloud-utils-growpart工具
yum install -y cloud-utils-growpart
对vda3分区扩容,vda和3中间有空格
growpart /dev/vda 3
此时分区的大小已经改变
fdisk -lu /dev/vda3

7.对文件系统 xfs扩容,执行 xfs_growfs命令即可,如果是 ext文件系统,需要使用 resize2fs命令,此处运行的命令为 xfs_growfs /dev/vda3

xfs_growfs /dev/vda3
查看磁盘使用情况
df -h

逻辑卷的磁盘扩容

查看kvm6当前的磁盘有哪些

virsh domblklist kvm6

创建一块新的磁盘,不要和已有的盘重名,否则会清空重名盘

qemu-img create -f qcow2 /var/lib/libvirt/images/kvm6_vdc.qcow2 5G

将新创建的盘添加给虚拟机

使用 virsh attach-disk为指定的虚拟机添加磁盘,--domain指定虚拟机名,--source指定要添加的磁盘文件,--subdriver指定磁盘文件的格式,由于我使用的是 qcow2格式的磁盘,所以此处不能省略 --subdriver参数,如果省略此参数,默认会被当做 raw格式的磁盘。如果被当做 raw格式的磁盘,磁盘挂载后,对应的磁盘空间会识别为磁盘实际占用的大小(与宿主机中识别的大小一样,测试的 qcow2没有预分配空间),所以此处使用 --subdriver qcow2指明磁盘格式,--target参数用来指定磁盘文件对应虚拟机中的哪个磁盘,--targetbus virtio用来指定是否使用 virtio总线驱动,--persistent参数表示配置是否永久生效,如果不添加 --persistent参数,磁盘只是临时添加到虚拟机中,虚拟机断电重启后,不会再有对应的新磁盘,也就是说,不加 --persistent参数,虚拟机的xml配置文件是不会被修改的,如果加上 --persistent参数,虚拟机的xml配置文件会被自动修改,添加上新磁盘的配置。

virsh attach-disk --domain kvm6 --source /var/lib/libvirt/images/kvm6_vdc.qcow2 --subdriver qcow2 --target vdc --targetbus virtio --persistent

进入虚拟机,查看磁盘情况:

fdisk -l

初始化磁盘:

将vdc创建为xfs文件系统
mkfs.xfs /dev/vdc
挂载新磁盘
mount /dev/vdc /testdisk
查看挂载
df -h
修改/etc/fstab自动挂载,设置uuid更准确

卸载挂载点,加了 --persistent会默认永久生效,配置文件中这段会删除:

virsh detach-disk kvm6 /var/lib/libvirt/images/kvm6_vdc.qcow2 --persistent

将kvm6卸载下的磁盘挂载到kvm5上,临时挂载命令:

virsh attach-disk --domain kvm5 --source /var/lib/libvirt/images/kvm6_vdc.qcow2 --subdriver qcow2 --target vde --targetbus virtio

查看:

virsh domblklist kvm5

我们修改了现有虚拟机的网络配置,如果想要通过命令在创建虚拟机时,就指定使用桥接的网络,可以使用 --network参数,指定对应的桥接设备,比如

virt-install --name=kvm7 --vcpus=2 --memory=2048 --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk path=/var/lib/libvirt/images/kvm2.qcow2 --network bridge=virbr1 --graphics none --extra-args='cOnsole=ttyS0'

KVM nat网络与桥接网络

访问[kvm桥接网络和nat网络详解 (zsythink.net)](https://www.zsythink.net/archives/4272)查看详情



推荐阅读
  • 事件是程序各部分之间的一种通信方式,也是异步编程的一种实现形式。本文将详细介绍EventTarget接口及其相关方法,以及如何使用监听函数处理事件。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在安装 iOS 开发所需的 CocoaPods 时,用户可能会遇到多种问题。其中一个常见问题是,在执行 `pod setup` 命令后,系统无法连接到 GitHub 以更新 CocoaPods/Specs 仓库。这可能是由于网络连接不稳定、GitHub 服务器暂时不可用或本地配置错误等原因导致。为解决此问题,建议检查网络连接、确保 GitHub API 限制未被触发,并验证本地配置文件是否正确。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 本文详细介绍了如何利用CSS技术对链接下划线进行个性化定制和美化,涵盖了多种实用技巧和方法。通过对CSS属性的灵活运用,可以实现不同风格的下划线效果,提升网页的视觉体验。文中不仅提供了基础的代码示例,还结合实际案例进行了深入解析,帮助读者更好地理解和应用这些技巧。此外,文章还引用了《CSS2.0中文手册》中的相关内容,增加了技术的权威性和实用性。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
author-avatar
沉淑梅志毓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有