kvm 命令行启动是一种通过直接输入指令来创建和管理虚拟机的方式,相比图形化界面,命令行启动具有更高的灵活性和自动化程度,尤其适合服务器环境或需要批量部署虚拟机的场景,以下将详细介绍 kvm 命令行启动的完整流程,包括环境准备、命令参数解析、虚拟机创建、磁盘管理、网络配置及常见问题处理等内容。

环境准备
在使用 kvm 命令行启动虚拟机前,需确保宿主机系统满足基本要求,检查 cpu 是否支持虚拟化技术(intel vt-x 或 amd-v),可通过命令 grep -E 'vmx|svm' /proc/cpuinfo 验证,若输出结果为空,则需在 bios 中开启虚拟化支持,安装必要的软件包,以 ubuntu 系统为例,执行 sudo apt update && sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst,qemu-kvm 提供 kvm 内核模块,libvirt 用于虚拟机管理,bridge-utils 实现网络桥接,安装完成后,确认用户是否加入 libvirt 和 kvm 用户组,避免权限问题:sudo usermod -aG libvirt,kvm $user,随后重新登录使配置生效,启动 libvirt 服务并设置为开机自启:sudo systemctl enable --now libvirtd,使用 virsh list --all 验证 libvirt 是否正常工作。
虚拟机磁盘准备
虚拟机的磁盘文件是虚拟机运行的基础,kvm 支持多种磁盘格式,如 raw、qcow2 等,qcow2 格式支持快照、压缩等功能,推荐使用,创建磁盘文件可通过 qemu-img 命令实现,例如创建一个 20gb 的 qcow2 格式磁盘:qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 20G,若需预分配空间(避免磁盘碎片),可添加 -o preallocation=full 参数;若需创建基于模板磁盘的快照磁盘,可使用 -b 参数指定 backing file,如 qemu-img create -f qcow2 -b /var/lib/libvirt/images/template.qcow2 /var/lib/libvirt/images/vm1.qcow2,磁盘创建后,可通过 qemu-img info /var/lib/libvirt/images/vm1.qcow2 查看磁盘详细信息,包括格式、大小、虚拟大小等。
网络配置
kvm 虚拟机网络模式常见有 nat、桥接(bridge)、仅主机(host-only)等,桥接模式可使虚拟机直接连接到物理网络,获得独立 ip,适合生产环境,配置桥接网络需先创建网桥接口,编辑 /etc/netplan/01-netcfg.yaml(以 netplan 为例),添加如下配置:
network:
version: 2
ethernets:
ens33: # 物理网卡名称
dhcp4: no
bridges:
br0:
interfaces: [ens33]
dhcp4: yes
执行 sudo netplan apply 使配置生效,随后通过 ip a 查看 br0 接口是否创建成功,在 libvirt 中,默认会创建一个 virbr0 nat 网络,若需使用自定义桥接网络,可在创建虚拟机时通过 --network bridge=br0 参数指定。

命令行启动虚拟机
使用 virt-install 命令可一站式完成虚拟机创建与启动,其常用参数如下表所示:
| 参数 | 作用 | 示例 |
|---|---|---|
--name |
指定虚拟机名称 | --name vm1 |
--memory |
分配内存大小(mb) | --memory 2048 |
--vcpus |
分配 cpu 核心数 | --vcpus 2 |
--disk |
指定磁盘路径及格式 | --disk path=/var/lib/libvirt/images/vm1.qcow2,size=20,format=qcow2 |
--cdrom |
指定安装镜像路径 | --cdrom /path/to/ubuntu.iso |
--network |
配置网络模式 | --network bridge=br0 |
--os-variant |
指定操作系统类型 | --os-variant ubuntu22.04 |
--graphics |
图形显示方式(none 表示无图形) | --graphics none |
--console |
配置控制台输出 | --console pty,target_type=serial |
--import |
从现有磁盘导入系统(无需安装) | --import |
示例1:全新安装虚拟机
sudo virt-install \ --name vm1 \ --memory 2048 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/vm1.qcow2,size=20,format=qcow2 \ --cdrom /home/user/ubuntu-22.04.3-live-server-amd64.iso \ --network bridge=br0 \ --os-variant ubuntu22.04 \ --graphics none \ --console pty,target_type=serial
该命令将以命令行方式启动虚拟机安装过程,安装完成后可通过 virsh start vm1 启动虚拟机。
示例2:从现有磁盘导入虚拟机
若已有安装好系统的磁盘文件,可直接导入并启动:
sudo virt-install \ --name vm2 \ --memory 2048 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/vm2.qcow2 \ --import \ --network bridge=br0 \ --os-variant ubuntu22.04 \ --graphics none \ --console pty,target_type=serial
虚拟机管理
启动虚拟机后,可通过 libvirt 命令进行管理。virsh list 查看运行中的虚拟机,virsh list --all 查看所有虚拟机(包括关闭状态);virsh start vm1 启动虚拟机,virsh shutdown vm1 正常关机,virsh destroy vm1 强制关闭;virsh undefine vm1 删除虚拟机配置文件(不删除磁盘文件),若需进入虚拟机控制台,可使用 virsh console vm1,需确保虚拟机系统安装了 serial 终端(如 ubuntu 安装时需选择 "SSH server" 并勾选 "OpenSSH server")。

常见问题处理
- 启动时报错 "Permission denied":通常是由于用户未加入 libvirt 或 kvm 用户组,需执行
sudo usermod -aG libvirt,kvm $user并重新登录。 - 网络不通:检查桥接网络是否配置正确,确保虚拟机网卡模式为 bridge,且物理网卡已加入网桥;若使用 nat 模式,检查防火墙是否阻止了端口转发。
- 磁盘无法识别:确认磁盘路径是否存在,格式是否正确,可通过
qemu-img check检查磁盘文件完整性。
相关问答FAQs
Q1:如何修改已创建虚拟机的配置(如内存、cpu)?
A1:使用 virsh edit vm1 命令编辑虚拟机配置文件,在 <memory> 和 <vcpu> 标签中修改内存大小(单位为 kb)和 cpu 核心数,保存后执行 virsh define vm1 使配置生效,若虚拟机正在运行,需执行 virsh reboot vm1 重启生效。
Q2:如何为虚拟机添加新磁盘?
A2:首先创建新的磁盘文件:qemu-img create -f qcow2 /var/lib/libvirt/images/vm1_disk2.qcow2 10G,然后使用 virsh attach-disk vm1 /var/lib/libvirt/images/vm1_disk2.qcow2 vdb --persistent 命令将磁盘附加到虚拟机,vdb 为虚拟机内的设备名,--persistent 表示配置持久化,进入虚拟机系统后,使用 fdisk -l 查看新磁盘,分区格式化后即可使用。
