菜鸟科技网

kvm命令行启动如何操作?

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

kvm命令行启动如何操作?-图1
(图片来源网络,侵删)

环境准备

在使用 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 参数指定。

kvm命令行启动如何操作?-图2
(图片来源网络,侵删)

命令行启动虚拟机

使用 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")。

kvm命令行启动如何操作?-图3
(图片来源网络,侵删)

常见问题处理

  1. 启动时报错 "Permission denied":通常是由于用户未加入 libvirt 或 kvm 用户组,需执行 sudo usermod -aG libvirt,kvm $user 并重新登录。
  2. 网络不通:检查桥接网络是否配置正确,确保虚拟机网卡模式为 bridge,且物理网卡已加入网桥;若使用 nat 模式,检查防火墙是否阻止了端口转发。
  3. 磁盘无法识别:确认磁盘路径是否存在,格式是否正确,可通过 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 查看新磁盘,分区格式化后即可使用。

分享:
扫描分享到社交APP
上一篇
下一篇