virt-install 默认不自动完成安装,因其仅启动虚拟机并挂载ISO,不接管安装程序内部逻辑;Ubuntu需autoinstall+cloud-init,CentOS/AlmaLinux需Kickstart,且须配合正确内核参数、安装源及系统初始化配置,否则易卡在GRUB或交互界面。

能,但“极速无人值守”不是加个 --noautoconsole 就完事——关键在安装源、引导参数和系统初始化三者的协同,否则卡在 grub 菜单或 installer 交互界面是常态。
为什么 virt-install 默认不自动完成安装?
因为绝大多数 ISO(如 Ubuntu Server、CentOS Stream)默认启动时进入交互式安装菜单,等待用户按 Enter 或选择语言/键盘等。virt-install 只负责启动虚拟机并挂载 ISO,不接管安装程序内部逻辑。
- 常见错误现象:
virt-install命令返回成功,virsh list显示虚拟机运行中,但virsh console <name></name>进去后卡在 grub 菜单或 “Install Ubuntu” 提示符不动 - 根本原因:缺少内核启动参数(kernel args),没告诉安装器跳过交互、走自动化流程
- ISO 类型决定方案:
ubuntu-22.04-live-server-amd64.iso支持autoinstall;CentOS-7-x86_64-DVD.iso需要ks=(Kickstart);AlmaLinux-9.4-x86_64-dvd.iso同样依赖inst.ks=
Ubuntu Server 22.04+ 的 autoinstall 方案
Live Server ISO 内置 cloud-init 支持,用 autoinstall 实现真无人值守——不用额外 HTTP 服务,把配置打包进 ISO 或通过 kernel 参数传入。
- 最简可行方式:用
--initrd-inject注入user-data和meta-data,再通过--extra-args指定启动参数 - 必须加的参数:
ds=nocloud-net;s=http://192.168.122.1/autoinstall/(若走 HTTP)或更稳妥的ds=nocloud;s=/cdrom/nocloud/(从 ISO 根目录读取) - 示例命令片段:
sudo virt-install \ --name ubuntu-auto \ --ram 2048 \ --vcpus 2 \ --disk size=30,bus=virtio \ --cdrom /var/lib/libvirt/images/ubuntu-22.04-live-server-amd64.iso \ --os-variant ubuntu22.04 \ --network network=default \ --graphics none \ --console pty,target_type=serial \ --initrd-inject ./user-data \ --initrd-inject ./meta-data \ --extra-args "console=tty1 ds=nocloud-net;s=http://192.168.122.1/autoinstall/ autoinstall"
- 注意:
user-data必须是有效的 YAML,且首行必须为#cloud-config;meta-data至少含instance-id: citrain-01,否则 cloud-init 不触发
CentOS/RHEL/AlmaLinux 的 Kickstart 方案
Kickstart 不依赖 cloud-init,但要求安装器能访问 ks 文件——可放本地 HTTP、NFS,或直接塞进 ISO(推荐),避免网络依赖。
- 关键参数组合:
--location替代--cdrom(用于网络源),或仍用--cdrom+--extra-args "inst.ks=file:/run/install/repo/ks.cfg"(从 ISO 内读) - 若 ks.cfg 在 ISO 根目录,需先用
isoinfo -l -i CentOS-7-x86_64-DVD.iso | grep ks.cfg确认路径;常见位置是/isolinux/或/ - 必须关闭图形安装:
--extra-args "inst.ks=file:/run/install/repo/ks.cfg inst.text inst.headless inst.sshd",否则仍可能弹出 GUI 安装器 - 性能影响:使用
--location(如http://mirror.almalinux.org/9.4/BaseOS/x86_64/os/)会拉取大量包,比挂 ISO 慢 3–5 分钟;但 ISO 方式需提前把 ks.cfg 打包进去,步骤略重
容易被忽略的三个硬性前提
即使参数全对,以下任一缺失都会导致“卡住”或“报错退出”,且错误信息极其隐晦(比如只显示 libvirtError: internal error: process exited while connecting to monitor)。
-
libvirtd必须运行且当前用户在libvirt组里:sudo usermod -aG libvirt $(whoami),改完要重新登录(不是newgrp) - 宿主机 BIOS 中 VT-x/AMD-V 必须启用,且内核没禁用 KVM:
lsmod | grep kvm应输出kvm_intel或kvm_amd;若为空,检查cat /proc/cpuinfo | grep vmx是否有结果 -
--disk路径所在文件系统要有足够空间,且 SELinux 不拦截(尤其在 CentOS/RHEL 上):sudo setsebool -P virt_use_nfs on或临时sudo setenforce 0排查


















