最近在社群里被问得最多的技术词,绕不开“KVM”。有的人问“通过KVM给服务器做系统到底怎么操作”,有的人问“KVM 的 guest OS 是用来做什么的”,还有人卡在“KVM 内外剪贴板互通”“KVM 链接服务器全屏无法缩小”这些细节上。同一个词,问出来却往往指向两种完全不同的东西:一种是数据中心里的硬件切换器,另一种是 Linux 内核级的虚拟化方案。这篇文章就把这两条线都讲清楚,并以虚拟化 KVM 为主线,带你把环境搭建、系统安装、剪贴板互通、UEFI 引导、全屏显示这些高频问题完整过一遍。不管你是第一次听说 KVM 的新手,还是已经上手但总被某个细节卡住的老开发,这份笔记都值得收藏备用。
1. 背景与核心概念:先分清两种 KVM
KVM 这个缩写非常容易引起误会,因为它在 IT 领域同时指代两种东西:
- 硬件层的 KVM 切换器:Keyboard(键盘)、Video(显示器)、Mouse(鼠标)三个英文单词的首字母。它是一台物理设备,让运维人员用一套键鼠显示器控制多台服务器。
- 虚拟化层的 KVM:Kernel-based Virtual Machine 的缩写,即基于内核的虚拟机。它是 Linux 内核自带的开源虚拟化模块,可以把一台物理机拆成多台虚拟机。
先理解这个差异,后续看到“KVM 登录密码”“KVM 切换器”这类问题就不会和虚拟化概念混在一起了。
1.1 KVM 硬件切换器是什么
KVM 切换器通常出现在机房或服务器机柜里。服务器一般放在机架上,如果每台服务器都配一套键盘、鼠标、显示器,机房里会堆满线缆,操作起来也非常麻烦。KVM 切换器解决的就是这个问题:它把多台服务器的视频信号、键盘鼠标信号集中到一个控制端,按一下按钮或者通过 OSD 菜单,就能在不同服务器之间切换操作。
更高级一点的叫 KVM over IP,也就是通过 IP 网络远程控制服务器的键盘、鼠标和屏幕,机房运维人员不需要站在机器前面,在办公室通过网络就能给服务器装系统、改 BIOS、排查启动故障。“通过 KVM 给服务器做系统”这个热搜词,很多时候指的就是这种场景。
| 类型 | 全称 | 作用 | 常见品牌 |
|---|---|---|---|
| 本地 KVM 切换器 | Keyboard Video Mouse | 用一套键鼠显示器控制多台本地服务器 | ATEN、D-Link、Reton |
| 远程 KVM | KVM over IP | 通过网络远程控制服务器的键盘鼠标和屏幕 | ATEN、Raritan、Avocent |
这类设备有独立的登录界面和账号体系,所以网上会有人问“ATEN KVM 登录密码是什么”。不同型号的默认密码并不统一,而且很多机房设备在上线前已经被管理员修改过默认密码,指望一个“万能默认密码”走天下是不现实的,后面排错章节会专门说这个问题。
1.2 KVM 虚拟化是什么
KVM 虚拟化则是另一条完全不同的技术线。它是 Linux 内核提供的一个虚拟化模块,从 Linux 2.6.20 开始被合入内核主线。KVM 模块加载后,Linux 内核本身相当于一个 Hypervisor(虚拟机监控器),可以把 CPU、内存、磁盘等物理资源虚拟化,供多台虚拟机同时使用。
KVM 本身只负责 CPU 虚拟化和内存虚拟化,完整的虚拟机还需要 QEMU 来模拟网卡、磁盘、USB 等设备,所以平时我们说的“KVM 虚拟化”通常指的是 KVM + QEMU 的组合。管理工具上,既可以用命令行工具virsh、virt-install,也可以用图形化工具virt-manager。生产环境中还会搭配 Libvirt 这个 API 层来做统一管理。
KVM 之所以受欢迎,核心优势有几点:
- 它是 Linux 内核原生模块,不需要额外安装独立的 Hypervisor 系统。
- 开源免费,商业支持也很完善。
- 性能接近物理机,因为虚拟机直接使用硬件虚拟化扩展。
- 生态成熟,OpenStack、Proxmox VE 等云平台底层都大量使用 KVM。
1.3 guest OS 到底是什么
搜“KVM 的 guest OS 是用来做什么的”,其实是在问虚拟化里的“客户机操作系统”概念。在 KVM 虚拟化架构里:
- host(宿主机):物理安装并运行 KVM 模块的 Linux 系统。
- guest(客户机)或 guest OS:运行在虚拟机里的操作系统。guest OS 可以是 CentOS、Ubuntu、Windows、Debian 等任何一种受支持的系统。
guest OS 和其他普通操作系统一样跑自己的内核、起自己的服务,但它感知不到自己是被虚拟化出来的,也不会直接操作物理硬件。它发出的指令由 KVM 和 QEMU 转发、翻译,最终落到物理 CPU、内存和存储上。也就是说,guest OS 就是你在虚拟机里安装的那个系统,它和宿主机上的 OS 是隔离的,彼此互不影响。宿主机崩溃,未必会立刻影响 guest OS 的运行;guest OS 中毒或者崩溃,宿主机和其他虚拟机也可以保持正常。
1.4 两种 KVM 的常见混淆场景
很多人搜索“KVM”,其实是带着具体问题来的:
- 搜“通过 KVM 给服务器做系统”:可能是用硬件 KVM 切换器给物理机做系统,也可能是用虚拟化 KVM 新建一个虚拟机来装系统。
- 搜“KVM 内外剪贴板互通”:一定是虚拟化场景。VMware 里的“无缝复制粘贴”,在 KVM 虚拟机里也可以实现。
- 搜“KVM 链接服务器全屏无法缩小”:既可能指 virt-manager 里虚拟机窗口分辨率适配问题,也可能指 KVM over IP 远程控制台全屏后无法缩放。
- 搜“KVM UEFI 固件下载”:指的是虚拟化 KVM 引导虚拟机时需要的 OVMF 固件。
所以,遇到问题先确定自己用的是哪一种 KVM,排查方向才不会跑偏。接下来文章的主体内容将围绕虚拟化 KVM 展开,在对应位置补充硬件 KVM 的注意事项。
2. 环境准备:搭建 KVM 虚拟化基础环境
要亲手实践,先准备一台带虚拟化能力的 Linux 服务器。版本需要根据你的项目实际情况调整,本文以常见的 CentOS Stream / Rocky Linux 环境为例,重点演示配置思路,Ubuntu/Debian 的包管理器对应替换即可。
2.1 硬件要求
KVM 依赖 CPU 的硬件虚拟化扩展:
- Intel CPU 需要支持 VT-x。
- AMD CPU 需要支持 SVM(AMD-V)。
绝大多数服务器 CPU 都支持,但部分云主机、低功耗小主机可能没有开放嵌套虚拟化,需要在 BIOS 或者云厂商控制台里确认。
内存方面,宿主机至少预留 4GB 以上给系统本身使用,再根据你要运行的 guest OS 分配内存。磁盘建议使用独立分区或逻辑卷,方便后续快照和扩容。
2.2 检查 CPU 虚拟化支持
在宿主机上执行以下命令确认 CPU 虚拟化是否可用:
grep -E "(vmx|svm)" /proc/cpuinfo如果输出中包含vmx,说明是 Intel CPU 且已开启 VT-x;如果包含svm,说明是 AMD CPU 且已开启 SVM。没有任何输出,说明虚拟化功能未开启或 CPU 不支持。
更直观的方式是使用virsh检查,安装后执行:
virsh check也可以查看/dev/kvm设备是否存在:
ls -l /dev/kvm如果看到crw-rw-rw-或者其他读写权限的/dev/kvm,说明 KVM 模块已经可以工作。
2.3 安装 KVM 及管理工具
在 Rocky Linux / CentOS Stream 上安装 KVM、QEMU 和相关管理工具:
dnf install -y qemu-kvm libvirt virt-install virt-manager bridge-utils在 Ubuntu / Debian 上对应安装:
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst virt-manager bridge-utils安装完成后,启动 libvirtd 服务并设置为开机自启:
systemctl enable --now libvirtd检查运行状态:
systemctl status libvirtd看到active (running)说明服务正常。
如果本机默认用户是普通用户,执行virsh list --all提示连不上 libvirt,可以把用户加入libvirt用户组,重新登录再试:
usermod -aG libvirt username2.4 验证虚拟化环境
创建第一台测试虚拟机前,可以先检查网络的默认状态:
virsh net-list --allKVM 安装后默认会创建一个default虚拟网络,NAT 模式对外通信。如果没有 active,启动它:
virsh net-start default virsh net-autostart default至此,环境准备完成。接下来进入最核心的部分:用它给服务器“做系统”。
3. 核心操作:通过 KVM 给服务器做系统
新建 KVM 虚拟机并安装操作系统,本质上有两条路径:图形化工具virt-manager适合学习和临时调试,命令行工具virt-install适合脚本化和批量部署。
3.1 图形化方式 virt-manager 创建虚拟机
如果宿主机桌面环境或 SSH X11 转发可用,可以直接启动virt-manager:
virt-manager在图形界面中点击“新建虚拟机”,选择本地 ISO 镜像或者网络安装源,然后按向导设置内存、CPU 和磁盘即可。
这种方式胜在直观,创建虚拟机过程中的每一步都有可见确认,适合新手第一次熟悉 KVM 的虚拟机创建流程。但生产环境通常没有图形界面,更多时候依赖命令行工具。
3.2 命令行方式 virt-install 创建虚拟机
假设你已经有一个 Linux 发行版的 ISO 镜像放在 /data/iso 目录下,下面这个命令创建一个名为centos-test的虚拟机,分配 2 核 CPU、4GB 内存、50GB 磁盘:
virt-install \ --name centos-test \ --memory 4096 \ --vcpus 2 \ --disk path=/data/kvm/centos-test.qcow2,size=50,format=qcow2 \ --cdrom /data/iso/CentOS-Stream-9-latest-x86_64-dvd1.iso \ --os-variant centos-stream9 \ --network network=default \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole参数说明:
--name:虚拟机名称,后续管理都会使用这个名字。--memory:分配给虚拟机的内存,单位 MB。--vcpus:虚拟 CPU 数量。--disk:磁盘路径、大小和镜像格式,推荐使用 qcow2,支持快照和按需分配空间。--cdrom:挂载的安装 ISO。--os-variant:操作系统类型,它会自动优化默认配置。--network:网络模型,default是前面启动的 NAT 网络。--graphics vnc:开放 VNC 远程显示,方便接显示器画面。--noautoconsole:创建后不自动打开控制台。
如果不知道--os-variant应该填什么,可以用osinfo-query os查询支持的系统列表:
osinfo-query os | grep centos3.3 UEFI 固件下载与启用
默认安装虚拟机时,KVM 模拟的是传统 BIOS 引导。如果要安装 Windows 11,或者某些只支持 UEFI 引导的操作系统,需要给虚拟机指定 UEFI 固件。
这个“UEFI 固件”在 KVM 中通常就是 OVMF(Open Virtual Machine Firmware)。它在包管理器里就能安装:
dnf install -y edk2-ovmfUbuntu / Debian 安装:
apt install -y ovmf安装完成后,查看固件路径:
find /usr/share -name "OVMF_CODE.fd" 2>/dev/null典型路径如下:
/usr/share/OVMF/OVMF_CODE.fd/usr/share/edk2/ovmf/OVMF_CODE.fd
使用 virt-install 创建 UEFI 虚拟机时加上--boot参数:
virt-install \ --name windows11-test \ --memory 8192 \ --vcpus 4 \ --disk path=/data/kvm/windows11-test.qcow2,size=100,format=qcow2 \ --cdrom /data/iso/Win11.iso \ --os-variant win11 \ --network network=default \ --boot uefi \ --graphics spice \ --noautoconsole补充一点:如果网上资料让你手动下载某个“OVMF 固件 bin 文件”,要谨慎辨别来源。正常发行版仓库里的 edk2-ovmf / ovmf 包就是官方固件,不需要从第三方站点私下下载,避免引入安全风险。
3.4 硬件 KVM 切换器装系统场景建议
如果你的场景是机房里用硬件 KVM 切换器给物理服务器装系统,要注意下面几点:
- 确认切换器主机端口和服务器显示输出接口一致,老服务器常见 VGA,新机器可能是 HDMI 或 DP,需要转接头。
- 安装系统时,用切换器切换到目标服务器端口,显示器上应能看到开机自检画面。
- 进入 BIOS,设置 U 盘或光驱为第一启动项,保存重启后即可进入安装界面。
- 系统安装过程中不要频繁切换端口,避免键盘鼠标输入短暂失效造成误操作。
- 如果是 KVM over IP,建议使用有线网络连接远程控制台,无线网络在安装界面下可能出现键盘响应延迟。
4. 内外剪贴板互通与显示优化
“KVM 内外剪贴板互通”是很多人在虚拟机里装完系统后遇到的第一个体验痛点。默认情况下,KVM 虚拟机与宿主机之间的剪贴板是隔离的,在虚拟机里复制的内容无法直接粘贴到宿主机,反之亦然。VMware Workstation 默认能互通,是因为它自动装了一套 VMware Tools,KVM 里对应的组件叫 SPICE guest tools。
4.1 安装 SPICE guest 工具
在 guest OS 是 Linux 的情况下,在虚拟机里执行:
Ubuntu / Debian:
apt install -y spice-vdagentRocky / CentOS:
dnf install -y spice-vdagent安装完成后重新启动虚拟机或重启 spice-vdagent 服务。
如果 guest OS 是 Windows,可以在虚拟机的 CD-ROM 中挂载 virtio-win 驱动镜像,里面有 spice-guest-tools 安装包。这个镜像同样可以从发行版仓库或 virtio-win 官方发布渠道获取,不要在陌生站点下载来路不明的整合包。
4.2 剪贴板互通配置检查
安装 spice-vdagent 后,virt-manager 查看虚拟机显示时,宿主机和虚拟机之间就可以共用剪贴板了。
需要注意,剪贴板互通依赖两个条件:
- 虚拟机的 video 设备类型是 virtio 或 QXL,而不是默认的 VGA。
- 宿主机通过 SPICE 协议连接虚拟机,而不是 VNC。VNC 协议本身不适合剪贴板双向同步。
用 virsh 查看虚拟机 XML 配置中 video 和 graphics 部分:
virsh dumpxml windows11-test | grep -A 2 "<video>" virsh dumpxml windows11-test | grep -A 3 "<graphics>"如果确实是 VNC,可以把图形协议改成 spice 后重启虚拟机:
virsh edit windows11-test修改前建议先virsh dumpxml windows11-test > windows11-test.xml.bak备份配置。
4.3 全屏无法缩小问题解决
“KVM 链接服务器全屏无法缩小”一般出现在 virt-manager 或 virt-viewer 里。点全屏后,虚拟机画面撑满屏幕,但想按窗口小一点就不行了。
常见原因和解决思路如下:
- 虚拟机内分辨率过高,超过宿主机窗口尺寸。可以在 guest OS 显示设置中把分辨率调低。
- 没有安装 SPICE guest tools,显示器分辨率不能自动适配窗口大小。安装 spice-vdagent 后,virt-manager 窗口变化时,guest 桌面会自动跟随调整。
- virt-manager 开启了“全屏”模式没有退出快捷键。按
Shift + F11切换全屏,或者把鼠标移到屏幕上边缘呼出菜单栏。 - 使用 VNC 连接时,由于分辨率协商机制不同,缩放支持不理想。可以尝试用 virt-viewer 的缩放模式,或者在 VNC 客户端中开启“缩放显示”。
查看当前虚拟机的显示连接地址可以用:
virsh vncdisplay win11-test然后在 virt-viewer 中手动连接:
virt-viewer --connect qemu:///system win11-test5. 常见问题与排查思路
把用户搜索热度最高的问题汇总成下表,再逐个展开说明。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| KVM 初始化失败,/dev/kvm 不存在 | CPU 虚拟化未开启或内核模块未加载 | 检查 BIOS 设置,modprobe kvm_intel/kvm_amd |
| ATEN KVM 登录密码无法进入 | 默认密码已被修改或不适用 | 查阅官方手册、设备复位或联系管理员 |
| 虚拟机提示 UEFI 固件不存在 | 未安装 OVMF 软件包 | 安装 edk2-ovmf 或 ovmf 包 |
| guest 和宿主机剪贴板不互通 | guest OS 未安装 spice-vdagent | 安装 spice-vdagent 并确认使用 SPICE 协议 |
| 全屏后无法缩小窗口 | 分辨率超出窗口或缺少工具 | 调节分辨率,安装 SPICE tools |
| virt-install 创建虚拟机失败 | os-variant 或磁盘路径错误 | 用 osinfo-query 查询正确系统变体 |
5.1 ATEN KVM 登录密码问题
搜“ATEN KVM 登陆密码”的人,很多是在使用 ATEN 品牌的硬件 KVM 切换器或 KVM over IP 时被登录界面拦住了。必须明确:ATEN 不同系列、不同固件版本的管理员默认账号和密码并不完全相同,而且新设备第一次登录通常还会强制修改密码。
建议做法是:
- 先查看设备背面标签或说明书,部分型号默认账号是
admin,密码是空的或password。 - 如果没有说明书,去 ATEN 官网对应型号页面下载用户手册,以手册里写的初始凭据为准。
- 如果之前有人配置过该设备,直接联系设备管理员重置密码。
- 某些型号支持硬件复位按钮,恢复出厂设置后要重新配置网络参数,操作前必须确认该设备在业务中的影响范围。
一句话总结:不要迷信网上流传的“通用密码”,硬件设备的凭据管理要从安全角度对待。
5.2 UEFI 固件下载和引导失败
创建 UEFI 虚拟机最常见的报错是:
ERROR 配置域时出错: 内部错误: /usr/share/OVMF/OVMF_CODE.fd 不存在这个报错就是缺少 OVMF 固件文件。按前面第 3.3 节方式安装对应软件包即可。
如果已经安装固件仍然引导失败,另一种常见原因是存储池路径权限不足。给虚拟机磁盘文件所在目录设置合理权限,并确保当前用户有权限访问:
chown -R qemu:qemu /data/kvm chmod 750 /data/kvm对于已经创建但配置中没有 UEFI 的传统 BIOS 虚拟机,不能简单地改一个固件路径就切换启动模式,因为分区表类型和引导方式不匹配。建议重新创建虚拟机,在创建时直接指定 UEFI。
5.3 其他高频问题
- 通过 KVM 给服务器做系统时安装界面黑屏:可能是显示协议问题和分辨率不支持。在 virt-install 中改用
--graphics spice或者调整--video qxl。 - 虚拟机网卡不通:检查默认网络是否 active,guest 内网卡是否配置了 DHCP。
- 性能差:确认宿主机的 CPU 嵌套虚拟化是否开启,虚拟机磁盘是否用了 qcow2,并检查是否准备使用 virtio 驱动。
virsh net-list --all virsh net-start default6. 最佳实践与工程建议
KVM 虚拟化环境一旦进入生产,就不再是“把虚拟机建出来”那么简单。下面几条建议来自工程落地的实际经验。
6.1 命名与资源规划
虚拟机名称建议使用“业务-环境-用途”的格式,例如order-prod-node01。避免使用test1、centos-new这类含义不清的名字。创建前先评估 CPU、内存、磁盘容量,避免宿主机超分过度导致性能抖动。
查看宿主机资源使用情况:
virsh list --all virsh dominfo order-prod-node016.2 存储与备份
虚拟机磁盘使用 qcow2 格式,创建虚拟机时利用--disk指定固定大小或按需增长。对重要虚拟机定期做快照,但在快照之前要确认 guest OS 内部文件系统处于一致状态,最好先暂停或关机:
virsh snapshot-create-as order-prod-node01 snap-before-upgrade恢复快照的操作要谨慎,它会覆盖当前磁盘状态:
virsh snapshot-revert order-prod-node01 snap-before-upgrade生产环境的核心数据必须在宿主机层之外再做异地备份,快照不等于备份,宿主机磁盘损坏时快照也会一起丢失。
6.3 权限与安全
- 限制 libvirt 管理员的用户组范围,不要把所有用户都加入 libvirt 组。
- 尽可能关闭不需要的 VNC 或 SPICE 对外监听端口,或者通过防火墙限制来源 IP。
- 使用 openEuler/Rocky 等系统时,开启 SELinux,默认不随意放行非常规目录作为虚拟机镜像路径。
- 修改业务虚拟机之前先导出一份 XML 配置备份:
virsh dumpxml order-prod-node01 > /backup/order-prod-node01.xml6.4 性能与运维
- 优先使用 virtio 类型的网卡和磁盘控制器,virtio 半虚拟化能显著降低 I/O 开销。
- 给虚拟机设置 CPU 绑定之前先了解宿主机 NUMA 拓扑,避免跨 NUMA 节点访问内存造成性能下降。
- 批量创建虚拟机时,把
virt-install命令整理成 Shell 脚本,并用--noautoconsole避免交互卡住。 - 日志排查重点关注
/var/log/libvirt/qemu/目录下对应虚拟机日志,遇到启动失败优先查看这里。
7. 总结与学习路线
这篇长文从“两种 KVM”的区别切入,覆盖了 KVM 硬件切换器和 KVM 虚拟化的基本概念,重点展开了虚拟化 KVM 的环境搭建、virt-install 命令行创建虚拟机、UEFI 固件安装、剪贴板互通、全屏显示适配,以及 ATEN KVM 密码、固件缺失等常见问题。做完这些操作后,你已经能在一台 Linux 宿主机上独立创建和管理虚拟机了。
下一步建议按这个顺序继续深入:
- 把 virt-manager 和 virsh 常用命令过一遍,重点掌握
virsh list、virsh dominfo、virsh shutdown、virsh destroy的管理区别。 - 学习 Linux bridge 和 VLAN 配置,把虚拟机从 NAT 网络切换到 bridge 网络,让虚拟机直接接入业务网段。
- 研究 qcow2 镜像的 backing file 克隆技术,提高批量创建虚拟机的效率。
- 如果你的生产环境已经用上了硬件 KVM 切换器,建立一个设备密码台账和远程控制台登录规范,避免下次求助时找不到管理员。
KVM 看起来内容多,但核心思路并不难:底层是 Linux 内核的虚拟化能力,上层是 libvirt 管理百种虚拟机,中间真正影响使用体验的往往就是 UEFI 固件、virtio 驱动、SPICE tools 这几个细节。把本文的实践流程完整过一遍,再遇到相关的坑,就有明确的排查方向了。