想在 Linux 上跑一台虚拟机,搜出来的名词能凑一副扑克牌:KVM、QEMU、libvirt、virsh、virt-manager……它们不是同一样东西的不同名字,而是三层各管一段。这篇先把三者的关系讲清楚,再从检查 CPU 开始,用命令行装出第一台能开机、能联网、能随用随开的虚拟机。桌面点选党可以直接看VMware 装 Linux 虚拟机那篇,图形界面思路是相通的。
三个名字一台戏:KVM、QEMU、libvirt
用造车打比方:
- KVM 是发动机。它是 Linux 内核里的模块,把 CPU 的硬件虚拟化能力(Intel VT-x / AMD-V)直接交给内核调度。它本身没有界面,也不管磁盘、网卡这些外设,只负责让虚拟机的 CPU 指令跑出接近物理机的速度。
- QEMU 是整辆车。它是一个完整的模拟器,能模拟 CPU、内存、磁盘、网卡、显卡全套设备。但纯软件模拟慢,所以它平时和 KVM 搭着开:CPU 指令交给 KVM 跑,外设由 QEMU 模拟——这就是常见的「QEMU/KVM」组合。
- libvirt 是方向盘和仪表盘。QEMU 的命令行参数出了名的长,libvirt 在它上面包了一层:每台虚拟机一份 XML 定义,守护进程统一管理生命周期,再配上
virsh命令行和 virt-manager 图形界面。我们日常操作的都是这一层。
所以「装 KVM」实际装的是一整串:内核模块本来就在内核里,要补的是 QEMU 程序和 libvirt 管理栈。后面你会看到 PVE 这类发行版,做的也只是把这串东西再包一层网页。
先确认 CPU 支持虚拟化
# vmx = Intel,svm = AMD;输出大于 0 即支持
egrep -c '(vmx|svm)' /proc/cpuinfo
# 确认 KVM 模块已加载
lsmod | grep kvm
第一条输出 0 的话,先重启进 BIOS,找 Intel Virtualization Technology 或 SVM Mode 打开。第二条看不到 kvm_intel(或 kvm_amd)的,用 modprobe kvm_intel 手动加载试试,报错就说明硬件或 BIOS 这关没过。
安装和权限
以 Debian / Ubuntu 为例:
apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst
# 让当前用户不用 sudo 也能管理虚拟机
usermod -aG libvirt $USER
# 重新登录后生效
virtinst 提供 virt-install 命令,等下装第一台就靠它。权限这步最容易被忽略:不加 libvirt 组,普通用户执行 virsh 会连不上 qemu:///system,报一堆看起来像服务没启动的错误——其实服务好好的,只是你不在组里。这和改 SSH 端口把自己锁在门外是同一类问题:服务正常,是准入环节出了岔子。
用 virt-install 装第一台
先把系统 ISO 放到一个 libvirt 有权限读的位置,比如 /var/lib/libvirt/images/,然后一条命令把虚拟机的骨架立起来:
virt-install \
--name deb12 \
--memory 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/deb12.qcow2,size=20,format=qcow2 \
--cdrom /var/lib/libvirt/images/debian-12-netinst.iso \
--network network=default \
--graphics vnc,listen=127.0.0.1 \
--noautoconsole
这条命令的含义:建一台叫 deb12 的机器,2GB 内存、2 核、20GB 磁盘(qcow2 格式,按需增长),从 ISO 启动,接在默认网络上,显示走本机 VNC。跑完它会自动弹出或提示如何连接控制台;服务器上没有桌面的,用 SSH 端口转发把 VNC 引到本地看安装画面:
# 在你自己的电脑上执行
ssh -L 5900:127.0.0.1:5900 user@server
# 然后用 VNC 客户端连 127.0.0.1:5900
进去就是普通系统安装界面,装完重启,一台虚拟机就有了。
virsh 日常操作
此后对这台机器的操作全部走 virsh:
virsh list --all # 所有虚拟机及状态
virsh start deb12 # 开机
virsh shutdown deb12 # 温柔关机(系统内执行关机)
virsh destroy deb12 # 直接断电(shutdown 无响应时用)
virsh autostart deb12 # 宿主机开机时自动启动它
virsh dominfo deb12 # 查看配置概况
这些命令适合写进脚本或记进服务为什么重启后没起来那篇讲的 systemd 单元里——虚拟机跟着宿主机自启,断电恢复后服务自己回来,人不用半夜爬起来敲命令。
网络:默认 NAT 还是桥接
- 默认 NAT(network=default):虚拟机能出网,但外面的设备主动访问不到它,适合自用;
- 桥接(bridge=br0):虚拟机直接拿到和宿主机同网段的 IP,NAS、Web 服务这种要被家里其他设备访问的,选这个。桥接要在宿主机上先建
br0,把物理网卡挂上去,各发行版写法略有差异。
判断标准就一条:这台虚拟机要不要「被别的设备找到」。要,就桥接;不要,NAT 省心。
什么时候该换 PVE
命令行这套跑顺之后,如果开始出现这些需求——想要网页界面、想要快照和整机备份一键化、家里不止一台物理机想做集群、想用 LXC 容器省内存——那就到了把这套手工搭的组合升级成发行版的时候:Proxmox VE 底下就是今天这套 KVM + QEMU + libvirt,只是把它包出了 Web 管理台和一整套运维工具。反过来说,理解了今天这三层关系,以后用 PVE 时看到的每个名词都知道它站在哪一层,出问题也知道往哪层查。




