虚拟机创建命令有哪些常用参数及具体操作步骤?虚拟化平台命令行配置技巧

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镜像完整安装

适合需要自定义安装选项或首次搭建环境的情况。

  1. 使用qemu-img create创建磁盘镜像,如上面所述。
  2. 确认--os-variant的取值,使用osinfo-query os查看可用列表。
  3. 执行virt-install命令,添加--graphics vnc参数并后续用VNC客户端连接。
  4. 安装完成后,执行virsh list --all验证虚拟机状态为shut off。
  5. 用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即可。

不喜欢1

网友评论

猜你喜欢