Linux virt-manager 使用技巧

1次阅读

用 virt-install 一条命令启动 ubuntu 虚拟机需指定匹配的 –os-variant(如 ubuntu22.04)、绝对路径 iso、–network 和 –noautoconsole 等关键参数,否则易卡顿或无法联网。

Linux virt-manager 使用技巧

怎么用 virt-install 一条命令跑起 Ubuntu 虚拟机?

virt-install 是真正能“秒建”虚拟机的命令,图形界面点五六步的事,它一行搞定。但直接抄网上旧命令容易失败——比如用 ubuntu20.04 装 22.04 镜像,会卡在内核加载;又或者没加 --network,装完连不上网。

实操建议:

– 必须用匹配的 --os-variant:Ubuntu 22.04 用 ubuntu22.04,24.04 用 ubuntu24.04(查可用值: osinfo-query os | grep ubuntu) – ISO 路径必须是绝对路径,相对路径会静默失败 – 默认 NAT 网络够用,但想直连物理网段,得显式加 --network bridge=br0,model=virtio – 加 --noautoconsole 避免弹出黑窗口干扰脚本调用

virt-install --name ubuntu-test --ram 4096 --vcpus 2 --disk size=30,format=qcow2 --os-variant ubuntu22.04 --cdrom /home/user/ubuntu-22.04-live-server-amd64.iso --network network=default,model=virtio --graphics spice --noautoconsole

克隆虚拟机时,为什么磁盘文件没变小?

virt-clone 默认做的是完整克隆(full clone),即把原磁盘镜像整个复制一份,哪怕原镜像里删了 20G 文件,新镜像仍是满的。这不是 bug,是设计如此——链接克隆(--auto-clone)才共享基础镜像,但要求原虚拟机是“模板型”只读镜像。

常见错误现象:

– 克隆后发现空间占用翻倍,误以为工具出错 – 用 --auto-clone 但原虚拟机正在运行,报错 cannot clone active domain

实操建议:

– 模板机务必关机后再克隆,且磁盘用 qcow2 格式 + 启用 backing file – 若只想快速复制配置不复制磁盘,用 virt-xml 导出 XML,改名、改 UUID、改 MAC 后再 virsh define – 克隆后首次启动前,用 qemu-img resize 手动扩磁盘(如果需要)

不重启虚拟机,怎么把内存从 2G 改成 4G?

virt-xml 支持热修改部分配置,但内存不是“全都能热调”。KVM 下,只有启用了 memory balloon 或使用 virtio-mem 的虚拟机才能在线增减内存;普通静态分配内存,--edit --memory 4096 会直接失败并提示 operation not supported

为什么这样做:

– 热添加内存依赖 guest 内核支持 CONFIG_MEMORY_HOTPLUG(主流发行版默认开) – 必须先在 XML 中定义最大内存上限(maxMemory),否则即使热插也无处可插 – virt-xml 不检查 guest 是否已启用 balloon driver,改完可能白改

实操建议:

– 创建时就预留弹性:virt-install ... --memory 2048,maxmemory=8192 – Guest 中确认 balloon 已加载:lsmod | grep balloon – 真正生效要配合 virsh setmem 命令,virt-xml 只改定义,不触发动作

桥接网络配好了,但虚拟机拿不到 IP?

桥接(bridge)本身只是把虚拟网卡“插”进物理网桥,不等于自动获得 IP。很多人配完 br0 就以为万事大吉,结果 ip a 显示 link up 但 no carrier,或 DHCP 请求发出去没回应。

容易踩的坑:

– 宿主机网卡被加入 br0 后,原 eth0 不再配 IP,但忘了给 br0 自己配地址,导致宿主机失联 – 物理交换机端口未开启混杂模式(promiscuous mode),丢弃了虚拟机的广播包 – Guest 内核没加载 virtio_net 驱动,ip link 根本看不到网卡

实操建议:

– 桥接前先停掉 NetworkManager:sudo systemctl stop NetworkManager,它会和 libvirt 冲突 – 用 virsh net-dumpxml default 确认 NAT 网络是否还在运行,避免两个网络同时启用导致路由混乱 – Guest 中运行 dmesg | grep -i virtio,确认驱动加载成功,再查 dhclient -v eth0 是否能手动获取

复杂点在于:桥接不是开个开关就能通,它把虚拟机真正扔进了物理网络,意味着防火墙、交换机 ACL、DHCP 服务器策略全都开始起作用——而这些,virt-manager 图形界面一个都不管。

text=ZqhQzanResources