虚拟机x命令(这里以最常用的virsh为例)是管理KVM虚拟机的核心工具,新手只要掌握开机、关机、快照和迁移几个基本参数,就能应对八成日常操作,但真正容易踩坑的其实是存储卷路径和网络配置。如果你刚接触Linux服务器虚拟化,面对一堆virsh指令感到迷茫,这篇指南会从零带你上手,并告诉你哪些错误多数新手都会犯。
虚拟机x命令新手教程:从查看到创建的基本操作
拿到一台装好KVM的服务器,第一件事不是急着创建虚拟机,而是先弄清楚当前环境里有什么,这里说的”虚拟机x命令”,在多数文档里对应的是virsh,它是libvirt的命令行管理工具,以下操作基于CentOS 7/8或Ubuntu Server 20.04以上版本,均通过SSH终端执行。
第一步:确认服务状态和虚拟机列表
- 运行
systemctl status libvirtd,看到active (running)表示服务正常,如果没启动,执行systemctl start libvirtd && systemctl enable libvirtd。 - 用
virsh list --all查看所有虚拟机,注意--all参数会显示已关闭的机器,而单独的virsh list只显示正在运行的。 - 想要查看CPU、内存等实时资源占用,用
virsh vcpuinfo <虚拟机名称>和virsh dominfo <虚拟机名称>,前者给出每个vCPU的详细信息,后者则是整体配置概览。
我第一次操作时,忘记加--all,以为虚拟机消失了,差点重装系统,这个坑几乎每个新手都会遇到。
第二步:创建虚拟机时最容易忽视的磁盘路径
创建虚拟机一般用virt-install命令,但很多人直接照抄网上的示例,结果在指定磁盘路径时翻车。
- 错误写法:
--disk path=/var/lib/libvirt/images/myserver.qcow2,size=20 - 正确做法:先确认目录存在且有权限。
ls -ld /var/lib/libvirt/images,如果没有该目录,用mkdir -p创建,并确保属主是root:root或libvirt-qemu。
更稳妥的方式是先用qemu-img create -f qcow2 /var/lib/libvirt/images/myserver.qcow2 20G创建磁盘文件,再在virt-install中引用该路径,这样能提前暴露权限问题,避免安装到一半报错。
第三步:常用生命周期命令的坑与技巧
- 关机:
virsh shutdown <名称>相当于按电源键,需要虚拟机内系统配合,如果系统卡死,只能virsh destroy <名称>强制断电,但慎用,可能损坏文件系统。 - 开机:
virsh start <名称> --console可以连上图形终端,不过很多云镜像默认不开放控制台,建议用SSH。 - 重启:
virsh reboot <名称>,这个命令会发送重启信号给虚拟机,比“先关再开”更安全。
记住一个原则:能用shutdown就不用destroy,就像电脑死机时你总是先按关机键,而不是拔电源。
虚拟机x命令避坑指南:网络与存储细节决定成败
很多新手能成功创建虚拟机,但一到网络配置就抓瞎,你以为virsh net-list显示default网络存在就能直接使用?实际上还有几个隐性坑。
网桥模式还是NAT模式?根据场景选择
- 默认的
virtual network走NAT,虚拟机可以上网,但外部设备无法直接访问虚拟机,适合测试环境。 - 生产环境建议用网桥模式,创建网桥需要修改网络配置文件,比如
/etc/sysconfig/network-scripts/ifcfg-br0,并将物理网卡加入桥接,然后通过virsh net-define和virsh net-start启用新网络。
行业共识认为,NAT模式下虚拟机对外提供服务时,端口转发规则极易配置错误,因为需要同时修改宿主机的iptables和libvirt的规则,如果你只是本地开发,用默认NAT完全够用;一旦涉及对外服务,直接改用网桥,少走弯路。
快照功能的隐藏限制
virsh snapshot-create-as是虚拟机备份常用命令,但快照不是万能的:
- 仅支持qcow2格式的磁盘,如果虚拟机磁盘是raw格式,需要先转换:
qemu-img convert -O qcow2 disk.raw disk.qcow2。 - 创建快照前应确保虚拟机内文件系统处于一致状态,可以在虚拟机里运行
sync,或者暂停虚拟机:virsh suspend <名称>,创建完再
virsh resume <名称>。 - 查看快照列表用
virsh snapshot-list <名称>,回滚用virsh snapshot-revert <名称> --current。
我见过有人给运行中的MySQL数据库做快照,恢复后数据丢失,因为内存中的数据还没落盘。快照不等于物理备份,它只记录磁盘在某时刻的状态。
迁移虚拟机的三个常见报错
本地迁移(同一宿主机)用virsh migrate <名称> qemu+ssh://目标主机/system,新手最容易遇到以下问题:
- SSH免密没配置好,执行迁移前,先测试
ssh root@目标主机能否无密码登录。 - 虚拟机配置中的磁盘路径在目标主机上不存在,迁移前确保目标机的
/var/lib/libvirt/images有对应空间和权限。 - 镜像文件没有共享存储,如果两个主机没有共享存储,迁移会带数据复制,速度较慢,且期间虚拟机不能有太多I/O操作。
业内专家指出,迁移前用virsh dumpxml <名称> > vm.xml导出配置,检查source file路径,能提前发现一半以上的问题。
虚拟机x命令怎么用才能少踩坑?这些参数必须牢记
与其到出问题时翻help,不如提前背下几个高频参数,以下内容比对man virsh更易读,覆盖了日常95%的操作。
必背参数速查表
| 功能 | 命令示例 | 注意事项 |
|---|---|---|
| 查看状态 | virsh list --all |
加--all才显示已关闭机器 |
| 强制关机 | virsh destroy <名称> |
慎用,相当于拔电源 |
| 挂起/恢复 | virsh suspend <名称> / resume |
挂起会占用内存和磁盘空间 |
| 导出配置 | virsh dumpxml <名称> > vm.xml |
可用于备份或迁移前检查 |
| 调整内存 | virsh setmem <名称> 2G --live |
--live表示即时生效,但有限制 |
|
设置自动启动 | virsh autostart <名称> | 宿主机重启后自动启动该虚拟机 |
其中setmem有个很多人不知道的坑:最大内存不能动态增加超过初始分配值,比如创建时指定4G内存,启动后最多只能调到4G,想增加到8G必须修改配置并重启虚拟机。
日志和排错:遇到报错怎么办
不要一输命令就盯着错误信息发呆,先看系统日志:
- 运行
journalctl -u libvirtd -f实时跟踪libvirtd服务日志。 - 大多数权限错误会在
/var/log/libvirt/qemu/下找到对应日志文件。
遇到“Permission denied”时,检查目录属主:chown -R root:root /var/lib/libvirt/images,或把当前用户加入libvirt组:usermod -aG libvirt $USER,然后重新登录会话。
关于虚拟机x命令的常见问题
虚拟机x命令和虚拟机平台管理工具有什么区别?
virsh是命令行工具,适合脚本化操作和远程管理;图形工具如virt-manager提供可视化界面,但对于批量创建、自动部署的场景,virsh明显更高效,两者的底层都是调用libvirt的API,功能等价,没有本质差异。
为什么我的virsh shutdown之后虚拟机没有反应?
这是因为虚拟机内没有安装ACPI服务,Linux系统需要开启acpid服务:systemctl enable acpid && systemctl start acpid,Windows虚拟机需要确保电源管理驱动正常,如果没有ACPI,shutdown命令无法被虚拟机系统识别,只能改用virsh destroy或进入系统内手动关机。
virsh快照文件存在哪里?如何手动删除?
快照信息存储在虚拟机的XML配置里,磁盘数据则嵌入qcow2文件内部,不会单独生成文件,删除快照用virsh snapshot-delete <名称> <快照名>,注意删除父快照会与子快照合并,耗时较长且需保证磁盘空间充足,删除前先用virsh snapshot-list <名称> --tree查看层级关系,避免误删,所有快照删除完成后,磁盘文件大小不会自动缩小,需要执行qemu-img convert -O qcow2 vm.qcow2 vm-compact.qcow2重新压缩。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/616330.html





