跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    KVM/libvirt 虚拟化

    在安装 KVM 之前,必须确认 CPU 支持硬件虚拟化(Intel VT-x 或 AMD-V)。

    Terminal window
    # 检查 CPU 是否支持虚拟化扩展
    grep -Ec '(vmx|svm)' /proc/cpuinfo

    如果返回值大于 0,说明 CPU 支持虚拟化。

    Terminal window
    # 检查 KVM 内核模块是否已加载
    lsmod | grep kvm

    正常应看到 kvm 和 kvm_intel(Intel CPU)或 kvm_amd(AMD CPU)。

    Terminal window
    sudo dnf install -y qemu-kvm libvirt virt-install virt-viewer \
    libvirt-client
    # bridge-utils(brctl)自 EL8 起已弃用;下面用 nmcli 建桥,不需要它

    如果需要图形化管理工具:

    Terminal window
    sudo dnf install -y virt-manager
    Terminal window
    sudo systemctl enable --now libvirtd

    验证:

    Terminal window
    sudo systemctl status libvirtd
    virsh version
    Terminal window
    sudo usermod -aG libvirt $(whoami)

    重新登录后生效,之后可以以普通用户身份使用 virsh 连接系统级虚拟机。

    virsh 是 libvirt 的命令行管理工具,用于管理虚拟机的完整生命周期。

    Terminal window
    # 列出正在运行的虚拟机
    virsh list
    # 列出所有虚拟机(包括关闭的)
    virsh list --all
    # 启动虚拟机
    virsh start myvm
    # 正常关机
    virsh shutdown myvm
    # 强制关闭(相当于拔电源)
    virsh destroy myvm
    # 重启虚拟机
    virsh reboot myvm
    # 暂停/恢复虚拟机
    virsh suspend myvm
    virsh resume myvm
    Terminal window
    # 查看虚拟机详情
    virsh dominfo myvm
    # 查看虚拟机 XML 配置
    virsh dumpxml myvm
    # 查看虚拟机 VNC 显示地址
    virsh vncdisplay myvm
    # 查看虚拟机使用的磁盘
    virsh domblklist myvm
    # 查看虚拟机网络接口
    virsh domiflist myvm
    Terminal window
    # 编辑虚拟机 XML 配置
    virsh edit myvm
    # 设置开机自启
    virsh autostart myvm
    # 取消开机自启
    virsh autostart --disable myvm
    # 修改虚拟机内存(需要关机状态)
    virsh setmaxmem myvm 4G --config
    virsh setmem myvm 4G --config
    # 修改 vCPU 数量(需要关机状态)
    virsh setvcpus myvm 4 --config --maximum
    virsh setvcpus myvm 4 --config
    Terminal window
    sudo virt-install \
    --name almalinux9 \
    --ram 2048 \
    --vcpus 2 \
    --disk path=/var/lib/libvirt/images/almalinux9.qcow2,size=20,format=qcow2 \
    --os-variant almalinux9 \
    --network network=default \
    --graphics vnc,listen=0.0.0.0 \
    --cdrom /data/iso/AlmaLinux-9-latest-x86_64-minimal.iso \
    --boot uefi
    Terminal window
    sudo virt-install \
    --name almalinux9-auto \
    --ram 2048 \
    --vcpus 2 \
    --disk path=/var/lib/libvirt/images/alma9-auto.qcow2,size=20,format=qcow2 \
    --os-variant almalinux9 \
    --network network=default \
    --graphics none \
    --location /data/iso/AlmaLinux-9-latest-x86_64-minimal.iso \
    --initrd-inject /data/ks/alma9-ks.cfg \
    --extra-args "inst.ks=file:/alma9-ks.cfg console=ttyS0"
    Terminal window
    # 下载云镜像
    wget https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2
    # 复制并调整磁盘大小
    cp AlmaLinux-9-GenericCloud-latest.x86_64.qcow2 /var/lib/libvirt/images/myvm.qcow2
    qemu-img resize /var/lib/libvirt/images/myvm.qcow2 20G
    # 使用 cloud-init 配置创建虚拟机
    sudo virt-install \
    --name myvm \
    --ram 2048 \
    --vcpus 2 \
    --disk /var/lib/libvirt/images/myvm.qcow2 \
    --os-variant almalinux9 \
    --network network=default \
    --import \
    --cloud-init root-password-generate=on,disable=on \
    --graphics none
    Terminal window
    # 创建快照
    virsh snapshot-create-as myvm --name "before-update" --description "系统更新前"
    # 列出快照
    virsh snapshot-list myvm
    # 恢复快照
    virsh snapshot-revert myvm --snapshotname "before-update"
    # 删除快照
    virsh snapshot-delete myvm --snapshotname "before-update"
    Terminal window
    # 创建新磁盘
    qemu-img create -f qcow2 /var/lib/libvirt/images/data-disk.qcow2 50G
    # 在线添加磁盘到虚拟机
    virsh attach-disk myvm /var/lib/libvirt/images/data-disk.qcow2 vdb \
    --driver qemu --subdriver qcow2 --persistent
    # 查看磁盘信息
    qemu-img info /var/lib/libvirt/images/myvm.qcow2
    # 卸载磁盘
    virsh detach-disk myvm vdb --persistent
    Terminal window
    # 先关闭源虚拟机
    virsh shutdown myvm
    # 克隆
    virt-clone --original myvm --name myvm-clone \
    --file /var/lib/libvirt/images/myvm-clone.qcow2
    Terminal window
    # 关闭虚拟机
    virsh destroy myvm
    # 删除虚拟机定义
    virsh undefine myvm
    # 连同磁盘一起删除
    virsh undefine myvm --remove-all-storage

    virt-manager 提供了图形化的虚拟机管理界面。

    直接在桌面环境中启动:

    Terminal window
    virt-manager

    在本地工作站上连接远程服务器的 libvirt:

    Terminal window
    virt-manager -c qemu+ssh://[email protected]/system

    或者在 virt-manager 界面中选择”文件 > 添加连接”,选择 QEMU/KVM,勾选”通过 SSH 连接到远程主机”。

    libvirt 默认创建一个名为 default 的 NAT 网络(通常是 192.168.122.0/24)。

    Terminal window
    # 查看网络列表
    virsh net-list --all
    # 查看网络详情
    virsh net-info default
    # 启动默认网络
    virsh net-start default
    # 设置默认网络开机自启
    virsh net-autostart default

    桥接网络让虚拟机直接接入物理网络,获取与宿主机同一网段的 IP 地址。

    1. 使用 nmcli 创建网桥:

      Terminal window
      # 创建网桥 br0
      sudo nmcli connection add type bridge con-name br0 ifname br0
      # 配置网桥 IP(根据你的网络环境修改)
      sudo nmcli connection modify br0 \
      ipv4.addresses 192.168.1.100/24 \
      ipv4.gateway 192.168.1.1 \
      ipv4.dns "223.5.5.5,8.8.8.8" \
      ipv4.method manual
      # 将物理网卡加入网桥
      sudo nmcli connection add type bridge-slave con-name br0-ens192 \
      ifname ens192 master br0
      # 激活网桥(注意:远程操作时可能断开连接)
      sudo nmcli connection up br0
      sudo nmcli connection down ens192
    2. 创建 libvirt 桥接网络定义文件 /tmp/bridge-net.xml:

      <network>
      <name>host-bridge</name>
      <forward mode="bridge"/>
      <bridge name="br0"/>
      </network>
    3. 在 libvirt 中注册桥接网络:

      Terminal window
      virsh net-define /tmp/bridge-net.xml
      virsh net-start host-bridge
      virsh net-autostart host-bridge
    4. 创建虚拟机时使用桥接网络:

      Terminal window
      sudo virt-install \
      --name bridged-vm \
      --ram 2048 \
      --vcpus 2 \
      --disk path=/var/lib/libvirt/images/bridged-vm.qcow2,size=20 \
      --os-variant almalinux9 \
      --network network=host-bridge \
      --cdrom /data/iso/AlmaLinux-9-latest-x86_64-minimal.iso
    Terminal window
    # 关闭虚拟机
    virsh shutdown myvm
    # 编辑虚拟机配置
    virsh edit myvm

    在 XML 中找到 <interface> 部分,修改为:

    <interface type='network'>
    <source network='host-bridge'/>
    <model type='virtio'/>
    </interface>

    启动虚拟机:

    Terminal window
    virsh start myvm
    Terminal window
    # 启用 KSM(内核同页合并)以节省内存
    sudo systemctl enable --now ksm
    sudo systemctl enable --now ksmtuned
    # 查看 KSM 状态
    cat /sys/kernel/mm/ksm/pages_shared

    虚拟机配置建议:

    • 使用 virtio 驱动获得最佳磁盘和网络性能
    • 磁盘格式优先使用 qcow2(支持快照和精简配置)
    • 对 I/O 密集型负载考虑使用 raw 格式磁盘
    • 为虚拟机分配 Hugepages 以提升内存性能