Linux KVM 安装与配置方法

1次阅读

先检查cpu是否支持虚拟化(egrep -c ‘(vmx|svm)’ /proc/cpuinfo),再确认kvm模块是否加载(lsmod | grep kvm)及/dev/kvm权限,最后用virt-install创建最小vm验证环境。

Linux KVM 安装与配置方法

怎么确认宿主机支持 KVM

不查直接装,大概率遇到 KVM module not found/dev/kvm permission denied。先看 CPU 是否支持虚拟化扩展,再确认内核模块是否加载。

  • 运行 egrep -c '(vmx|svm)' /proc/cpuinfo:结果为 0 表示硬件不支持(Intel 是 vmx,AMD 是 svm),需进 BIOS 开启 VT-x/AMD-V
  • 运行 lsmod | grep kvm:应看到 kvm_intelkvm_amd,没输出说明模块未加载,可试 sudo modprobe kvm_intel(或 kvm_amd
  • 检查 /dev/kvm 是否存在且可读写:ls -l /dev/kvm;若权限不足,把当前用户加进 kvm 组:sudo usermod -aG kvm $USER,然后重新登录

用 virt-install 创建最小可用虚拟机

virt-install 是最轻量、最可控的命令行安装方式,比图形化工具更少隐藏行为,适合快速验证环境。

  • 基础命令要带 --import(已有磁盘镜像)或 --location(网络安装源),漏掉会卡在“no install media”
  • 内存和 CPU 建议显式指定:--memory 2048 --vcpus 2,否则默认值可能过低(如 512MB),导致安装过程卡死或无法启动图形界面
  • 磁盘路径必须是绝对路径,且目录需有写权限;用 --disk size=20 自动生成 qcow2 镜像时,宿主机剩余空间至少留 25GB,qcow2 写入放大比不可忽视
  • 示例(ubuntu Server 安装):virt-install --name ubuntu22 --ram 2048 --vcpus 2 --disk size=20 --os-variant ubuntu22.04 --location 'https://releases.ubuntu.com/22.04/ubuntu-22.04.4-live-server-amd64.iso' --graphics none --console pty,target_type=serial

libvirtd 权限和网络配置最容易出问题的地方

装完起不来、ssh 连不上、外网不通——八成卡在这两块。

  • libvirtd 默认只监听本地 socket,virsh list 报错 Failed to connect to the hypervisor 时,先运行 sudo systemctl status libvirtd 确认服务已启动
  • 网络选 default NAT 模式最省事,但该网络由 libvirtd 自动管理,若手动改过 /etc/network/interfaces 或开了 systemd-networkd,可能冲突导致 virbr0 消失,此时运行 sudo virsh net-start defaultsudo virsh net-autostart default
  • 如果要用桥接(bridge),别直接绑物理网卡到 br0,得用 nmclinetplan 配,否则重启后桥消失,guest 网络中断
  • 检查 guest 是否获取到 IP:virsh console <vm-name></vm-name> 登进去看 ip a;没地址就回宿主机查 sudo virsh net-dhcp-leases default

qcow2 镜像性能与快照的取舍

默认格式是 qcow2,灵活但不是万能解法,盲目依赖快照会拖慢 I/O,尤其在机械盘或高并发场景。

  • qcow2 支持压缩、加密、快照,但随机读写比 raw 慢 15–30%,数据库类负载建议用 --disk format=raw
  • 快照不是备份:它依赖原镜像文件,删了 base 镜像,所有快照全废;日常开发可快照,生产环境请用 virsh dumpxml + qemu-img convert 做离线克隆
  • 扩容磁盘不能只改 qcow2 文件大小,得进 guest 执行 growpartresize2fs(ext4)或 xfs_growfs(xfs),否则 df 看不到新空间
  • 清理快照残留:qemu-img snapshot -l <disk.img></disk.img> 查列表,qemu-img snapshot -d <name><disk.img></disk.img></name> 删除,别用 virsh snapshot-delete 对非 libvirt 管理的镜像操作

KVM 的麻烦点不在装,而在宿主机环境杂(NetworkManager、SElinux、cgroups v2、secure boot)和 guest 驱动缺失之间来回拉扯;动手前先跑通一个最小实例,比参数强。

text=ZqhQzanResources