KVM/libvirt 虚拟化
检查硬件虚拟化支持
Section titled “检查硬件虚拟化支持”在安装 KVM 之前,必须确认 CPU 支持硬件虚拟化(Intel VT-x 或 AMD-V)。
# 检查 CPU 是否支持虚拟化扩展grep -Ec '(vmx|svm)' /proc/cpuinfo如果返回值大于 0,说明 CPU 支持虚拟化。
# 检查 KVM 内核模块是否已加载lsmod | grep kvm正常应看到 kvm 和 kvm_intel(Intel CPU)或 kvm_amd(AMD CPU)。
安装 KVM 及相关工具
Section titled “安装 KVM 及相关工具”sudo dnf install -y qemu-kvm libvirt virt-install virt-viewer \ libvirt-client bridge-utilssudo dnf install -y @virt qemu-kvm libvirt virt-install \ virt-viewer bridge-utilssudo yum install -y qemu-kvm libvirt virt-install virt-viewer \ bridge-utils libvirt-client如果需要图形化管理工具:
sudo dnf install -y virt-manager启动 libvirtd 服务
Section titled “启动 libvirtd 服务”sudo systemctl enable --now libvirtd验证:
sudo systemctl status libvirtdvirsh version将用户添加到 libvirt 组
Section titled “将用户添加到 libvirt 组”sudo usermod -aG libvirt $(whoami)重新登录后生效,之后可以以普通用户身份使用 virsh 连接系统级虚拟机。
virsh 基础命令
Section titled “virsh 基础命令”virsh 是 libvirt 的命令行管理工具,用于管理虚拟机的完整生命周期。
虚拟机生命周期管理
Section titled “虚拟机生命周期管理”# 列出正在运行的虚拟机virsh list
# 列出所有虚拟机(包括关闭的)virsh list --all
# 启动虚拟机virsh start myvm
# 正常关机virsh shutdown myvm
# 强制关闭(相当于拔电源)virsh destroy myvm
# 重启虚拟机virsh reboot myvm
# 暂停/恢复虚拟机virsh suspend myvmvirsh resume myvm虚拟机信息查询
Section titled “虚拟机信息查询”# 查看虚拟机详情virsh dominfo myvm
# 查看虚拟机 XML 配置virsh dumpxml myvm
# 查看虚拟机 VNC 显示地址virsh vncdisplay myvm
# 查看虚拟机使用的磁盘virsh domblklist myvm
# 查看虚拟机网络接口virsh domiflist myvm虚拟机配置修改
Section titled “虚拟机配置修改”# 编辑虚拟机 XML 配置virsh edit myvm
# 设置开机自启virsh autostart myvm
# 取消开机自启virsh autostart --disable myvm
# 修改虚拟机内存(需要关机状态)virsh setmaxmem myvm 4G --configvirsh setmem myvm 4G --config
# 修改 vCPU 数量(需要关机状态)virsh setvcpus myvm 4 --config --maximumvirsh setvcpus myvm 4 --config使用 virt-install 创建虚拟机
Section titled “使用 virt-install 创建虚拟机”从 ISO 安装
Section titled “从 ISO 安装”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使用 Kickstart 自动安装
Section titled “使用 Kickstart 自动安装”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"从云镜像快速创建
Section titled “从云镜像快速创建”# 下载云镜像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.qcow2qemu-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# 创建快照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"# 创建新磁盘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# 先关闭源虚拟机virsh shutdown myvm
# 克隆virt-clone --original myvm --name myvm-clone \ --file /var/lib/libvirt/images/myvm-clone.qcow2# 关闭虚拟机virsh destroy myvm
# 删除虚拟机定义virsh undefine myvm
# 连同磁盘一起删除virsh undefine myvm --remove-all-storagevirt-manager 图形化管理
Section titled “virt-manager 图形化管理”virt-manager 提供了图形化的虚拟机管理界面。
直接在桌面环境中启动:
virt-manager通过 SSH 远程管理
Section titled “通过 SSH 远程管理”在本地工作站上连接远程服务器的 libvirt:
virt-manager -c qemu+ssh://root@192.168.1.100/system或者在 virt-manager 界面中选择”文件 > 添加连接”,选择 QEMU/KVM,勾选”通过 SSH 连接到远程主机”。
默认 NAT 网络
Section titled “默认 NAT 网络”libvirt 默认创建一个名为 default 的 NAT 网络(通常是 192.168.122.0/24)。
# 查看网络列表virsh net-list --all
# 查看网络详情virsh net-info default
# 启动默认网络virsh net-start default
# 设置默认网络开机自启virsh net-autostart default配置桥接网络
Section titled “配置桥接网络”桥接网络让虚拟机直接接入物理网络,获取与宿主机同一网段的 IP 地址。
-
使用 nmcli 创建网桥:
Terminal window # 创建网桥 br0sudo 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 br0sudo nmcli connection down ens192 -
创建 libvirt 桥接网络定义文件
/tmp/bridge-net.xml:<network><name>host-bridge</name><forward mode="bridge"/><bridge name="br0"/></network> -
在 libvirt 中注册桥接网络:
Terminal window virsh net-define /tmp/bridge-net.xmlvirsh net-start host-bridgevirsh net-autostart host-bridge -
创建虚拟机时使用桥接网络:
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
为已有虚拟机切换网络
Section titled “为已有虚拟机切换网络”# 关闭虚拟机virsh shutdown myvm
# 编辑虚拟机配置virsh edit myvm在 XML 中找到 <interface> 部分,修改为:
<interface type='network'> <source network='host-bridge'/> <model type='virtio'/></interface>启动虚拟机:
virsh start myvm性能优化建议
Section titled “性能优化建议”# 启用 KSM(内核同页合并)以节省内存sudo systemctl enable --now ksmsudo systemctl enable --now ksmtuned
# 查看 KSM 状态cat /sys/kernel/mm/ksm/pages_shared虚拟机配置建议:
- 使用
virtio驱动获得最佳磁盘和网络性能 - 磁盘格式优先使用
qcow2(支持快照和精简配置) - 对 I/O 密集型负载考虑使用
raw格式磁盘 - 为虚拟机分配 Hugepages 以提升内存性能