中文

什么是 Linux VPS 上的 KVM 虚拟化

1 min
VPS/VDS 主机

KVM(Kernel-based Virtual Machine)是内置于 Linux 内核的虚拟化技术。在 VPS Linux Infrawire 上,这意味着您的服务器像一台拥有独立内核的真实机器,而不是别人系统里的一个隔离文件夹。本指南解释它与容器技术的区别,并演示如何自行验证。

📋 前提条件

  • 一台 Linux VPS(Ubuntu 24.04、Debian 12、AlmaLinux 9 或 Rocky Linux 9)
  • 以 root 或具有 sudo 权限的用户进行 SSH 访问
  • 具备基本的命令行知识

1. KVM 的工作原理

KVM 把物理主机的 Linux 内核变成虚拟机监控器(hypervisor)。每台虚拟机都是由 QEMU 管理的普通进程,但它看到的是模拟的硬件:CPU、内存、磁盘和网卡。借助 CPU 的虚拟化扩展(Intel VT-x、AMD-V),客户机代码几乎以原生速度运行。

在虚拟机内部,您安装的是完整的操作系统,拥有自己的内核、自己的 init 系统和自己的进程。在您看来,它就是一台独立服务器。

2. KVM 与 OpenVZ、LXC 的对比

容器技术的工作方式不同:

  • OpenVZ 和 LXC:所有容器共享主机的内核。您只得到一个隔离的用户空间,无法更换内核、加载模块或选择内核版本。
  • KVM:完全虚拟化。每台 VPS 启动自己的内核,并拥有独立的内存和磁盘分配。

容器更轻量,但受限于主机内核允许的范围。KVM VPS 以稍多的内存开销换来更大的自由度。

3. 为什么它对 VPS 很重要

拥有自己的内核,您可以:

  • 加载内核模块,例如 WireGuard、br_netfilter 或 nf_conntrack
  • 无限制地运行 Docker 及其他容器引擎(cgroups、overlay 文件系统、iptables)
  • 使用 sysctl 调优系统(网络缓冲区、IP 转发、BBR 拥塞控制)
  • 使用自己的防火墙、交换文件和任意文件系统
  • 安装发行版提供的其他内核版本
Bash
# 显示当前运行的内核 uname -r # 显示可以修改的内核参数 sudo sysctl net.ipv4.ip_forward net.ipv4.tcp_congestion_control

4. 验证您是否运行在 KVM 上

最简单的方法是使用 systemd-detect-virt:

Bash
systemd-detect-virt # 预期输出:kvm

如果命令输出 openvz、lxc 或 docker,说明您处在容器中。none 表示物理机。

可以用 lscpu 确认:

Bash
lscpu | grep -iE 'hypervisor|virtualization type' # Hypervisor vendor: KVM # Virtualization type: full

也可以查看内核启动信息:

Bash
sudo dmesg | grep -i -E 'kvm|hypervisor' # Hypervisor detected: KVM

最后,hostnamectl 会显示一行 Virtualization: kvm。

5. 测试 KVM 带来的能力

检查您能否加载模块并运行容器:

Bash
# Ubuntu 24.04 / Debian 12:WireGuard 模块 sudo modprobe wireguard lsmod | grep wireguard # 从发行版仓库安装 Docker 并运行测试容器 sudo apt update && sudo apt install -y docker.io sudo docker run --rm hello-world

在 AlmaLinux 9 或 Rocky 9 上,使用 sudo dnf install -y wireguard-tools 安装工具,并按照 Docker 官方文档(docs.docker.com)安装引擎。

🔧 故障排除

dmesg: read kernel buffer failed: Operation not permitted
内核将 dmesg 限制为 root 使用。请使用 sudo 运行,或使用 sudo journalctl -k。

modprobe: FATAL: Module wireguard not found
部分精简镜像缺少额外模块。在 Ubuntu 上请安装 linux-modules-extra-$(uname -r)。如果刚升级过内核,请先重启,使 uname -r 与已安装的模块一致。

systemd-detect-virt: command not found
镜像中没有 systemd,或系统过于精简。请改用 lscpu 或 dmesg,或安装 systemd 软件包。

Docker 报告 cgroups 或 iptables 错误
用 systemctl status docker 检查服务是否在运行,并确认没有在自定义防火墙配置中禁用 nf_tables 或 iptables。


🚀 现在您已经清楚 KVM 为 VPS 带来了什么:真正的内核、完全的控制权,以及不受主机隐藏限制的自由。

及时了解最新的优惠、折扣和特别促销活动。

查看促销

我们使用Cookie

我们使用分析性Cookie来改善您在我们网站上的体验。数据不会出售给第三方。了解更多请查看我们的 隐私政策.