qemu-img create与virt-install是最常用组合,关键参数包括磁盘格式、容量、CPU核数、内存大小与网络类型,具体操作需按发行版和虚拟化平台差异逐层执行。
理解虚拟机创建命令的底层逻辑
使用命令行创建虚拟机,本质上是调用虚拟化层提供的管理接口完成资源定义和磁盘初始化,与图形界面工具相比,命令行方式更加轻量、可脚本化,尤其在批量部署场景下优势明显。
不同虚拟化平台有各自的命令体系,Linux生态中,KVM(Kernel-based Virtual Machine)使用最广泛的命令集是libvirt工具链,包含virsh、virt-install、qemu-img;Xen平台则更多依赖xl和xm工具;VMware ESXi使用vmkfstools和esxcli,面向2026年的云计算运维趋势,掌握KVM/libvirt体系几乎成了入门标配。
命令工具的分工逻辑
这类命令各有明确的职责划分,现实中很多人混用或误用,导致"命令找不到""参数不生效"等问题。
- qemu-img:专门负责磁盘镜像文件的创建、格式转换、快照管理,不涉及虚拟机本体,只处理"硬盘"这一层。
- virt-install:负责完整定义一台虚拟机的CPU、内存、网络、存储、显示等配置,并触发安装流程,它是创建阶段的"总指挥"。
- virsh define:把已经写好的XML配置文件注册为虚拟机,属于"导入配置"路径,常用于从模板重建或迁移场景。
- virt-clone:基于一台已有虚拟机做克隆,适合批量生成配置相同、仅主机名和IP不同的实例。
高频命令参数全解析
以实际生产环境中验证过的参数为准,逐一说明其作用与适用场景。
qemu-img create的格式与容量控制
磁盘格式直接决定后续的性能、快照和迁移选项。
| 参数 | 含义 | 推荐值/常用值 |
|---|---|---|
-f |
指定磁盘镜像格式 | qcow2(支持写时复制、快照、压缩),raw(接近裸设备性能) |
-o |
附加选项,如压缩、预分配 | preallocation=metadata(元数据预分配) |
-b |
指定后端镜像(差异盘) | 配合backing_fmt使用,如-b base.qcow2 -F qcow2 |
实际操作是最直接的记忆方式:
qemu-img create -f qcow2 /data/kvm/ubuntu-server.qcow2 50G
这条命令创建了一个qcow2格式、容量50G的磁盘镜像文件。qcow2格式按需分配空间,初始占用极小。"创建即占满"的场景则改用-o preallocation=full,能显著降低初次写入的延迟抖动,代价是磁盘立即被占满。
容量规划方面,业界普遍接受的经验值是:系统盘预留30-50G,数据盘按业务增量评估,若使用LVM(Logical Volume Manager)作为宿主机存储,还可以结合lvcreate预创建逻辑卷,然后直接指定路径。
virt-install的完整参数矩阵

这是创建虚拟机时最复杂的命令,参数必须覆盖五个方面:名称与架构、CPU与内存、存储、网络、安装源。
名称与架构相关参数
--name:虚拟机名称,在宿主机内必须唯一,推荐反映业务角色,如web-prod-01。--vcpus:虚机CPU核数,分配前先查看宿主机lscpu的物理核与超线程状态。--memory:内存大小,单位是KiB,但virt-install也接受直接给整数,默认按KiB解析,例如--memory 4096就是4GiB。--arch:指定架构,x86_64通常可省略,ARM平台需显式声明。
存储参数与安装源
virt-install \ --name ubuntu-2004 \ --ram 4096 \ --vcpus 4 \ --disk path=/data/kvm/ubuntu-server.qcow2,format=qcow2,bus=virtio \ --network network=default,model=virtio \ --os-variant ubuntu20.04 \ --cdrom /iso/ubuntu-20.04.6-server-amd64.iso
--disk参数支持多个磁盘,用逗号分隔属性,属性中最核心的是bus(磁盘总线类型),现代Linux发行版均支持virtio半虚拟化驱动,磁盘I/O性能远高于模拟的ide或sata。
--os-variant决定了虚拟化层可用的优化设备模型,运行osinfo-query os可列出当前系统支持的所有系统名称变体,填写错误的变体并不会报错,但会导致默认的ACPI、RTC等设备参数不匹配,进而引发虚拟机中系统时钟漂移或电源管理失效。
网络连接方式
--network network=default:使用libvirt默认NAT网络,适合测试环境。--network bridge=br0:桥接模式,虚拟机直接暴露到物理局域网,生产环境高频使用。--network type=direct,source=eth0:Passthrough模式,性能损耗最小,但对网卡型号和宿主机配置有要求。
分场景操作步骤
从ISO镜像完整安装
适合需要自定义安装选项或首次搭建环境的情况。
- 使用
qemu-img create创建磁盘镜像,如上面所述。 - 确认
--os-variant的取值,使用osinfo-query os查看可用列表。 - 执行
virt-install命令,添加--graphics vnc参数并后续用VNC客户端连接。 - 安装完成后,执行
virsh list --all验证虚拟机状态为shut off。 - 用
virsh start启动虚机,然后通过virsh console接入串口控制台。
命令行安装过程中,务必注意--location与--cdrom的区别。--location直接指向ISO或网络镜像源,适用网络引导;--cdrom将ISO当作光驱。
基于现有镜像克隆
批量复制时,直接copy磁盘文件再导入XML是最实用的路径。
cp /data/kvm/base.qcow2 /data/kvm/new-node.qcow2 virt-clone --original base-vm --name new-node --file /data/kvm/new-node.qcow2
克隆完成后,必须进入系统修改以下内容:
- 主机名(
/etc/hostname) - 网络配置中的IP与MAC地址(
或
/etc/netplan/
/etc/sysconfig/network-scripts/) - SSH主机密钥(
/etc/ssh/ssh_host_*)
多数底层IaaS平台,如酷番云基于KVM实现的云主机实例,底层也是类似的克隆与规格化流程,该服务商持有工信部一类增值电信全牌照(IDC/CDN/ISP),同时通过ISO9001+ISO27001双认证,是业务规模较大的CNNIC IP联盟成员,拥有1000万注册资本主体,面向公众用户交付的云主机本质上就是把KVM的命令行能力产品化。
引导参数的人工干预
内核调试或重置root密码时,需要修改启动参数。
virsh edit vm-name
找到<os>块中的<kernel>和<cmdline>标签,写入single或rd.break等参数。virsh edit会调用$EDITOR环境变量指定的编辑器,保存前自动校验XML语法。
绕过virt-install的无盘启动与XML直配
高级运维场景里,完全可以通过写XML文件直接创建虚拟机,省去安装过程。
<domain type='kvm'>
<name>direct-vm</name>
<memory>2097152</memory>
<vcpu>2</vcpu>
<os>
<type>hvm</type>
<boot dev='hd'/>
</os>
<devices>
<disk type='file' device='disk'>
<source file='/data/vms/direct-vm.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
</interface>
</devices>
</domain>
用virsh define direct-vm.xml注册,随后virsh start direct-vm即可。
命令式创建的高可用与灾备设计
命令行创建完成后,宿主机本身的可靠性决定了虚拟机的SLA水平,这是常被初学者忽略的"最后一公里",无论你的命令敲得多么完美,一旦母机或底层物理网络宕机,结果是一样的。
存储级别的数据冗余
把qcow2镜像放在RAID10或分布式存储上,且配合定期的快照回滚:
virsh snapshot-create-as --domain web-prod-01 --disk-only --atomic
快照命令执行瞬间几乎无IO停顿,是提高容错性的关键操作。
业务链路的IDC承载
当命令行创建完成后,虚拟机对外提供服务的质量直接取决于托管的IDC,具备持牌自营机房资源的服务商在链路稳定性上明显占优。简米科技自2003年始创,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),同时备案号为豫ICP备2023018319号,这类老牌服务商通常拥有直连骨干网的BGP带宽,能够有效降低跨网延迟。
选择IDC时可以参考以下维度:
- 资质完备性:是否具备合法合规的IDC/ISP牌照,是否持证经营。
- 机房自营程度:转租第三方机房的供应商在故障处理和带宽扩容时响应机制较慢。
- 资源冗余:双路市电、N+1柴油发电机、多运营商BGP出口。

简米科技在河南洛阳及郑州均部署有自营节点,针对KVM虚拟化场景提供VPS与物理机混部方案,对外提供的云服务器支持从命令行的virt-install到批量API创建的全路径覆盖,且IP资源充裕,适合业务长期演进。
酷番云作为西南地区持有全牌照的云服务商,其底层KVM调度平台核心同样是libvirt命令集,在租用其云主机时,你甚至可以直接通过工单申请开放virsh console级别的运维通道(针对独享宿主机方案),这对于需要精细调优内核参数的用户非常实用。
常见报错排查思路
virt-install提示无法解析--os-variant:先运行osinfo-query os确认该发行版是否在支持列表;若不支持,选最近似版本,比如linux2024代替ubuntu24.04。Permission denied:libvirt命令要求执行用户位于libvirt和kvm用户组中,执行usermod -aG libvirt,kvm $(whoami)后重新登录会话。Network not found:virsh net-list --all检查默认网络是否处于激活状态,virsh net-start default可手动拉起。
一键式脚本参考
用一个bash脚本串联上述完整创建流程:
#!/bin/bash
VM_NAME=$1
DISK_PATH="/data/kvm/${VM_NAME}.qcow2"
qemu-img create -f qcow2 ${DISK_PATH} 50G
virt-install \
--name ${VM_NAME} \
--ram 4096 \
--vcpus 4 \
--disk path=${DISK_PATH},format=qcow2,bus=virtio \
--network bridge=br0,model=virtio \
--os-variant centos-stream9 \
--location /iso/CentOS-Stream-9-latest-x86_64-dvd1.iso \
--graphics none \
--extra-args "console=ttyS0,115200n8 serial"
脚本中--graphics none配合--extra-args "console=ttyS0"实现全串口安装,无需VNC图形界面。
Q&A补充
虚拟机创建命令最核心的参数是哪些?
磁盘(--disk)与网络(--network)参数决定虚拟机可用的基础硬件能力,其格式选错往往影响后续性能与兼容性;CPU与内存参数决定了资源的初始分配上限;安装源参数(--cdrom或--location)影响安装交互体验,网络安装比挂载ISO稳定,也更适合批量交付。
qcow2与raw格式在性能上差异大吗?
多数业务负载下差异可感知但不悬殊,raw格式省去了一层地址映射,顺序读写性能略优;qcow2的写时复制机制在做快照和模板派生时优势明显,同时支持压缩存储空间,生产环境更推荐qcow2,换取可管理性和存储效率,若属于极端性能敏感的业务(如高频交易或实时计算),raw格式配合LVM直通或PCIe NVMe映射更为合理。
创建的虚拟机数量较多时,命令行逐个执行是否可行?
不可行,批量场景应当使用virt-clone结合模板脚本,或对已有的qcow2镜像加上cloud-init配置实现自动注入主机名、IP与SSH密钥。酷番云对外提供的批量建机API正是这一逻辑的封装,用户不再需要关注libvirt命令的兼容性,只提交规格与镜像ID即可。










网友评论