菜鸟科技网

KVM虚拟机管理命令有哪些核心操作?

KVM(Kernel-based Virtual Machine)是Linux内核中集成的开源虚拟化技术,通过将内核功能转化为虚拟化模块,允许用户在单一物理主机上创建和管理多个虚拟机,其管理命令主要围绕virshvirt-installvirt-manager等工具展开,这些工具基于libvirt库开发,提供了从命令行到图形界面的全面管理能力,以下从虚拟机生命周期管理、资源配置、网络配置、存储管理及监控排错五个维度,详细解析核心命令及使用场景。

KVM虚拟机管理命令有哪些核心操作?-图1
(图片来源网络,侵删)

虚拟机生命周期管理

虚拟机的生命周期包括创建、启动、停止、暂停、恢复及删除等操作,virsh命令是核心工具,需以root权限或libvirt用户组执行。

创建虚拟机

创建虚拟机需先定义XML配置文件(或通过virt-install自动生成),再通过virsh define加载,XML文件包含虚拟机CPU、内存、磁盘、网络等核心配置,示例基础模板如下:

<domain type='kvm'>
  <name>vm-ubuntu</name>
  <memory unit='GiB'>2</memory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc'>hvm</type>
  </os>
  <devices>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/vm-ubuntu.qcow2'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
  </devices>
</domain>

使用virt-install可快速创建虚拟机,无需手动编写XML,

virt-install \
  --name vm-ubuntu \
  --memory 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/vm-ubuntu.qcow2,size=20 \
  --cdrom /path/to/ubuntu.iso \
  --os-variant ubuntu20.04 \
  --network network=default \
  --graphics spice

参数说明:--disk指定磁盘路径及大小(单位GB),--cdrom指定安装镜像,--os-variant优化操作系统配置(可通过osinfo-query os查看支持列表)。

KVM虚拟机管理命令有哪些核心操作?-图2
(图片来源网络,侵删)

启动与关闭

  • 启动虚拟机virsh start vm-ubuntu(临时启动,重启后失效);virsh autostart vm-ubuntu(设置开机自启)。
  • 关闭虚拟机virsh shutdown vm-ubuntu(优雅关闭,需虚拟机安装acpid服务);virsh destroy vm-ubuntu(强制关闭,类似断电,可能导致数据丢失)。

暂停与恢复

  • 暂停virsh suspend vm-ubuntu(将虚拟机状态保存在内存中,释放CPU资源,但内存仍被占用)。
  • 恢复virsh resume vm-ubuntu(从暂停状态恢复运行)。

删除虚拟机

删除虚拟机需先 undefine(删除配置),再可选删除磁盘:

virsh undefine vm-ubuntu  # 仅删除配置,磁盘保留
virsh undefine vm-ubuntu --remove-all-storage  # 同时删除配置和关联磁盘

资源配置与修改

虚拟机运行时或关闭状态下,可通过virsh editvirsh set*命令调整CPU、内存等资源。

CPU配置

  • 查看当前CPUvirsh vcpuinfo vm-ubuntu(显示虚拟CPU数量、状态及关联物理CPU)。
  • 修改CPU数量
    • 临时修改(运行时生效,重启后失效):virsh setvcpus vm-ubuntu 4 --live(将CPU核数调整为4,需虚拟机支持热插拔)。
    • 永久修改(修改XML配置):virsh edit vm-ubuntu,找到<vcpu>标签,修改数值(如<vcpu placement='static'>4</vcpu>),保存后重启虚拟机生效。

内存配置

  • 查看当前内存virsh dumpxml vm-ubuntu | grep memory(显示配置内存);virsh dommemstat vm-ubuntu(显示内存使用统计)。
  • 修改内存大小
    • 临时调整(需虚拟机安装balloon驱动):virsh setmem vm-ubuntu 3GiB --live(将内存调整为3GB,调整范围不能超过最大内存限制)。
    • 永久调整:virsh edit vm-ubuntu,修改<memory>(最大内存)和<currentMemory>(当前内存)标签,如:
      <memory unit='GiB'>4</memory>  <!-- 最大内存4GB -->
      <currentMemory unit='GiB'>3</currentMemory>  <!-- 当前内存3GB -->

网络配置管理

KVM虚拟机网络支持NAT、桥接、隔离模式等,通过virsh管理虚拟网络和网卡。

虚拟网络管理

  • 查看默认网络virsh net-list --all(显示所有虚拟网络,包括default网络,默认为NAT模式)。
  • 查看网络详情virsh net-dumpxml default(显示default网络的XML配置,包括IP地址段、DHCP配置等)。
  • 启动/关闭网络virsh net-start default(启动网络);virsh net-autostart default(设置网络开机自启)。

虚拟机网卡管理

  • 添加网卡
    • 临时添加(运行时生效,重启后失效):virsh attach-interface vm-ubuntu network default --live(为虚拟机添加一块NAT模式网卡)。
    • 永久添加:virsh edit vm-ubuntu,在<devices>标签内添加:
      <interface type='network'>
        <source network='default'/>
        <model type='virtio'/>
      </interface>
  • 删除网卡
    • 临时删除:virsh detach-interface vm-ubuntu network default --live(删除指定网络类型的网卡)。
    • 永久删除:通过virsh edit移除对应<interface>标签。

存储管理

虚拟机磁盘文件通常为qcow2格式(支持快照、压缩),可通过virshqemu-img工具管理。

KVM虚拟机管理命令有哪些核心操作?-图3
(图片来源网络,侵删)

磁盘管理

  • 创建磁盘qemu-img create -f qcow2 /var/lib/libvirt/images/vm-disk.qcow2 20G(创建20GB qcow2磁盘)。
  • 扩展磁盘容量
    • 先扩展磁盘文件:qemu-img resize /var/lib/libvirt/images/vm-ubuntu.qcow2 +10G(增加10GB)。
    • 再在虚拟机内分区扩容(需虚拟机操作系统支持,如Linux使用growpart+resize2fs)。
  • 挂载/卸载磁盘
    • 临时挂载:virsh attach-disk vm-ubuntu /path/to/disk.iso vdb --type cdrom --live(挂载ISO镜像为光驱)。
    • 永久挂载:通过virsh edit添加<disk>标签,指定<source file><target dev>

快照管理

快照可保存虚拟机某一时刻的状态(包括磁盘、内存),支持快速回滚。

  • 创建快照virsh snapshot-create-as vm-ubuntu --name snap-2023 --description "Before update"(创建名为snap-2023的快照)。
  • 查看快照virsh snapshot-list vm-ubuntu(列出所有快照);virsh snapshot-current vm-ubuntu(显示当前快照)。
  • 恢复快照virsh snapshot-revert vm-ubuntu snap-2023(恢复到指定快照,需先关闭虚拟机)。
  • 删除快照virsh snapshot-delete vm-ubuntu snap-2023(删除指定快照)。

监控与排错

状态监控

  • 查看虚拟机列表virsh list(显示运行中虚拟机);virsh list --all(显示所有虚拟机,包括关闭状态)。
  • 实时监控资源virt-top(类似top命令,显示虚拟机CPU、内存使用情况)。
  • 查看日志virsh log vm-ubuntu(显示虚拟机控制台日志,日志路径通常为/var/log/libvirt/qemu/vm-ubuntu.log)。

常见排错

  • 虚拟机无法启动:检查XML配置(virsh define vm-ubuntu重新加载配置)、磁盘路径是否存在、镜像是否损坏。
  • 网络不通:确认虚拟网络是否启动(virsh net-list)、虚拟机网卡是否获取IP(virsh domiflist vm-ubuntu查看网卡MAC及IP)、防火墙是否放行流量(如NAT模式需检查iptables规则)。

相关问答FAQs

问题1:如何将KVM虚拟机的磁盘文件从qcow2转换为raw格式?
解答:使用qemu-img convert命令转换格式,

qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/vm-ubuntu.qcow2 /var/lib/libvirt/images/vm-ubuntu.raw

转换后需通过virsh edit修改虚拟机XML配置,将磁盘<driver>标签的type改为raw<source>标签的file路径指向raw格式磁盘文件,最后重启虚拟机生效。

问题2:KVM虚拟机开机自启失败如何排查?
解答:分三步排查:

  1. 检查libvirtd服务状态:执行systemctl status libvirtd,确保服务已启动并设置为开机自启(systemctl enable libvirtd)。
  2. 检查虚拟机自启标记:执行virsh list --autostart,确认目标虚拟机是否在列表中;若不在,执行virsh autostart vm-ubuntu重新设置。
  3. 查看日志:检查/var/log/libvirt/libvirtd.log(libvirtd服务日志)和虚拟机日志(/var/log/libvirt/qemu/vm-ubuntu.log),定位具体错误信息(如磁盘路径错误、权限不足等)。
分享:
扫描分享到社交APP
上一篇
下一篇