资讯动态

分清两个KVM:用KVM给服务器装系统的实战与排查指南

发布时间:2026/9/7 10:13:17 来源:尧图企业网站定制
前阵子有朋友在运维群里问领导让他用 KVM 给服务器做系统他在网上搜了一晚上看到的全是虚拟化文章什么内核模块、虚拟机、Libvirt可他只是想给物理服务器装个操作系统而已。这个困惑特别典型。KVM 这个缩写在服务器场景里至少对应两种完全不同的东西一种是机房常见的硬件 KVM 切换器一套键鼠显示器管多台机器另一种是 Linux 内核里的虚拟化模块也就是 Kernel-based Virtual Machine。如果不先把这两个概念分开后面查再多资料都对不上号。这篇文章就从这个歧义讲起把硬件 KVM 和虚拟化 KVM 讲清楚重点落在用虚拟化 KVM 给服务器做系统、理解 Guest OS、解决剪贴板和显示问题这些真实操作上最后给一套可以复用的排查顺序。1. 先分清两个 KVM一个是硬件工具一个是内核虚拟化1.1 硬件 KVM机房里的“一套键鼠管所有服务器”硬件 KVM 是 Keyboard、Video、Mouse 三个词的缩写。它解决的是机房最朴素的需求服务器一般是不配显示器和键鼠的但检修、装系统、进 BIOS 的时候又必须看到屏幕。有了硬件 KVM管理员就能用一套键盘、鼠标、显示器通过切换按钮或者 OSD 菜单在几台甚至几十台服务器之间来回操作。后来这类设备演进出了 KVM-over-IP。设备通过网络提供远程管理界面管理员不用进机房在办公室打开浏览器就能看到服务器画面甚至可以远程挂载 ISO 镜像给一台没有操作系统的物理服务器装系统。ATEN 是这类设备里比较常见的品牌所以网上搜“ATEN KVM 登录密码”出来的基本都是这类硬件设备的管理密码问题。这类设备一般有一个默认管理 IP 和默认账号密码通常在机身标签、快速上手指南里能看到。如果密码已经被改过且忘记了常见的处理路径是查设备是否支持物理重置、联系厂商售后、走设备自身的恢复流程。不同型号差别很大不建议拿一家的经验去套所有设备。1.2 虚拟化 KVMLinux 内核自带的虚拟机监控器虚拟化 KVM 是 Kernel-based Virtual Machine 的缩写是 Linux 内核提供的一个虚拟化模块。它不是一个完整独立的“虚拟机软件”更多是一个底层能力把宿主机 CPU 的硬件虚拟化扩展Intel 的 VT-x、AMD 的 SVM变成一个可供虚拟机使用的接口。真正创建和管理虚拟机还需要配套工具。最常见的组合是QEMU负责设备模拟比如虚拟磁盘、虚拟网卡、虚拟显卡Libvirt提供统一的管理接口和 APIvirt-manager / virt-install图形化或命令行管理工具virsh日常运维的常用命令行工具。所以“用 KVM 给服务器做系统”这句话在虚拟化语境下实际意思是先在宿主机上创建一台虚拟机再往虚拟机里安装操作系统。这个操作和用硬件 KVM 给物理机装系统的思路完全不同。这里先给一个判断网上讨论 KVM 的文章绝大多数讲的是后者也就是虚拟化。如果你只是想给物理服务器装系统应该先确认机房有没有硬件 KVM 或者带外管理卡而不是跑到 Linux 里敲 virt-install。2. 用 KVM 给服务器做系统难点不在“装”而在“规划”2.1 最小可运行流程从命令行到虚拟机启动假设宿主机已经装好了 Linux想用 KVM 创建一台虚拟机装 CentOS 或 Ubuntu常见流程是这样确认 CPU 支持虚拟化grep -E (vmx|svm) /proc/cpuinfoIntel 的 CPU 对应 vmxAMD 对应 svm。如果没有任何输出要么是 CPU 太老不支持要么是 BIOS 里虚拟化没开。安装软件包。不同发行版的名字不一样在 Debian/Ubuntu 上通常是 qemu-kvm、libvirt-daemon-system、virtinst在 RHEL/CentOS 上是 qemu-kvm、libvirt、virt-install。安装前先确认当前系统的软件源。启动 libvirtd 服务并设为开机自启systemctl enable --now libvirtd把要安装的系统 ISO 镜像放到宿主机上确认目录权限最好单独建一个存储目录给虚拟机磁盘用。用 virt-install 创建虚拟机。下面是一个典型命令的示例结构具体参数要按你的环境调整virt-install \ --name vm-test \ --vcpus 2 \ --memory 2048 \ --disk path/var/lib/libvirt/images/vm-test.qcow2,size20 \ --cdrom /data/iso/ubuntu-server.iso \ --os-variant ubuntu22.04 \ --network default通过 virt-manager 或 VNC 打开虚拟机画面完成系统安装。2.2 关键参数不要随手填第一次创建虚拟机的人特别喜欢把 CPU 和内存拉满。比如宿主机 16 核 64GB直接给虚拟机分配 16 核 60GB结果虚拟机是起来了宿主机卡到 SSH 都敲不动命令。这里要理解资源分配的基本概念虚拟机的 CPU 核数和内存也是从宿主机里拿的。CPU 超分可以用但要看虚拟机的实际负载内存尽量不要超分因为内存一满就会走 swap性能直接崩。更稳妥的做法是先按业务最小需求给比如 2 核 4GB跑起来观察几天再往上加。磁盘方面要注意两点。一是给磁盘指定的大小是上限不是初始化立即占满但后续增长会一直吃宿主机空间所以宿主机根分区要留缓冲。二是磁盘格式建议选 qcow2它支持瘦分配和快照比裸格式的 raw 更适合日常管理。2.3 镜像、存储、权限和 UEFI装系统失败的一半原因很多人在 virt-install 这一步反复失败最典型的三个原因权限问题ISO 或磁盘镜像放在普通用户目录里qemu 进程读不了空间问题存储目录写满磁盘创建失败安全模块问题SELinux 或 AppArmor 拦截了 QEMU 的读写。排查顺序建议是先看目录权限和磁盘空间再考虑 SELinux 或 AppArmor 的影响最后才怀疑命令参数。把这三项排除掉大部分报错都能定位。另外用 virt-install 创建虚拟机时不指定固件默认是 BIOS 引导。现在很多新版操作系统默认用 UEFI 引导KVM 场景里的 UEFI 固件通常叫 OVMF对应软件包一般是 ovmf 或 edk2-ovmf。需要 UEFI 启动时给 virt-install 加上--boot uefi并确认 OVMF 包已经安装。网上搜“KVM UEFI 固件下载”其实大多数发行版都已经把固件打包进软件源了不需要去第三方站点单独下载。创建虚拟机时最容易忽略的四个点整理成表检查项常见误区建议CPU 虚拟化忘记在 BIOS 开 VT-x/SVM先用 grep 确认磁盘格式直接选 raw不关心后续增长优先 qcow2镜像权限ISO 放在无权限目录放统一存储池或 /var/lib/libvirt引导方式新版系统用 UEFI 却走 BIOS按需加 --boot uefi3. Guest OS 不只是一台“虚拟机”它改变的是服务器资源的使用方式3.1 Guest OS 到底用来做什么Guest OS 是虚拟机里运行的那个操作系统。它是 KVM 虚拟化里非常核心的概念因为你创建的每一台虚拟机本质上都是一个独立的 Guest OS 实例。它的使用场景可以概括成四类隔离不同项目、不同业务的系统跑在同一台物理机上互不影响测试内测环境里随便折腾坏了删除重建不影响宿主机复用把配置好的 Guest 做成模板批量复制出多台同环境机器兼容老的操作系统、老的应用依赖在新时代的硬件上跑不动时用虚拟机把它们“保护”起来继续用。这四类场景的底层逻辑是一样的虚拟机把“一台物理服务器”拆成了“多份可独立分配的计算资源”。Guest OS 之间互不知道对方的存在资源由宿主机统一调度。3.2 为什么 Guest OS 和容器不是一回事一个很常见的问题是都有 Docker 了为什么还要用虚拟机简单说容器是进程级隔离共享宿主机的内核虚拟机是全系统隔离每个 Guest OS 有自己独立的内核。容器轻、启动快、密度高但它和宿主机内核绑在一起虚拟机重、启动慢、资源开销大但它隔离得彻底。如果你只是跑微服务容器完全够用但如果你需要一个和宿主机不同内核版本的操作系统或者需要跑内核模块、改系统参数、装特殊驱动虚拟机更合适。判断标准就一个你是否需要一个完整的操作系统环境而不是一个隔离的进程运行环境。3.3 virtio 驱动性能的真正分水岭KVM 虚拟机里的网卡和磁盘默认可能走的是纯软件模拟。兼容性好但性能差。要解决性能问题一般会给 Guest OS 安装半虚拟化驱动 virtio。Linux guest通常安装 qemu-guest-agent 和 virtio 相关驱动包Windows guest需要单独加载 virtio-win 的驱动安装系统时或者装完后都要确认。装完 virtio 驱动之后虚拟机的磁盘 IO 和网络吞吐通常会有明显改善。如果发现虚拟机 CPU 占用很高、磁盘很慢先别急着加配置看看驱动是不是没装对。注意Windows 虚拟机如果在安装阶段没有加载 virtio 驱动系统可能会因为看不到磁盘而无法继续安装。解决办法是在 virt-manager 里给虚拟机挂载 virtio-win ISO并在安装界面加载对应驱动。4. 剪贴板、全屏、密码三个看着很小、实际很折磨人的实操问题4.1 剪贴板不能互通不是“坏了”是没装 agent很多人用 virt-manager 打开虚拟机后想从宿主机复制命令粘贴到虚拟机里结果怎么都粘不进去。第一反应是虚拟机坏了其实不是。KVM 的剪贴板互通依赖 spice agent。Linux 虚拟机里需要装 spice-vdagentWindows 虚拟机里需要装 spice-guest-tools。而且显示协议要用 SPICE如果用的是 VNC剪贴板互通本身就很难做到。检查顺序是先看显示协议再确认 agent 是否安装最后检查 agent 服务是否正常运行。4.2 全屏之后缩不回来先检查分辨率“KVM 链接服务器全屏无法缩小”这个问题我见过不止一次。现象是在 virt-manager 里点全屏画面铺满屏幕但再按退出全屏的快捷键窗口没有反应或者画面大小不跟随窗口变化。常见原因有三个。第一显示窗口的快捷键和宿主机桌面快捷键冲突导致切换失效。第二Guest 内部分辨率没有跟随窗口自适应需要安装 spice agent 并开启自动调整分辨率。第三显卡模拟类型不匹配比如 virtio-vga 在某些 guest 上支持不完整可以换成 qxl 或者标准 VGA 试试。从工程经验看先装 agent、再切换显卡模式、最后手动调整分辨率这个顺序能解决大部分显示异常。4.3 登录密码问题先搞清楚是哪个密码“ATEN KVM 登录密码”这种搜索词对应的是硬件 KVM-over-IP 设备的管理密码。如果密码丢失优先查机身标签和说明书的默认值再看看设备是否支持恢复出厂设置。至于具体按钮和菜单不同型号差异极大建议直接查厂商文档确认。还有一类密码问题在虚拟化场景里更常见用 VNC 连接虚拟机时要求输入密码。这个密码不是在 Guest OS 里设置的用户密码而是 Libvirt 提供的 VNC 访问认证密码。你需要在 Libvirt 的配置文件里显式设置或者在专用 VNC 客户端里手动填写。不要把这两个密码搞混否则会一直验证不过去。5. 从“能开虚拟机”到“能稳定跑业务”还差几块拼图5.1 网络模式NAT 只是起步桥接才是常态KVM 默认的 virbr0 提供的是 NAT 网络。虚拟机可以主动访问外网但外部访问不到虚拟机。如果虚拟机只是自己学习用、或者做开发测试NAT 够用如果要跑对外业务就得把虚拟机网络改成桥接模式让虚拟机直接出现在物理局域网里。桥接配置在不同发行版上差异较大有的用 NetworkManager 改桥接有的直接改网卡配置文件。改完之后用 virsh 或 virt-manager 给虚拟机指定桥接网络再在虚拟机里把 IP 配置到对应网段。5.2 快照、备份和迁移虚拟机跑起来只是开始真正长期维护需要三样东西快照每次做重要变更前先打快照出问题能回滚备份定期导出或复制磁盘镜像文件注意在虚拟机状态比较稳定时操作避免文件不一致迁移KVM 支持离线迁移条件满足时也可以配置在线迁移。在线迁移对网络和共享存储要求较高条件不满足时不要硬来先跑离线迁移验证流程。5.3 日志、监控和资源限额生产环境里虚拟机的性能问题大多数是资源竞争引起的。建议日常关注宿主机的内存使用率、磁盘 IO 延迟、CPU 等待时间。KVM 相关日志通常在 /var/log/libvirt/ 目录下每个虚拟机的日志在 /var/log/libvirt/qemu/虚拟机名.log。另外要给虚拟机设置资源上限。用 cgroup 或 Libvirt 的配置限制 CPU 配额、内存上限、磁盘 IO 速率防止一台虚拟机把整个宿主机的资源吃光。这在多虚拟机共享一台物理机时尤其重要。6. 一套通用的 KVM 排查顺序遇到问题别急着重启6.1 从现象到日志逐层缩小范围KVM 相关的问题种类很多创建失败、启动失败、网络不通、显示异常、性能差、剪贴板失效。不要一上来就重启服务或者删掉重建按下面的链路走会快很多看现象具体是报错、卡住、无输出还是结果不符合预期看宿主机资源内存余量、磁盘空间、CPU 负载看服务状态libvirtd 是否运行qemu 进程是否存活看日志/var/log/libvirt/qemu/ 下对应虚拟机的日志看权限镜像文件、ISO、存储池目录的属主和权限看网络网桥是否存在、防火墙是否拦截看参数CPU、内存、磁盘总线、固件方式是否匹配最后才怀疑内核模块和版本兼容问题。从经验看相当一部分问题是磁盘空间不够、文件权限不对、镜像路径写错这三个原因。先把这三项确认一遍再往深处排查通常能省很多时间。6.2 把高频问题收敛成一份交接文档还有一个建议把常用的 virt-install 命令、网络配置、存储池路径整理成一份简短的交接文档。团队里任何一个人遇到问题都能拿着文档按顺序检查。这比记住一大堆命令更可靠因为 KVM 这类底层工具真正的复杂度从来不在命令本身而在于环境和边界。硬件 KVM 和虚拟化 KVM 的混淆只是第一道门越过这道门之后你面对的其实是资源规划、驱动配套、网络设计、备份策略和监控体系这一整套工程问题。把这些问题一件一件理清楚KVM 才能真正从“能跑虚拟机”变成“能稳定承载业务”。下一次再有人让你“用 KVM 给服务器做系统”你至少能先问清楚一句你说的 KVM是机房那台切换器还是 Linux 里的虚拟化这一句问完事情就已经对了一半。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价