菜鸟科技网

KVM虚拟化命令有哪些常用操作?

KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它将Linux内核转化为一个Type-1(裸金属) hypervisor,允许用户在同一物理服务器上运行多个隔离的虚拟机(VM),KVM依赖于CPU的硬件虚拟化扩展(如Intel VT-x或AMD-V),并通过QEMU(Quick Emulator)提供设备模拟和I/O虚拟化,以下是KVM虚拟化中常用的命令及其详细说明,涵盖虚拟机管理、网络配置、存储管理等多个方面,并通过表格形式汇总关键命令,最后附上相关FAQs。

KVM虚拟化命令有哪些常用操作?-图1
(图片来源网络,侵删)

KVM虚拟机管理命令

KVM虚拟机的管理通常通过virsh命令行工具实现,它是libvirt库的命令行接口,支持虚拟机的创建、启动、停止、迁移等操作。

虚拟机生命周期管理

  • 列出所有虚拟机
    virsh list --all
    显示所有虚拟机的名称、ID和状态(running/shut off/paused等)。

  • 启动虚拟机
    virsh start <vm_name>
    启动指定的虚拟机,例如virsh start ubuntu-vm

  • 关闭虚拟机(正常关机):
    virsh shutdown <vm_name>
    向虚拟机发送关机信号,需在虚拟机内部安装acpid服务才能正常关机。

    KVM虚拟化命令有哪些常用操作?-图2
    (图片来源网络,侵删)
  • 强制关闭虚拟机(相当于物理机断电):
    virsh destroy <vm_name>
    立即停止虚拟机,可能导致数据未保存,需谨慎使用。

  • 挂起虚拟机
    virsh suspend <vm_name>
    暂停虚拟机运行,状态为paused,可通过virsh resume恢复。

  • 恢复挂起的虚拟机
    virsh resume <vm_name>

  • 删除虚拟机(仅删除配置,不删除磁盘文件):
    virsh undefine <vm_name>
    若需同时删除磁盘文件,需手动删除或使用--storage参数(需配置存储池)。

    KVM虚拟化命令有哪些常用操作?-图3
    (图片来源网络,侵删)

虚拟机配置与查看

  • 查看虚拟机配置信息
    virsh dumpxml <vm_name>
    以XML格式输出虚拟机的详细配置,包括CPU、内存、磁盘、网络等参数。

  • 编辑虚拟机配置
    virsh edit <vm_name>
    打开默认文本编辑器(如vi)修改虚拟机XML配置,修改后需重启虚拟机生效。

  • 查看虚拟机资源使用情况
    virsh dominfo <vm_name>
    显示虚拟机的CPU、内存、磁盘等资源占用信息。

  • 虚拟机控制台访问
    virsh console <vm_name>
    直接连接虚拟机的串口控制台,需在虚拟机配置中启用串口并设置终端类型为pty

虚拟机快照管理

快照用于保存虚拟机的某个时间点状态,便于后续恢复或回滚。

  • 创建快照
    virsh snapshot-create-as <vm_name> <snapshot_name> --description "snapshot description"
    virsh snapshot-create-as ubuntu-vm snap1 --description "pre-update snapshot"

  • 列出虚拟机所有快照
    virsh snapshot-list <vm_name>

  • 查看快照详情
    virsh snapshot-info <vm_name> <snapshot_name>

  • 恢复快照
    virsh snapshot-revert <vm_name> <snapshot_name>
    恢复虚拟机到指定快照状态,恢复前需关闭虚拟机。

  • 删除快照
    virsh snapshot-delete <vm_name> <snapshot_name>

KVM存储管理命令

KVM支持多种存储后端,如文件(qcow2、raw)、块设备、网络存储(NFS、iSCSI)等,通过virshqemu-img工具管理。

磁盘镜像管理

  • 创建磁盘镜像(qcow2格式,支持快照和压缩):
    qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-vm.qcow2 20G
    创建一个20GB的qcow2格式磁盘镜像。

  • 转换磁盘格式(如raw转qcow2):
    qemu-img convert -f raw -O qcow2 source.img target.qcow2

  • 调整磁盘大小(需在虚拟机内部扩展文件系统):
    qemu-img resize /var/lib/libvirt/images/ubuntu-vm.qcow2 +10G
    磁盘容量增加10GB,虚拟机内需使用resize2fs(ext4)或xfs_growfs(XFS)扩容文件系统。

  • 查看磁盘镜像信息
    qemu-img info /var/lib/libvirt/images/ubuntu-vm.qcow2

存储池管理

存储池是存储资源的逻辑集合,如目录、LVM卷、iSCSI目标等。

  • 列出所有存储池
    virsh pool-list --all

  • 创建存储池(以目录为例):
    virsh pool-define-as --name dir-pool --type dir --target /data/kvm-pool
    定义名为dir-pool的目录存储池,目标路径为/data/kvm-pool

  • 启动存储池
    virsh pool-start dir-pool

  • 设置存储池自动启动
    virsh pool-autostart dir-pool

  • 删除存储池(需先停止并卸载):
    virsh pool-destroy dir-pool && virsh pool-undefine dir-pool

KVM网络管理命令

KVM支持多种网络模式,如NAT(默认)、桥接(bridge)、仅主机网络(host-only)等,通过virshbrctl工具管理。

虚拟网络管理

  • 列出所有虚拟网络
    virsh net-list --all

  • 查看虚拟网络配置
    virsh net-dumpxml default
    default是KVM默认的NAT网络名称。

  • 启动虚拟网络
    virsh net-start default

  • 停止虚拟网络
    virsh net-stop default

  • 删除虚拟网络
    virsh net-undefine default
    删除前需确保没有虚拟机使用该网络。

网桥配置

  • 查看网桥状态
    brctl show
    需安装bridge-utils工具包。

  • 创建网桥(例如br0):
    ip link add br0 type bridge && ip addr add 192.168.1.100/24 dev br0 && ip link set br0 up
    将物理网卡(如eth0)加入网桥:ip link set eth0 master br0

  • 删除网桥
    ip link set eth0 nomaster && ip link del br0

KVM常用命令汇总表

功能分类 命令示例 说明
虚拟机生命周期 virsh list --all 列出所有虚拟机状态
virsh start <vm_name> 启动虚拟机
virsh destroy <vm_name> 强制关闭虚拟机
虚拟机配置 virsh dumpxml <vm_name> 查看虚拟机XML配置
virsh edit <vm_name> 编辑虚拟机配置
快照管理 virsh snapshot-create-as <vm_name> <snap_name> 创建快照
virsh snapshot-revert <vm_name> <snap_name> 恢复快照
存储管理 qemu-img create -f qcow2 <disk_path> <size> 创建磁盘镜像
qemu-img resize <disk_path> +<size> 扩展磁盘大小
virsh pool-list --all 列出存储池
网络管理 virsh net-list --all 列出虚拟网络
brctl show 查看网桥状态
性能监控 virsh domblkstat <vm_name> 查看虚拟机磁盘统计信息
virsh dommemstat <vm_name> 查看虚拟机内存统计信息

相关问答FAQs

问题1:如何查看KVM虚拟机的实时资源占用情况(如CPU、内存使用率)?
解答:可通过以下方式查看:

  1. 使用virsh命令
    • virsh cpu-stats <vm_name>:查看CPU实时使用统计。
    • virsh memstat <vm_name>:查看内存使用统计。
  2. 使用tophtop:在宿主机上执行top -p $(virsh qemu-command-info <vm_name> | grep PID | awk '{print $2}'),直接查看虚拟机进程的资源占用。
  3. 安装virt-top工具yum install virt-top(CentOS/RHEL)或apt install virt-top(Ubuntu),运行virt-top可实时显示所有虚拟机的资源使用情况,类似top命令。

问题2:KVM虚拟机无法启动,提示“domain is not running”或“failed to allocate memory”,如何排查?
解答:此类问题通常与资源分配或配置错误相关,可按以下步骤排查:

  1. 检查虚拟机状态:执行virsh list --all确认虚拟机是否处于shut off或paused状态。
  2. 查看错误日志:通过virsh logcat <vm_name>或查看/var/log/libvirt/qemu/<vm_name>.log定位具体错误,如内存不足(failed to allocate memory)需检查宿主机内存是否充足;磁盘文件损坏需检查磁盘镜像文件是否存在或使用qemu-img check验证。
  3. 检查资源配置:使用virsh dumpxml <vm_name>查看CPU、内存配置是否超出宿主机限制,例如宿主机总内存为16GB,若虚拟机配置为32GB则无法启动。
  4. 检查存储池/网络:确认虚拟机关联的存储池是否已启动,网络配置是否正确(如NAT网络是否运行)。
  5. 尝试强制重启:若配置无问题,可尝试virsh undefine <vm_name>后重新定义虚拟机,或使用virsh reset <vm_name>强制重启虚拟机(可能导致数据丢失)。
分享:
扫描分享到社交APP
上一篇
下一篇