新手通过命令行创建libvirt虚拟机,最直接的一条路是:先确认CPU支持虚拟化,安装libvirt和virtinst包,然后用virt-install命令指定镜像、内存、CPU和磁盘,最后用virsh list查看运行状态。 我见过不少刚接触KVM的人一上来就抄XML模板,结果连Windows和Linux的引导参数都分不清,实际从virt-install入手会轻松很多,等你能熟练用virsh管理一台机器后,再去看XML定义也不迟。
linux命令行创建虚拟机步骤:先从环境准备开始
命令行创建虚拟机最容易忽略的是宿主机环境,很多时候你执行virt-install报“kvm不可用”或“no supported architecture”,不是命令写错了,而是底层没准备好。
检查CPU虚拟化标志和KVM模块
虚拟化技术依赖CPU指令集,Intel对应vmx,AMD对应svm,先用这个命令看看:
grep -E --color '(vmx|svm)' /proc/cpuinfo
如果没有任何输出,说明BIOS里没开虚拟化,或者用的云服务器不支持嵌套虚拟化,多数情况下,物理机服务器默认开启,但部分品牌机需要进BIOS设置,开启后再看下面一步。
接着确认KVM模块是否已经加载:
lsmod | grep kvm
出现了kvm_intel或kvm_amd就说明模块已经在内核里了,如果没有,手动加载:
modprobe kvm_intel # Intel CPU modprobe kvm_amd # AMD CPU
加载后把模块写入开机加载配置文件,避免重启后失效,这一步做好,后面创建虚拟机就不会因为“权限不足”或“不支持KVM”卡壳。
centos7安装kvm虚拟机命令:装齐这三个包
业内专家指出,libvirt是目前管理多种虚拟化后端的事实标准API,在CentOS 7上,你不需要从源码编译,用yum就能安装完整工具链,打开终端,执行:
yum install -y qemu-kvm libvirt virt-install bridge-utils
- qemu-kvm提供KVM后端,负责CPU和内存的模拟。
- libvirt提供统一管理API和virsh命令行工具。
- virt-install命令行创建虚拟机的主力工具,自动生成XML。
- bridge-utils用于创建和管理虚拟网桥,虚拟机网络通常依赖它。
如果用的Ubuntu或Debian,包名略有不同,比如qemu-kvm和libvirt-daemon-system,但作用一样,这里以CentOS 7作为场景,命令自成一派。
安装完成后启动libvirtd服务:
systemctl start libvirtd systemctl enable libvirtd systemctl status libvirtd

确保状态是active (running),另外可以用virsh version快速验证libvirt是否正常识别到QEMU驱动。
使用virt-install创建虚拟机全过程:一条命令完成九成工作
环境就绪后,不需要急着写XML,virt-install会把镜像、磁盘、网络、控制台全部串起来,你只需要准备好一个ISO镜像和存放磁盘的目录。
准备ISO镜像和虚拟机磁盘目录
建议把镜像专门放一个目录管理,
mkdir -p /data/iso mkdir -p /data/vm-images
把CentOS 7或Ubuntu的ISO文件上传到/data/iso/,磁盘目录保持独立,后面创建多台虚拟机时不会乱。
一行virt-install命令的核心参数拆解
以创建一台CentOS 7虚拟机为例:
virt-install --name centos7-test --memory 2048 --vcpus 2 --disk path=/data/vm-images/centos7-test.qcow2,size=20,format=qcow2 --cdrom /data/iso/CentOS-7-x86_64-Minimal-2009.iso --os-variant centos7.0 --network bridge=virbr0 --graphics none --console pty,target_type=serial
每条参数都对应虚拟机的核心配置:
- –name 虚拟机名称,后面用virsh管理时都靠它区分。
- –memory 2048 分配2GB内存,单位是MiB,所以2048就是2GB。
- –vcpus 2 分配2个虚拟CPU核心。
- –disk path=… 指定磁盘路径,如果文件不存在,virt-install会自动创建qcow2格式镜像,
size=20表示初始容量20GB。 - –cdrom 指定安装镜像ISO路径。
- –os-variant 提供操作系统类型优化,可以用
osinfo-query os查看当前virsh支持的变体列表,不确定时直接写centos7.0或linux2016,别写错导致默认跑IDE模式。 - –network bridge=virbr0 连接到默认虚拟网桥,libvirt安装后会自动创建一个名为virbr0的NAT网桥。
- –graphics none –console pty,target_type=serial 无图形界面,通过串口控制台交互,如果你在本地有VNC客户端,也可以去掉这两行并指定
--vnc。
执行后,系统会进入安装引导界面,和物理机安装几乎没有区别,如果你是纯SSH连接,看到“Starting installer”后依然能通过串口完成所有交互。
创建完成后用virsh list检查状态
安装过程结束后,回到宿主机命令行,用:
virsh list --all
里面对应centos7-test的状态应该变成shut off或running,如果安装过程中你没有自动重启,就手动启动:

virsh start centos7-test
之后用virsh console centos7-test进入虚拟机控制台,注意串口控制台使用Ctrl+]退出。
virsh创建虚拟机命令行示例:手动定义XML的进阶操作
virt-install足够覆盖多数场景,但当你需要精确控制设备顺序、自定义CPU拓扑、或从线上环境复制一台虚拟机时,手写domain XML才是正路,virsh把你的XML翻译成QEMU参数,过程透明得多。
一个最小可用的domain XML长什么样
以下是一个能启动的最小XML文件,先创建磁盘镜像:
qemu-img create -f qcow2 /data/vm-images/manual-vm.qcow2 10G
然后新建manual-vm.xml:
<domain type='kvm'>
<name>manual-vm</name>
<memory>2097152</memory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<devices>
<disk type='file' device='disk'>
<source file='/data/vm-images/manual-vm.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='virbr0'/>
</interface>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
最关键的三处:
<name>唯一标识虚拟机名称。<memory>单位是KiB,所以2097152 KiB等于2GiB。<disk>中target dev='vda'表示virtio磁盘,不能写成sda,否则在部分系统里无法识别引导设备。
通过virsh define导入并启动
手写XML不直接启动虚拟机,而是先定义:
virsh define /path/to/manual-vm.xml
执行后,libvirt把XML复制到/etc/libvirt/qemu/目录,然后再启动:
virsh start manual-vm
如果想验证XML语法是否正确,可以先用:
virsh define --validate manual-vm.xml
如果全部通过,再用virsh list --all看到新加的虚拟机。
virt-install与virsh define的对比
行业共识认为,virt-install更重视易用性,而virsh define更重视透明性,两者不是互斥的,virt-install在最后阶段生成的XML也可以导出留档:
virsh dumpxml centos7-test > backup.xml
| 维度 | virt-install | virsh define + start |
|---|---|---|
| 学习曲线 | 低,命令参数即需求 | 高,需要理解XML结构 |
| 创建速度 | 快,一条命令完成 | 慢,手写或粘贴模板 |
| 适用场景 | 快速部署、批量创建 | 精细控制、从模板复制 |
| 自动化友好度 | 高,适合脚本循环 | 中等,需要额外维护XML文件 |
| 错误排查 | 参数错误容易定位 | 语法错误需要逐行检查 |
新手建议先用virt-install跑通流程,再在遇到特殊需求时转向XML,两条路最终都能创建libvirt虚拟机。
libvirt创建虚拟机命令行常见问题解答
创建时报错“no supported architecture”怎么处理?
这个错误通常出现在手写XML时指定了宿主机不支持的machine类型或arch,先用virsh capabilities查看当前libvirt支持哪些arch和machine,如果输出里没有x86_64,说明qemu-system-x86包没装好,另外确认XML的<type arch='x86_64' machine='pc'>与宿主机架构一致,多数情况下,重新安装qemu-kvm并重启libvirtd就能解决。
用命令行创建的虚拟机如何设置固定IP?
virt-install时如果不指定网络,默认走virbr0的NAT,IP由内置的DHCP分配,要固定IP,进虚拟机系统内部修改网络配置,CentOS 7改/etc/sysconfig/network-scripts/ifcfg-eth0,把BOOTPROTO改为static并写入IP、网关和DNS;Ubuntu则改/etc/netplan/.yaml,宿主机侧用virsh domifaddr 虚拟机名查看当前分配的IP,再配合静态地址保证重启不变。
磁盘空间不足时如何扩展qcow2镜像?
先关闭虚拟机,执行:
qemu-img resize /data/vm-images/manual-vm.qcow2 +20G
然后启动虚拟机,进入系统后用lsblk看到磁盘容量已变大,但分区还没扩展,CentOS下用growpart /dev/vda 1扩展分区,再xfs_growfs /或resize2fs /dev/vda1完成文件系统在线增长,注意raw格式镜像也可以用同样的qemu-img resize方法,但部分老版本不支持shrinking,扩容前先备份镜像。
就是从零开始用命令行创建libvirt虚拟机的最短路径,把环境检查、virt-install、virsh管理这三步跑通,你就已经能应对多数日常创建任务了,之后再逐步接触XML定义,会让你的虚拟化运维能力更上一层楼。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/912294.html


评论列表(4条)
读了这篇文章,我深有感触。作者对分配的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
@brave544love:读了这篇文章,我深有感触。作者对分配的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是分配部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对分配的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!