kvm与容器属不同层级技术:kvm是内核级全虚拟化,支持异构系统;容器共享宿主机内核,启动快但隔离弱、跨内核不兼容。

linux 虚拟化选 KVM 还是容器? KVM 和容器(如 docker)根本不是同一层技术,混用或互换会出问题。KVM 是内核级全虚拟化,能跑 windows、不同内核版本的 Linux;容器共享宿主机内核,启动快但隔离弱、跨内核不兼容。
– kvm-ok 命令必须返回 “KVM acceleration can be used” 才代表 CPU 支持并已启用 VT-x/AMD-V – 容器里再起 KVM 虚拟机(nested virtualization)需要显式开启:/sys/module/kvm_intel/parameters/nested 设为 Y,且 BIOS 中打开二级虚拟化 – 用 systemctl status libvirtd 确认服务在运行,否则 virt-install 会报 “connection refused”
libvirt 创建虚拟机时网络不通? 默认 default NAT 网络看似自动配置好,但实际只对 libvirt 管理的 VM 生效,宿主机上 virbr0 的 iptables 规则容易被其他工具(比如 Docker、firewalld)清掉或冲突。
– 检查网桥状态:ip link show virbr0,如果不存在或 down,执行 virsh net-start default – 宿主机 ping 不通 VM:确认 virsh net-dhcp-leases default 返回了正确 IP,再看 iptables -t nat -L POSTROUTING 是否有 MASQUERADE 规则 – 想让 VM 直接暴露在物理网段?别硬改 default 网络,新建 bridge 类型网络,绑定到 ens33 这类真实网卡,否则可能断连
qemu-img convert 转换镜像失败常见原因qemu-img convert 看似简单,但格式、权限、空间三者任一出错都会卡住或生成损坏镜像。
– 错误信息 “Failed to get shared memory for live migration” 实际和转换无关,是目标路径所在文件系统不支持 O_DIRECT(比如某些 NFS 或 overlayfs),加 -T none 绕过缓存 – 从 qcow2 转 raw 后变大?正常——qcow2 是稀疏格式,raw 是全量写入,用 du -h 看实际占用,别只看 ls -lh – 转换中途断电或 kill,残留的半成品镜像不能直接用,qemu-img check -f raw xxx.img 会报 “Image is corrupt”,删掉重来
virsh console 连不上 centos 7/8 虚拟机? 这不是串口没开,而是系统内核参数和 getty 服务都没配对。libvirt 默认开了串口设备,但 guest 里没告诉内核把输出打到 ttyS0,也没启动对应终端服务。
– 在 /etc/default/grub 里追加:console=ttyS0,115200n8 到 GRUB_CMDLINE_LINUX,然后 grub2-mkconfig -o /boot/grub2/grub.cfg – 确保 systemctl status serial-getty@ttyS0.service 是 active,否则手动 systemctl enable serial-getty@ttyS0.service – 连接前先 virsh start vmname,再 virsh console vmname,如果卡在 “Connected to domain xxx”,说明 guest 内核没输出,回头检查 grub 参数
KVM 虚拟化里最麻烦的从来不是装不上,而是“看起来跑起来了,但网络不通、控制台黑屏、磁盘莫名只读”——这些基本都卡在宿主和 guest 两侧的配置没对齐,而不是功能本身失效。