Linux 虚拟机管理命令是系统管理员和开发人员日常工作中不可或缺的工具,涵盖了虚拟机的创建、配置、启动、停止、迁移、监控等全生命周期操作,这些命令通常通过虚拟化平台(如 KVM、Xen、VMware)或管理工具(如 virsh、virt-manager、terraform)实现,以下将详细介绍常用命令及其应用场景。

在 Linux 环境中,KVM(Kernel-based Virtual Machine)是最流行的虚拟化技术之一,配合 libvirt 工具链可以实现高效的虚拟机管理,virsh 是 libvirt 提供的命令行工具,支持通过 XML 文件精确控制虚拟机配置。virsh list --all
用于查看所有虚拟机状态(运行中、关闭、暂停),输出包括虚拟机 ID、名称和状态三列信息,若需启动名为 vm1
的虚拟机,可执行 virsh start vm1
,停止则使用 virsh shutdown vm1
(优雅关机)或 virsh destroy vm1
(强制断电),对于已停止的虚拟机,可通过 virsh define vm1.xml
将其配置永久化,确保重启后虚拟机仍可被识别。
虚拟机的创建通常分为两种方式:基于镜像的快速部署和自定义配置安装,使用 virt-install
命令可以一站式完成虚拟机创建,virt-install --name=vm2 --ram=2048 --vcpus=2 --disk path=/var/lib/libvirt/images/vm2.img,size=20 --cdrom /path/to.iso --network bridge=virbr0
命令将创建一个 2GB 内存、2 核 CPU、20GB 磁盘并通过 NAT 模式联网的虚拟机,并从指定 ISO 文件安装系统,若需修改虚拟机配置,可通过 virsh edit vm2
进入 XML 配置界面调整参数,如增加磁盘(--disk path=/new_disk.img,size=10,bus=virtio
)或添加网卡(--network network=default
),对于磁盘管理,qemu-img
是核心工具,qemu-img create -f qcow2 vm3.img 30G
创建 30GB 的 qcow2 格式镜像,qemu-img info vm3.img
可查看磁盘详细信息,而 qemu-img convert -f qcow2 -O raw vm3.img vm3.raw
则可实现格式转换。
虚拟机迁移是资源调度和高可用性的关键操作,libvirt 支持冷迁移(虚拟机停止时迁移)和热迁移(运行中迁移),冷迁移通过 virsh migrate --live vm1 qemu+ssh://remote_host/system
实现,--live
参数确保迁移过程中虚拟机业务不中断,热迁移要求源主机和目标主机共享存储(如 NFS),且网络延迟低于 5ms,快照功能可用于备份或回滚,virsh snapshot-create-as vm1 snap1 --description "pre-update"
创建名为 snap1
的快照,virsh snapshot-revert vm1 snap1
可恢复到快照状态,virsh snapshot-delete vm1 snap1
则删除快照。
性能监控是确保虚拟机稳定运行的重要环节。virsh dominfo vm1
可查看虚拟机的基本信息(CPU 使用率、内存占用等),virsh cpu-stats vm1
实时显示 CPU 统计数据,对于磁盘 I/O 监控,iotop
或 dstat
命令能按进程/虚拟机统计读写速度,网络方面,virsh domiflist vm1
查看虚拟机网卡信息,结合 tcpdump
在网桥上抓包可分析网络流量,若需资源限制,可在 XML 配置中设置 <cputune>
和 <memtune>
节点,例如限制虚拟机最大内存使用量为 1GB。

以下是常用虚拟机管理命令的速查表:
功能分类 | 命令示例 | 说明 |
---|---|---|
查看虚拟机状态 | virsh list --all |
列出所有虚拟机及其状态 |
启动/停止虚拟机 | virsh start vm1 / virsh shutdown vm1 |
启动或优雅关机虚拟机 |
强制关闭虚拟机 | virsh destroy vm1 |
立即断电,可能导致数据丢失 |
定义虚拟机配置 | virsh define vm1.xml |
从 XML 文件创建或更新虚拟机配置 |
创建虚拟机 | virt-install --name=vm2 ... |
交互式或命令行创建虚拟机 |
编辑虚拟机配置 | virsh edit vm2 |
修改虚拟机的 XML 配置文件 |
管理磁盘镜像 | qemu-img create -f qcow2 vm3.img 30G |
创建指定格式和大小的磁盘镜像 |
创建快照 | virsh snapshot-create-as vm1 snap1 |
为虚拟机创建命名快照 |
恢复快照 | virsh snapshot-revert vm1 snap1 |
将虚拟机恢复到指定快照状态 |
热迁移虚拟机 | virsh migrate --live vm1 qemu+ssh://remote_host/system |
在线迁移虚拟机到远程主机 |
监控虚拟机资源 | virsh dominfo vm1 |
查看虚拟机的 CPU、内存等资源使用情况 |
相关问答 FAQs
问题 1:如何解决虚拟机启动失败提示 "domain vm1 already exists" 错误?
解答:该错误通常是因为虚拟机配置文件已存在但虚拟机实例未正确清理,可执行以下步骤解决:
- 使用
virsh list --all
检查虚拟机是否在运行状态,若运行则执行virsh destroy vm1
强制停止。 - 使用
virsh undefine vm1
删除虚拟机的配置文件(注意:此操作不会删除磁盘镜像)。 - 若需重新创建,可通过
virsh define vm1.xml
重新加载配置或使用virt-install
重新创建。 - 若问题仍存在,检查
/etc/libvirt/qemu/
目录下是否残留 vm1 的配置文件,手动删除后重启 libvirt 服务(systemctl restart libvirtd
)。
问题 2:虚拟机磁盘空间不足时,如何动态扩容磁盘并更新系统识别?
解答:动态扩容磁盘需分两步完成:磁盘扩容和系统分区识别。

- 磁盘扩容:使用
qemu-img resize
命令增加磁盘大小,qemu-img resize /var/lib/libvirt/images/vm1.img +20G
表示增加 20GB 空间。 - 系统分区识别:
- 对于 Windows 虚拟机:打开“磁盘管理”,初始化并扩展未分配空间。
- 对于 Linux 虚拟机:
- 使用
lsblk
或fdisk -l
查看新分区,/dev/vda
的大小已更新但分区未扩展。 - 执行
growpart /dev/vda 1
扩展主分区(假设分区号为 1)。 - 使用
resize2fs /dev/vda1
(ext4 文件系统)或xfs_growfs /
(XFS 文件系统)扩展文件系统。
- 使用
- 验证扩容结果:
df -h
查看文件系统容量是否已更新。
通过以上命令和操作,管理员可以高效管理 Linux 虚拟机的全生命周期,确保虚拟化环境的稳定性和资源利用率。