KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它将Linux内核转化为一个Type-1(裸金属) hypervisor,允许用户在单个物理服务器上运行多个虚拟机(VM),KVM的优势在于其高性能、与Linux内核的深度集成以及丰富的管理工具,以下是KVM常用命令的详细说明,涵盖虚拟机管理、网络配置、存储管理及性能监控等场景,并结合表格形式清晰展示命令格式与功能。

虚拟机管理命令
虚拟机的生命周期管理是KVM操作的核心,包括创建、启动、停止、删除及状态查询等。
-
虚拟机创建
使用virt-install命令可快速创建虚拟机,需指定镜像文件、内存大小、CPU核心数及磁盘路径等参数。virt-install --name vm1 --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/vm1.qcow2,size=20 --cdrom /path/to.iso --network network=default
该命令创建一个名为
vm1的虚拟机,分配2GB内存、2个vCPU、20GB磁盘,并从指定ISO文件启动,网络使用默认NAT模式。 -
虚拟机启动与关闭
(图片来源网络,侵删)- 启动虚拟机:
virsh start vm1 - 正常关闭虚拟机:
virsh shutdown vm1 - 强制关闭(模拟电源键):
virsh destroy vm1
- 启动虚拟机:
-
虚拟机状态管理
- 查看所有虚拟机状态(运行/关闭):
virsh list --all - 查看特定虚拟机详细信息:
virsh dominfo vm1 - 暂停虚拟机:
virsh suspend vm1 - 恢复暂停的虚拟机:
virsh resume vm1
- 查看所有虚拟机状态(运行/关闭):
-
虚拟机删除
删除虚拟机前需确保已关闭,使用virsh undefine命令会删除虚拟机配置但保留磁盘文件;若需同时删除磁盘,需手动执行rm命令。virsh shutdown vm1 virsh undefine vm1 rm /var/lib/libvirt/images/vm1.qcow2
虚拟机磁盘管理
磁盘文件是虚拟机的核心组件,KVM支持多种磁盘格式(如qcow2、raw),常用命令如下:
-
磁盘格式转换
使用qemu-img工具可转换磁盘格式,例如将raw格式转换为qcow2(支持快照、压缩等特性):
(图片来源网络,侵删)qemu-img convert -f raw -O qcow2 disk.raw disk.qcow2
-
磁盘扩容
扩容前需确保虚拟机内部文件系统支持在线扩容(如LVM或XFS),以下命令将磁盘扩容至30GB:qemu-img resize disk.qcow2 +10G # 在原有大小上增加10GB qemu-img resize disk.qcow2 30G # 直接设置为30GB
-
磁盘快照管理
快照可保存虚拟机某个时间点的状态,支持创建、列表、删除及恢复操作:virsh snapshot-create vm1 # 创建快照 virsh snapshot-list --domain vm1 # 列出快照 virsh snapshot-revert vm1 snap0 # 恢复至快照snap0 virsh snapshot-delete vm1 snap0 # 删除快照snap0
网络配置命令
KVM虚拟机网络通过libvirt的虚拟网络(如default NAT网络)或桥接模式实现。
-
查看虚拟网络
virsh net-list --all
-
启动/停止虚拟网络
virsh net-start default virsh net-destroy default
-
配置桥接网络
若需虚拟机直接与物理网络通信,需创建桥接接口(如br0),并修改虚拟机XML配置文件:virsh edit vm1 # 在<interface>标签中将type="network"改为type="bridge",source bridge="br0"
性能监控命令
监控虚拟机性能是确保稳定运行的关键,常用工具包括virt-top、virsh及qemu-img。
-
实时监控虚拟机资源
virt-top类似于top命令,可实时显示CPU、内存、I/O等使用情况:virt-top
-
查看虚拟机CPU/内存使用率
通过virsh命令可获取详细性能指标:virsh cpu-stats vm1 virsh memstats vm1
-
磁盘I/O监控
使用qemu-io测试磁盘读写性能:qemu-io -f qcow2 -c "read -v 1M 1G" disk.qcow2
常用命令速查表
| 功能分类 | 命令 | 说明 |
|---|---|---|
| 虚拟机创建 | virt-install | 创建并启动虚拟机 |
| 启动虚拟机 | virsh start vm1 | 启动指定虚拟机 |
| 关闭虚拟机 | virsh shutdown vm1 | 正常关闭虚拟机 |
| 强制关闭 | virsh destroy vm1 | 模拟电源键强制关闭 |
| 查看虚拟机列表 | virsh list --all | 列出所有虚拟机及其状态 |
| 删除虚拟机 | virsh undefine vm1 | 删除虚拟机配置(保留磁盘) |
| 磁盘格式转换 | qemu-img convert | 转换磁盘文件格式 |
| 磁盘扩容 | qemu-img resize | 调整磁盘大小 |
| 创建快照 | virsh snapshot-create vm1 | 为虚拟机创建快照 |
| 查看虚拟网络 | virsh net-list --all | 列出所有虚拟网络 |
| 启动虚拟网络 | virsh net-start default | 启动指定虚拟网络 |
| 实时性能监控 | virt-top | 监控虚拟机资源使用情况 |
相关问答FAQs
Q1: 如何解决虚拟机启动失败提示“domain vm1 failed to allocate memory”的问题?
A: 该错误通常是由于物理机内存不足或虚拟机内存配置过大导致,可通过以下步骤解决:
- 检查物理机内存使用情况:
free -h - 减少虚拟机内存分配:修改虚拟机XML文件(
virsh edit vm1),调整<memory>和<currentMemory>值,或使用virsh setmem vm1 --size 1024动态调整内存(需虚拟机运行中支持)。 - 若为KVM进程内存限制,可调整
/etc/libvirt/qemu.conf中的memory参数并重启libvirtd服务。
Q2: 虚拟机磁盘空间不足时,如何在线扩容并扩展文件系统?
A: 在线扩容需分两步完成:磁盘扩容和文件系统扩展,以Linux虚拟机为例:
- 磁盘扩容:在宿主机中使用
qemu-img resize命令扩容磁盘文件(如扩容至40GB):qemu-img resize /var/lib/libvirt/images/vm1.qcow2 40G
- 扩展文件系统:登录虚拟机内部,根据文件系统类型执行命令:
- ext4文件系统:
lsblk # 查看磁盘分区(如/dev/vda1) resize2fs /dev/vda1
- LVM逻辑卷:
lvextend -l +100%FREE /dev/vg_root/lv_root resize2fs /dev/vg_root/lv_root
- XFS文件系统:
xfs_growfs /
完成后执行
df -h验证文件系统是否扩容成功。
- ext4文件系统:
