- 检查硬件虚拟化支持 (CPU Requirement)
KVM 需要您的 CPU 支持硬件虚拟化扩展,即 Intel VT-x 或 AMD-V,并且需要在 BIOS 中启用。
运行以下命令检查:
Bash
grep -E '(vmx|svm)' /proc/cpuinfo
如果命令有输出(例如看到 vmx 或 svm 标志),则表示您的 CPU 支持虚拟化。
如果没有任何输出,您可能需要在服务器的 BIOS/UEFI 设置中启用虚拟化功能,或者您的 CPU 不支持 KVM。
- 安装 KVM 相关的软件包
使用 yum 安装 KVM 核心组件和管理工具。
Bash
sudo yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install bridge-utils -y
qemu-kvm: KVM 虚拟机管理程序。
libvirt: 虚拟化管理工具和库(提供 libvirtd 服务)。
libvirt-python: Python 绑定,有时是某些工具的依赖。
libguestfs-tools: 用于管理虚拟机磁盘映像的工具。
virt-install: 用于从命令行创建虚拟机的工具。
bridge-utils: 用于网络桥接配置的工具。
如果您希望使用图形界面管理虚拟机 (如 virt-manager),并且您的服务器支持 X-Window 和 VNC 或 X11 转发,则可以额外安装:
Bash
sudo yum install virt-manager virt-viewer -y
- 启动并启用 libvirtd 服务
libvirtd 是 KVM 的核心管理守护程序。您需要启动它并设置它在系统启动时自动运行。
Bash
# 启动 libvirtd 服务
sudo systemctl start libvirtd
# 设置 libvirtd 服务开机自启
sudo systemctl enable libvirtd
# 检查服务状态(确保它是 active (running))
sudo systemctl status libvirtd
- 验证 KVM 模块是否加载
运行以下命令检查 KVM 内核模块是否已加载:
Bash
lsmod | grep -i kvm
如果安装成功且硬件支持已启用,您应该会看到类似 kvm_intel (Intel CPU) 或 kvm_amd (AMD CPU) 以及 kvm 的输出。
- 可选:配置网络桥接
默认情况下,libvirtd 会创建一个名为 virbr0 的 NAT 网络桥接。如果您希望虚拟机能够与本地 LAN 上的其他物理机直接通信(而不是通过 NAT),则需要配置网络桥接。
这个步骤比较复杂,并且取决于您的服务器网络配置(例如您使用的网卡名称,以及是否使用 NetworkManager 或传统的 network 服务)。
💡 简单 NAT 模式: 对于基础测试或如果您的虚拟机只需要访问外部网络(如互联网),默认的 NAT 模式通常就足够了,无需额外配置。
🔗 桥接模式(Bridged Networking): 如果您需要桥接,您通常需要:
找到您的主网卡配置文件(例如 /etc/sysconfig/network-scripts/ifcfg-eth0 或 ifcfg-enp3s0)。
创建一个新的桥接配置文件(例如 /etc/sysconfig/network-scripts/ifcfg-br0)。
将主网卡的配置修改为桥接的成员 (例如在主网卡配置文件中添加 BRIDGE=br0)。
在桥接配置文件中设置 IP 地址、网关等。
重启网络服务(可能需要重启服务器)。
⚠️ 警告:如果通过 SSH 连接服务器,重启网络服务(systemctl restart network 或 systemctl restart NetworkManager)可能会导致连接中断。请谨慎操作。
- 创建您的第一个虚拟机
您可以使用 virt-install 命令行工具来创建新的 KVM 虚拟机。
示例命令(假设您已经下载了一个 CentOS 7 ISO 镜像到 /tmp/centos7.iso):
Bash
sudo virt-install \
--name centos7-vm \
--ram 2048 \
--vcpus 2 \
--os-variant centos7 \
--disk path=/var/lib/libvirt/images/centos7-vm.qcow2,size=20 \
--network network=default \
--graphics vnc \
--location /tmp/centos7.iso
我的命令如下:
sudo virt-install \
--name=template \
--ram=2048 \
--vcpus=2 \
--os-variant=ubuntu20.04 \
--cdrom=/home/kvm/isos/xubuntu-25.10-desktop-amd64.iso \
--disk path=/home/kvm/vdisks/template.raw,size=20 \
--network bridge=br1 \
--graphics vnc,listen=0.0.0.0,port=5900 \
--boot cdrom,hd \
--noautoconsole --autostart
注:如果不知道os-variant值该怎么写,可用以下命令查看支持的版本
osinfo-query os | grep ubuntu
执行此命令后,安装程序将启动,您可以通过 VNC 客户端连接到服务器的 VNC 端口(通常是 5900 + Domain ID)来完成操作系统的安装。
如果是安装新版kali,由于centos7版本比较旧,只支持到debian9,造成无法识别光盘,无法安装?如何解决这个问题呢?
确实,CentOS 7 默认自带的 virt-install 和 osinfo-db(系统信息数据库)非常老旧(毕竟 CentOS 7 的内核和软件源停留在多年前),在它的列表里,debian9 可能已经是它能认出来的最新 Debian 系版本了。
如果系统数据库里找不到 debian12,强行写进去 virt-install 会直接报错拒绝执行。
既然受到了 CentOS 7 环境的限制,我们可以通过以下 3 种变通方案,跳过这个限制,让你的 2026 版 Kali 顺利从光盘引导:
方案一:使用 generic 兜底参数 + 强制引导顺序(最快、最省事)
既然系统认不出新版本,我们可以使用一个通用的、不带具体版本偏见的参数 generic,并配合 --boot cdrom 强制拉起光盘。
把你的命令修改为:
Bash
sudo virt-install \
--name=kali2026.1_template \
--ram=4096 \
--vcpus=4 \
--os-variant=generic \
--cdrom=/home/kvm/isos/kali-linux-2026.1-installer-amd64.iso \
--disk path=/home/disk/nvme1/kvm/vdisks/kali2026.1_template.raw,size=20,bus=virtio,format=raw \
--network bridge=br1,model=virtio \
--graphics vnc,listen=0.0.0.0,port=8900 \
--boot cdrom,hd \
--noautoconsole \
--autostart
💡 核心改动:
变更为 --os-variant=generic。
加上了 --boot cdrom,hd,这会无视一切硬件预设,强行把光驱塞到第一引导位。
7、注册虚拟机
#下面在宿主机上定义虚拟机
virsh define /etc/libvirt/qemu/template.xml #定义虚拟机
virsh list --all #查看所有虚拟机
virsh start template #启动虚拟机
8、如何根据模板机来创建新的虚拟机,简化步骤
B站有个博主的关于kvm的视频很好,使用他的教程来完成快速部署虚拟机。
https://www.bilibili.com/video/BV1YagwzvENd?spm_id_from=333.788.player.switch&vd_source=9b80e371e50b4e6b3960c24dd1eee162&p=7
1、创建模板机
修改/etc/libvirt/qemu/模板文件.xml
。删除uudi列
。 删除网卡mac地址配置信息

。修改为NAME

。修改vncport端口

为了使kvm虚拟机的分辨率支持的更大修改:

。修改新生成的kvm虚拟机的磁盘文件名为和虚拟机名称一致

window10的安装命令如下:

生成之后还要手动进系统修改生成的kvm的主机名。
2、安装命令如下:
[root@bogon virtual_create]# createvm -a 192.168.222.34 -p 6905 -n kvm6905
Formatting '/home/kvm/vdisks/kvm6905.qcow2', fmt=qcow2 size=21474836480 backing_file='/home/kvm/vdisks/template.raw' encryption=off cluster_size=65536 lazy_refcounts=off
libguestfs: error: vfs_type: vfs_type_stub: /dev/sda2/root: Not a directory
libguestfs: error: mount_options: mount_options_stub: /dev/sda2/root: Not a directory
guestmount: ‘/dev/sda2/root’ could not be mounted.
guestmount: Did you mean to mount one of these filesystems?
guestmount: /dev/sda1 (unknown)
guestmount: /dev/sda2 (ext4)
sed:无法读取 /home/kvm/modify/etc/hostname:没有那个文件或目录
guestunmount: failed to unmount /home/kvm/modify: fusermount: failed to unmount /home/kvm/modify: Invalid argument
用户 进程号 权限 命令
/home/kvm/modify: root kernel mount /home
root 2695 ..c.. screen
root 2698 ..c.. sh
root 2701 F.ce. x-proxy-pp-linu
root 2708 ..c.. screen
root 2710 ..c.. sh
root 2712 F.ce. h9-miner-chia-l
qemu 6448 F.... qemu-kvm
qemu 9841 F.... qemu-kvm
qemu 9938 F.... qemu-kvm
qemu 11810 F.... qemu-kvm
定义域 kvm6905(从 /etc/libvirt/qemu/kvm6905.xml)
域 kvm6905 已开始
需要说明一点,脚本没有正确执行完毕,主要是挂在虚拟磁盘挂载不了,所以也修改不了主机名和ip地址。这以后再研究,不过确实可以快速创建虚拟机了,需要进入到虚拟机内部手动修改主机名;ip地址让它自动获取好了。
登录进入ubuntu修改主机名的方法:
sudo hostnamectl set-hostname kvm6905
sudo nano hosts
自动生成kali虚拟机的命令如下:生成虚拟机后还要自己改机器名
createvmkali -a 192.168.222.34 -p 8901 -n kali2026-1kvm8901
三、关于windows10虚拟机的快速创建
1、将/usr/local/bin/creatvm命令脚本再复制一份为/usr/local/bin/creatvmwin10.修改里面的windows10模板机所在的位置、并添加执行权限。

2、再执行createvmwin10 -a 192.168.222.34 -p 7901 -n win10kvm7901
问题提示:
1、如何彻底删除虚拟机
。先关机 virsh destroy kvm7901
.删除配置文件和磁盘文件
virsh undefine kvm7901 --remove-all-storage
四、如何修改kvm虚拟机的硬盘格式核心数和内存大小?
1、修改内存、cpu核心数
virsh list --all
virsh shutdown win10kvm7901
如果没关
virsh destroy win10kvm7901
备份配置文件
virsh dumpxml win10kvm7901 > ~/win10kvm7901_back.xml
编辑配置文件,修改内存和cpu数量为所需
virsh edit win10kvm7901
启动虚拟机
virsh start win10kvm7901
2、将硬盘格式由qcow2改为raw
重复上面查看、关机、一系列操作,找到虚拟磁盘存放的位置/home/kvm/vdisks
切换到虚拟磁盘目录
cd /home/kvm/vdisks
执行qcow2--->raw转换
qemu-img convert -p -f qcow2 -O raw ./win10kvm7901.qcow2 ./win10kvm7901.raw
修改配置文件中虚拟硬盘格式和存放目录的内容,保存退出,重启虚拟机、
virsh edit win10kvm7901
virsh start win10kvm7901