news 2026/9/7 9:17:12

KVM虚拟化实战:从零到一创建你的第一台虚拟机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KVM虚拟化实战:从零到一创建你的第一台虚拟机

第一次自己“做”KVM,最容易出现的一种情况是什么?不是命令敲不出来,而是你装完之后,发现自己根本不知道刚才那几分钟发生了什么。明明输入了一行virt-install,结果有的机器起来了,有的机器黑屏,有的机器报错;明明在图形界面里看到一个大窗口,却说不清 Host OS、Guest OS、libvirt、QEMU 之间到底是谁在干活。这篇文章会从一次最小化测试出发,把 KVM 从环境检查、组件安装、创建虚拟机到功能验收完整跑一遍,同时讲清楚那些手册里不会直接告诉你的关系:KVM 到底是不是一个软件?Guest OS 有什么用?剪贴板为什么不能互通?全屏为什么缩小不了?

需要先说明一个问题:标题里的“KVM 1.25”并不代表 KVM 有一个叫 1.25 的发行版。更合理的理解是,这是你给第一台 KVM 测试虚拟机起的名字,类似“我的第 1.25 版镜像”。KVM 作为 Linux 内核自带的虚拟化基础架构,本身没有传统意义上的“安装包版本号”。这一点如果不先建立认知,很容易在搜索资料时被各种名词带偏。

读完这篇文章,你能掌握一套完整的 KVM 最小测试流程,知道自己创建的 Guest OS 到底是干什么的,也能快速定位网络不通、剪贴板不可用、UEFI 固件缺失、全屏无法缩放这四类经典问题。

1. 先说结论:KVM 解决的是什么问题

KVM 的全称是 Kernel-based Virtual Machine,中文常翻译为“基于内核的虚拟机”。它解决的问题可以概括成一句话:在一台物理 Linux 服务器上,以接近原生性能的方式同时运行多台虚拟机。

这个“接近原生性能”是关键。

过去很多人在 Windows 上熟悉的是 VirtualBox、VMware Workstation 这类软件。它们安装简单,开箱即用,但本质上是把整个 CPU、内存、磁盘设备通过软件模拟出来,性能和隔离性都会打折扣。KVM 走的是另一条路:它直接使用 CPU 自带的硬件虚拟化扩展,比如 Intel 的 VT-x 和 AMD 的 SVM,让虚拟机里的指令可以大部分绕过软件模拟,直接在物理 CPU 上执行。

所以它的适用场景非常明确:

  1. 服务器虚拟化。在数据中心里用 KVM 给多台业务系统做隔离,一台物理机当好几台用。
  2. 开发测试环境。需要多套不同系统、不同配置环境时,用 KVM 快速创建和销毁。
  3. 给服务器做系统。也就是网络热搜词里提到的“通过 KVM 给服务器做系统”,这里的做法是在宿主机上通过virt-install向虚拟机里装操作系统,而不是把 ISO 写到 U 盘再去插物理机。
  4. 学习虚拟化底层原理。对于想理解内核模块、设备模拟、虚拟网络的人来说,KVM 是最直接的学习材料。

初次接触的人容易误以为 KVM 是个像 VirtualBox 一样独立安装的软件。实际不是。KVM 是一个内核模块,它提供的只是 CPU 和内存层面的虚拟化能力,用户还得配合 QEMU、libvirt 这些组件才能拼出完整虚拟机。这一点直接决定你后面排错的方向。

从材料看,当前你关心的重点也都在这些方向:Guest OS 是干什么的、KVM 剪贴板互通、KVM 全屏无法缩小、UEFI 固件下载。这四类问题对应着四个模块:虚拟化基础、SPICE 客户端工具链、显卡驱动、OVMF 固件。后面都会逐个展开。

2. 必须分清楚的概念:KVM、QEMU、libvirt、Guest OS

先做一个类比。如果一台虚拟机是一辆车:

  • KVM 内核模块是发动机。它负责让物理 CPU 的虚拟化扩展真正可用,是动力来源。
  • QEMU 是底盘和车身。它模拟出内存条、磁盘、网卡、显卡、USB 控制器这些设备,让虚拟机看起来像一台完整电脑。
  • libvirt 是调度中心。它统一管理虚拟机的创建、启动、停止、销毁,屏蔽不同虚拟化平台的差异。
  • virt-manager、virt-install、virsh 是方向盘和仪表盘。它们不直接干活,而是把用户操作翻译给 libvirt。

所以 KVM、QEMU、libvirt 不是三个竞争关系的东西,而是三层配合关系。更准确的表述是:KVM 负责 CPU/Memory 虚拟化,QEMU 负责设备模拟和用户态管理,libvirt 负责统一 API 与管理层。

用表来梳理更清楚:

名称类型职责常见误解
KVMLinux 内核模块提供硬件辅助虚拟化能力被误认为一个独立虚拟机软件
QEMU用户态程序模拟 CPU、内存之外的设备被误认为必须单独打字使用
libvirt守护进程+API统一管理虚拟机和存储网络被误认为只是图形工具
virt-manager图形前端提供 GUI 操作被误认为非装不可
virt-install命令行工具从命令行创建虚拟机被误认为只能用于专家
Guest OS虚拟机里运行的系统承载真实业务和应用被误认为和宿主机系统有关联

Guest OS 是什么?字面意思就是“客户机操作系统”,也就是跑在虚拟机里的操作系统。它可以是一个精简版 Linux,也可以是一套 Windows Server,甚至可以是一套网元设备的专用系统。它的作用和一台真实物理服务器上安装的操作系统没有本质区别:承载软件、服务和数据。区别只在于它运行在虚拟化层之上,可以得到快照、克隆、热迁移这些物理机不具备的能力。

用一个实际场景解释:你在一台物理服务器上装了 CentOS,同时用 KVM 启动了一台 Windows 测试机。那么 CentOS 是 Host OS,Windows 就是 Guest OS。你运行virsh list时看到的一个个名字,就是一台台 Guest OS 对应的虚拟机实例。

为什么要在 KVM 里跑 Guest OS,而不是直接往物理机里装多套系统?因为物理机只能同时运行一个系统,而虚拟化可以在一台物理机上运行多个 Guest OS。这就是服务器整合的基本逻辑。后台系统需要隔离、开发需要环境复现、测试需要快速回滚时,Guest OS 都会是比物理机更灵活的选择。

概念厘清之后,就可以开始动手了。下面的内容默认使用 Ubuntu 22.04 LTS 作为演示系统,CentOS/RHEL 系命令也会单独标注。版本细节请以你实际项目为准,本文重点演示通用思路。

3. 环境准备:先确认这台机器能不能跑 KVM

KVM 运行有一个硬性前提:物理 CPU 必须支持硬件虚拟化扩展。如果 CPU 不支持,或者 BIOS/UEFI 里没有开启相关选项,后面所有步骤都跑不起来。要避免“安装了半天结果一个虚拟机都启动不了”,环境检查阶段务必执行三件事。

第一件事:查看 CPU 是否支持虚拟化扩展。

egrep -c '(vmx|svm)' /proc/cpuinfo

如果输出结果大于 0,说明 CPU 支持 Intel VT-x 或 AMD SVM。如果输出是 0,就需要进入物理机 BIOS/UEFI,找到类似 Intel Virtualization Technology、VT-d、SVM Mode 的选项并开启,然后再重新进入系统验证。这里注意,在实体机上改 BIOS 属于安全范围内的配置操作,改之前先确认这台机器可以被停机和重启,避免影响业务。

也可以用更直观的命令查看:

lscpu | grep -i virtualization

在 Intel 平台上会看到Virtualization: VT-x,在 AMD 平台上会看到Virtualization: AMD-V

第二件事:确认内核模块已经加载。

lsmod | grep kvm

正常输出会包含kvmkvm_intelkvm_amd。如果你的内核已经加载了 KVM 模块但没有对应平台模块,则说明 CPU 虚拟化可能未被识别。可以尝试手动加载:

sudo modprobe kvm_intel

或者,在 AMD 平台上:

sudo modprobe kvm_amd

注意:如果宿主环境本身是一台云服务器,而且云厂商没有开启嵌套虚拟化,那么lsmod | grep kvm可能没有输出。这种环境不代表物理机硬件不支持,而是虚拟化能力没有透传给你。此时可以联系云厂商确认是否支持嵌套虚拟化,或者在本地物理机上验证。

第三件事:确认系统内存和磁盘预算。

第一次做 KVM 测试时,建议宿主机至少有 4 GB 内存和 30 GB 空闲磁盘。这 30 GB 里要预留出系统安装镜像、虚拟磁盘文件、临时快照三部分空间。如果给测试机分配 2 GB 内存,给虚拟磁盘 20 GB,那么宿主机自身内存至少还要留下 2 GB,不然物理机内存耗尽会触发 OOM,直接把宿主机搞挂。这是一个生产环境里非常容易踩的坑:所有资源都给了虚拟机,宿主机反而没有余量了。

4. 安装 KVM 全套组件

安装 KVM 不是只安装一个包。在 Ubuntu 上,推荐安装全套组件,包括内核模块、QEMU、后端管理守护进程、创建工具、图形管理工具和 UEFI 固件。

sudo apt update sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst virt-manager ovmf

如果你在 CentOS/RHEL 系环境中,安装命令类似:

sudo yum install -y qemu-kvm libvirt virt-install virt-manager edk2-ovmf

安装完成后,启动 libvirtd 守护进程并设置开机自启:

sudo systemctl enable --now libvirtd sudo systemctl status libvirtd

如果systemctl status显示active (running),说明管理服务已经正常。

接下来要把当前用户加入 libvirt 和 kvm 用户组,否则每次执行 virsh 命令都需要加 sudo,比较麻烦:

sudo usermod -aG libvirt $(whoami) sudo usermod -aG kvm $(whoami)

执行完后必须重新登录一次,用户组才会生效。如果不想重新登录,可以使用newgrp libvirt临时切换。

最后验证安装结果:

virsh version virsh list --all

virsh version会输出 libvirt 版本信息,virsh list --all应该显示空的虚拟机列表,比如:

Id Name State --------------------

到这里,KVM 的软件栈已经准备好了。值得强调的一点是,安装过程本身并不复杂,真正复杂的是理解安装的这些包分别承担什么角色。如果你之后看到virsh找不到 socket,或者libvirt无法连接,大概率是守护进程没有启动,或者当前用户没有权限。不要一上来就重装系统。

5. 创建第一台 KVM 测试机(KVM1.25)

现在开始创建第一台测试虚拟机。在项目里我给它起的名字是kvm1.25。名字只是一个标识,相当于给虚拟机做标签,不影响性能,也不影响内部系统识别。

创建虚拟机有两条主路径:命令行virt-install和图形界面virt-manager。生产环境我建议优先掌握命令行,因为可以脚本化、可以参数化,后续批量创建时效率差距会非常大。

先准备一个操作系统 ISO 镜像文件。我把 Ubuntu 22.04 Server 的 ISO 放到了/opt/iso/目录。然后创建一个虚拟磁盘文件。虚拟磁盘格式我推荐用qcow2,支持写时复制、快照和稀疏文件,默认情况下不会占用全部预分配空间。

5.1 用 virt-install 创建虚拟机

下面是一份最小可用的创建命令:

sudo virt-install \ --name kvm1.25 \ --memory 2048 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/kvm1.25.qcow2,size=20,format=qcow2 \ --cdrom /opt/iso/ubuntu-22.04.3-live-server-amd64.iso \ --os-variant ubuntu22.04 \ --network network=default \ --graphics spice \ --video qxl

解释一下每个参数的作用:

  • --name kvm1.25:虚拟机名称,以后执行virsh start kvm1.25virsh shutdown kvm1.25时都用这个名字。
  • --memory 2048:分配给虚拟机的内存大小,单位 MB。首次测试 2 GB 够用,生产环境按业务评估,不要贪多。
  • --vcpus 2:分配给虚拟机的 CPU 核数。
  • --disk path=...,size=20,format=qcow2:指定虚拟磁盘路径,预分配 20 GB,使用 qcow2 格式。
  • --cdrom /opt/iso/...:挂载系统安装镜像。
  • --os-variant ubuntu22.04:告诉 libvirt 针对该系统做优化。可以通过osinfo-query os查看系统支持列表。
  • --network network=default:使用 libvirt 默认的 NAT 网络。
  • --graphics spice:启用 SPICE 显示协议。这个参数非常重要,它决定了你能不能做剪贴板互通、无缝窗口等操作。
  • --video qxl:使用 QXL 显卡。QXL 专门为虚拟桌面优化,配合 SPICE 能提高图形显示效率。

执行命令后,virt-install 会进入一个交互界面,让你完成系统安装。如果是在有图形界面的宿主机上执行,会弹出 virt-viewer 窗口。如果是 SSH 登录的服务器,最好在脚本里加上--graphics vnc或者使用 headless 方式。

如果当前服务器没有图形环境,推荐加两个参数:

sudo virt-install \ --name kvm1.25 \ --memory 2048 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/kvm1.25.qcow2,size=20,format=qcow2 \ --cdrom /opt/iso/ubuntu-22.04.3-live-server-amd64.iso \ --os-variant ubuntu22.04 \ --network network=default \ --graphics spice \ --video qxl \ --virt-type kvm \ --noautoconsole

--noautoconsole后,virt-install 不会自动弹出图形窗口,创建完成即返回命令行。之后你可以用 virt-manager 或者 SPICE 客户端连接过去完成安装。

5.2 用 virt-manager 启动图形界面

如果宿主机安装了桌面环境,直接启动 virt-manager:

virt-manager

然后在 GUI 里点击左上角“新建虚拟机”,选择“本地安装介质”,选择 ISO,再分配内存和 CPU,最后指定磁盘即可。virt-manager 本质上调用的是与virt-install相同的底层 API,只是把操作界面图形化了。

第一次操作我不建议只看 GUI,命令行的含义更直观,排错时你也更容易理解系统在做什么。

5.3 安装 Guest OS 后的基础检查

系统安装完成后,先不要急着装业务,先做三个基础检查:

virsh list --all virsh dominfo kvm1.25 virsh dumpxml kvm1.25 | grep -E '(memory|vcpu|mac address)'

如果virsh list --all能列出kvm1.25并且状态为running,说明虚拟机从 KVM 角度已经创建成功。接下来尝试从宿主机 ping 虚拟机 IP,或者通过 SSH 登录虚拟机。如果你使用的默认 NAT 网络,虚拟机通常会自动获取 192.168.122.x 网段 IP。

6. 运行结果与效果验证

创建虚拟机只是第一步,我们需要验证这台测试机是否真的可用。我建议按下面四个层面逐项验收。

第一层面:libvirt 状态验证。

virsh list --all virsh dominfo kvm1.25

预期输出中有State: runningCPU(s): 2Max memory: 2097152 KiB等信息。若状态为shut off,需要手动启动:

virsh start kvm1.25

第二层面:Guest OS 网络验证。

在虚拟机内执行:

ip addr show ping -c 4 8.8.8.8

如果外网通,说明默认 NAT 网络工作正常。如果内网能通,外网不通,通常是因为宿主机的iptables转发规则还没有生效,或者是内核ip_forward未开启。可以临时打开转发:

sudo sysctl -w net.ipv4.ip_forward=1

第三层面:CPU 和内存资源验证。

在宿主机上执行:

virsh vcpupin kvm1.25 virsh vcpuinfo kvm1.25

在 Guest OS 里执行:

lscpu free -h

这里的核心判断标准是:Guest OS 看到的 CPU 数和内存数,是否与virt-install分配的参数一致。如果不一致,很可能是 virtio 驱动没加载完整,或者你没有重启 Guest OS。

第四层面:快照与回滚验证。

测试虚拟机最核心的价值之一就是可以随便折腾、出了事直接回滚。用快照测试一下:

virsh snapshot-create-as kvm1.25 --name "after-install" virsh snapshot-list kvm1.25

之后再在虚拟机里改坏配置,执行:

virsh snapshot-revert kvm1.25 --snapshotname "after-install"

这一步能直接证明 KVM 的快照能力是可靠的,也是后续所有实验的安全兜底。

每次验收都要有输出对比,不要只看命令“没报错”就认为成功。比如你运行virsh list,就得确认列出的是kvm1.25而不是其他残留实例。你运行free -h,就得确认 2G 内存确实被识别。实践中的“成功”必须落到可观察的指标上,否则就等于没验证。

7. 常见问题与排查思路

新手测试 KVM 时,最容易遇到下面四类问题。每一类我都会给出现象、原因、排查方式和解决方案。

问题现象可能原因排查方式解决方案
虚拟机启动失败,提示/dev/kvm不存在CPU 虚拟化未开启或宿主机不支持执行ls -l /dev/kvm,用lscpu查看虚拟化标志进入 BIOS 开启 VT-x/AMD-V,或确认云厂商支持嵌套虚拟化
virsh list无法连接 libvirt socketlibvirtd 未启动或当前用户不在 libvirt 组执行systemctl status libvirtd,执行groups查看用户组启动 libvirtd,将用户加入 libvirt 组后重新登录
剪贴板无法与 Guest OS 互通没有安装 SPICE 客户端工具,或显卡驱动未安装在 Guest OS 中检查 spice-vdagent 进程是否存在安装并启动 spice-vdagent
KVM 虚拟机全屏后无法缩小图形驱动和窗口管理器集成缺失查看是否存在 QXL 渲染异常安装 qemu-guest-agent 和 spice-vdagent,切换 virtio 显卡
需要 UEFI 启动但找不到 UEFI 固件宿主机未安装 OVMF 固件包检查/usr/share/OVMF/目录Ubuntu 安装 ovmf,CentOS 安装 edk2-ovmf
虚拟机可以 PING 通,但外网不通宿主机未开启 IP 转发或 iptables 规则异常执行sysctl net.ipv4.ip_forward开启 ip_forward,并确认 NAT 规则

下面详细展开三个最容易困惑的点。

7.1 剪贴板互通

所谓“KVM 内外剪贴板互通”,指的是在 virt-manager 打开的虚拟机窗口里,把宿主机上的文本复制粘贴到 Guest OS 里。很多人以为这应该默认可用,实际不是。

剪贴板互通依赖的是 SPICE 协议下的主机与客户机共享通道。Guest OS 里必须安装spice-vdagent,宿主机端要安装spice-vdagentvirgl等客户端库。在 Ubuntu Guest 中可以这样安装:

sudo apt install -y spice-vdagent systemctl start spice-vdagent

安装后重新登录 Guest OS 桌面,剪贴板互通才会生效。对于纯命令行服务器,其实不需要剪贴板互通,直接用 SSH 即可。也就是说,这个功能主要面向桌面虚拟化场景,服务器场景可以关闭 SPICE 以减少资源开销。

7.2 全屏无法缩小

“KVM 链接服务器全屏无法缩小”这个热搜词,通常指的是使用 virt-manager 或 virt-viewer 连接远程虚拟机时,窗口切到全屏后无法退出,或者界面被强制拉伸,鼠标还被困在虚拟机里。

一般原因有两个。第一,Guest OS 没有安装增强驱动,分辨率无法动态跟随窗口调整。第二,SPICE 的 attention 键被占用,导致全屏快捷键无效。KVM 下全屏切换的默认快捷键是Ctrl+Alt+P,但如果你之前设置的是抓取鼠标热键,比如Ctrl+Alt+G,两者会出现冲突。

解决方法是:

  1. 安装增强组件。
sudo apt install -y spice-vdagent qemu-guest-agent
  1. 在 virt-manager 菜单里找到“查看” -> “缩放显示模式”,改为“总是缩放”。

  2. 如果还是无法缩小,可以用快捷键切换全屏状态,或执行virsh send-key向 Guest 发送键值组合。

7.3 UEFI 固件缺失

KVM 默认使用 SeaBIOS 引导,但有些操作系统要求 UEFI 启动,比如部分 Windows Server 版本或者镜像集成了安全引导的系统。如果创建虚拟机时指定了--boot uefi,宿主机却没有安装 OVMF 固件,virt-install 就会报如下错误:

ERROR Unable to find UEFI firmware

解决方案是安装 OVMF。Ubuntu 上:

sudo apt install -y ovmf

CentOS/RHEL 上:

sudo yum install -y edk2-ovmf

安装完成后,可以在创建虚拟机时显式指定 UEFI 固件路径:

sudo virt-install \ --name kvm1.25 \ --memory 2048 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/kvm1.25-uefi.qcow2,size=20,format=qcow2 \ --cdrom /opt/iso/ubuntu-22.04.3-live-server-amd64.iso \ --os-variant ubuntu22.04 \ --boot uefi

注意:UEFI 和 BIOS 引导模式会影响磁盘分区表。同一块虚拟磁盘不要在两种引导模式之间反复切换,否则容易引导失败。

8. 最佳实践与生产环境建议

测试跑通了,接下来要考虑怎么把它用到真实项目中。下面是几条从实践里沉淀出来的建议。

第一,虚拟磁盘一律用 qcow2,不要用 raw。qcow2 支持快照、压缩、稀疏存储,raw 虽然性能略高一点,但维护成本高很多。如果追求磁盘性能,可以先创建 raw 磁盘,再用qemu-img convert转成 qcow2 结合 IO 调优参数,而不是在初始化时直接裸用 raw。

qemu-img create -f qcow2 /var/lib/libvirt/images/kvm1.25.qcow2 20G

第二,内存分配要留余量。宿主机内存必须预留至少 2 GB 给系统内核和 libvirtd 运行。贸然把所有内存都分配给虚拟机,可能导致宿主机 OOM,直接杀掉物理机上所有进程,包括你正在远程连接的那个 SSH 会话。这在生产环境里是极其严重的事故。

第三,网络模式按场景选择。默认 NAT 模式只适合临时测试,因为外部无法直接访问虚拟机。生产环境如果要让虚拟机对外提供业务,建议用桥接模式,让虚拟机直接接入物理网络。桥接模式的配置在 libvirt 中一般通过网桥br0实现:

<interface type='bridge'> <source bridge='br0'/> <model type='virtio'/> </interface>

但改桥接前,请一定确认物理网卡和交换机的配置允许,否则会导致宿主机断网,无法远程恢复。

第四,在安全边界上要谨慎。KVM 是根权限级的虚拟化平台,操作时默认使用普通用户加sudo即可,不建议长期用 root 执行所有命令。对于生产虚拟机,尽量不要执行virsh destroy这种强制断电操作,先尝试virsh shutdown,让它优雅关闭。强制关闭有可能导致文件系统损坏。

第五,快照是很强的工具,但不要依赖单点。虚拟机快照不能替代备份。快照文件通常和原始磁盘在同一个存储上,如果存储盘故障,快照也一起丢失。生产环境中建议将关键虚拟机定期导出为离线镜像,放到独立备份存储上:

qemu-img convert -O qcow2 /var/lib/libvirt/images/kvm1.25.qcow2 /backup/kvm1.25-backup.qcow2

第六,版本兼容问题要提前测试。KVM、QEMU、libvirt 的版本组合非常多,不同发行版自带的 KVM 内核补丁也不一样。在实际项目中引入一套虚拟机模板时,先在测试环境完整跑一遍创建、启动、快照、迁移,再复制到生产环境使用。这是一种低成本、高回报的工程习惯。

9. 总结与后续学习方向

从零到一创建一台 KVM 虚拟机,这个流程本身不复杂。真正有价值的是你理解了整套架构之间的关系:KVM 是内核模块,QEMU 负责设备模拟,libvirt 负责管理,virt-install 是入口工具。只有当这些概念在脑中标定清楚,你才会在出现问题时知道去查哪个日志、看哪个进程、改哪个配置。

这篇文章里,你已经完成了:

  1. 确认 CPU 是否支持硬件虚拟化。
  2. 安装完整 KVM 软件栈。
  3. virt-install创建第一台kvm1.25测试机。
  4. 通过virsh命令验证虚拟机状态。
  5. 解决了剪贴板互通、全屏缩放、UEFI 固件等常见问题。
  6. 拿到了几条针对生产环境的工程建议。

下一步建议从两个方向继续提升。一是深入网络层,学习如何创建自定义网桥、vLAN 隔离和 NAT 转发规则,这是从“会建虚拟机”到“会做服务器虚拟化组网”的必由之路。二是学习自动化,用virt-install --unattended或者 cloud-init 批量部署 Guest OS,解决团队里反复手工安装系统的效率问题。

最后留一个建议:第一次测试 KVM 时,不要急着调度太多资源。先把一台 2 GB 内存、20 GB 磁盘的小机器完整跑通,再逐步加 CPU、加内存、接桥接网络。KVM 本身是个非常稳定的平台,大多数问题上不是它不行,而是使用者在第一次配置时把宿主机资源榨干,把网络配置改错,然后还回不去。从最小案例开始,你的第一台 KVM 测试机会比预想中顺利很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 9:17:08

CodexBar 语言切换指南:不碰系统设置,3 步把界面切成中文

CodexBar 语言切换指南&#xff1a;不碰系统设置&#xff0c;3 步把界面切成中文 【免费下载链接】CodexBar Show usage stats for OpenAI Codex and Claude Code, without having to login. 项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar 刚装完 CodexBa…

作者头像 李华
网站建设 2026/9/7 9:09:06

语音降噪算法嵌入式移植实战:从MATLAB原型到真机

简介&#xff1a;面向音频处理与实时通信开发者的语音降噪算法工程包&#xff0c;基于 Speex 库实现噪声抑制功能&#xff0c;能够从交通、风噪等复杂环境中提取清晰人声&#xff0c;适用于电话会议、远程教育、语音识别等场景&#xff0c;也适合需要在嵌入式或移动平台集成降噪…

作者头像 李华
网站建设 2026/9/7 9:08:43

导师力荐!2026最新AI论文网站测评,合规高效一步到位

还在为写期刊论文、毕业论文或者职称论文头疼吗&#xff1f;亲自动手写论文时&#xff0c;要面对成堆的文献资料&#xff0c;简直像大海捞针&#xff0c;格式要求又特别复杂&#xff0c;反复修改更是让人心累&#xff0c;写作效率非常低。其实&#xff0c;借助AI论文写作工具可…

作者头像 李华
网站建设 2026/9/7 9:06:54

Tomcat 8绿色版完整指南:下载配置、端口修改与JVM调优实战

简介&#xff1a;这份7z压缩包提供的是Tomcat 8的最新绿色版安装包&#xff0c;面向需要快速搭建Java Web运行环境的开发者与JSP初学者。Tomcat作为轻量级开源应用服务器&#xff0c;非常适合中小型系统与低并发场景&#xff0c;绿色版则省去安装步骤&#xff0c;解压后可直接用…

作者头像 李华
网站建设 2026/9/7 9:05:55

STM32C5通过I2C轮询读取LSM6D3TR-C陀螺仪数据完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华