1. 启用虚拟化
检查 CPU 是否支持虚拟化:
egrep -c '(vmx|svm)' /proc/cpuinfo # 返回 ≥1 表示支持
Bash安装 KVM 相关软件包:
dnf install -y qemu-kvm libvirt virt-install virt-viewer
Bash启动虚拟化服务:
systemctl enable --now libvirtd
Bash检查当前主机是否满足 KVM 虚拟化运行条件:
virt-host-validate
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device '/dev/kvm' exists : PASS
QEMU: Checking if device '/dev/kvm' is accessible : PASS
QEMU: Checking if device '/dev/vhost-net' exists : PASS
QEMU: Checking if device '/dev/net/tun' exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
Bash2. 创建虚拟机
准备镜像:
# 下载一个镜像到宿主机
mkdir -p /kvm/iso/
cd /kvm/iso/
ll
-rw-r--r-- 1 root root 2252013568 Jul 10 14:14 Rocky-9.6-x86_64-minimal.iso
Bash创建磁盘镜像路径:
mkdir -p /kvm/images/
Bash创建网桥:(可选项,也可以默认的 NAT 模式)
# 查看网络设备
nmcli device
# 创建网桥
nmcli connection add type bridge con-name br0 ifname br0
# 将上面查看到达物理网卡关联到网桥上,这里是 eno1
nmcli connection add type bridge-slave ifname eno1 master br0
# 先停止物理网卡原来的连接,然后启用桥接
nmcli connection down "eno1" && nmcli connection up br0
# 等待 DHCP 获取IP,然后查看 IP 配置到了 br0 上
ip addr
# 设置开机使用 br0 网桥连接
nmcli con mod "eno1" connection.autoconnect no
nmcli con mod br0 connection.autoconnect on
Bash创建虚拟机:
virt-install \
--name rocky-linux \
--vcpus 2 \
--memory 4096 \
--disk path=/kvm/images/rocky-linux.qcow2,size=10 \
--location /kvm/iso/Rocky-9.6-x86_64-minimal.iso \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--os-variant rocky9 \
--console pty,target_type=serial \
--extra-args 'console=ttyS0'
# 添加 --extra-args 'console=ttyS0' 参数时 --cdrom 需修改为 --location,否则会报错
Bash参数说明:
--name
: 虚拟机名称(如ubuntu-vm
)。--vcpus
: 虚拟 CPU 核心数(如2
)。--memory
: 内存大小(MB,如2048
= 2GB)。--disk path=...
: 指定虚拟磁盘路径和大小(单位 GB)。--cdrom
: 指定安装 ISO 镜像。--network
: 网络配置(network=default
使用默认 NAT 网络)。--graphics
: 启用 VNC 图形界面。-graphics none 禁用图形界面--os-variant
: 优化虚拟机配置(通过osinfo-query os
查看支持的系统)。--console pty,target_type=serial
: 配置串行控制台。--extra-args 'console=ttyS0'
: 传递额外的参数给内核,设置控制台为ttyS0
。
连接到虚拟机的串行控制台文本安装:
virsh console rocky-linux
BashVNC 连接图形界面安装:
virt-viewer rocky-linux # 本地图形界面
# 在宿主机上查看虚拟机 VNC 端口
virsh vncdisplay rocky-linux # 输出类似 :0(表示 5900 端口)、1(表示 5901 端口)
# 远程安装,使用 VNC 客户端连接宿主机 IP + 端口。
vncviewer <宿主机IP>:5900
Bash3. 虚拟机基本管理命令
连接命令:
# 连接虚拟机控制台
virsh console rocky-linux
# 退出虚拟机控制台
ctrl ]
Bash查看虚拟机信息命令:
# 查看所有虚拟机(包括关闭的)
virsh list --all
# 查看虚拟机概要信息
virsh dominfo rocky-linux
# 查看 CPU 配置
virsh vcpuinfo rocky-linux
# 查看内存配置
virsh dommemstat rocky-linux
# 查看虚拟机磁盘信息
virsh domblklist rocky-linux
Bash基本管理命令:
# 启动虚拟机
virsh start rocky-linux
# 关闭虚拟机
virsh shutdown rocky-linux
# 强制停止
virsh destroy rocky-linux
# 删除虚拟机
virsh undefine rocky-linux
# 启用虚拟机的自动启动
virsh autostart rocky-linux
# 禁用虚拟机的自动启动
virsh autostart rocky-linux --disable
# 创建磁盘快照
virsh snapshot-create-as \
--domain rocky-linux \
--name snap1 \
--description "第一次快照" \
--disk-only \
--diskspec vda,snapshot=external,file=/var/lib/libvirt/images/rocky-linux-snap1.qcow2
# --diskspec:
# vda 指定虚拟机的磁盘
# 快照类型:external 创建外部快照(生成增量文件,原磁盘变为只读),internal 内部快照(存储在单个磁盘文件中,仅限 qcow2 格式)
# file=:指定外部快照文件的存储路径
# --disk-only:仅对磁盘做快照(不保存内存状态)。
# 创建完整快照
virsh snapshot-create-as \
--domain rocky-linux \
--name snap2 \
--description "完整快照(内存+磁盘)" \
--atomic
# --atomic:确保快照操作的原子性(要么完全成功,要么失败不影响原状态)。
# 不指定外部快照,则使用内部快照
# 查看快照
virsh snapshot-list rocky-linux
Name Creation Time State
----------------------------------------------------
snap1 2025-07-12 12:02:44 +0800 disk-snapshot
snap2 2025-07-12 12:03:08 +0800 running
# 恢复快照
# 关闭虚拟机(如果正在运行)
virsh shutdown rocky-linux
# 恢复到指定快照
virsh snapshot-revert rocky-linux --snapshotname snap1
# 删除快照
virsh snapshot-delete rocky-linux --snapshotname snap1
Bash修改配置命令:
# 编辑虚拟机配置,文件路径 /etc/libvirt/qemu/rocky-linux.xml
virsh edit rocky-linux
# 通过命名修改硬件配置
# 将虚拟机 CPU 核心数改为 4
virt-xml rocky-linux --edit --vcpu 4
# 修改内存大小
virt-xml rocky-linux --edit --memory 8192 # 注意:单位是 MiB
# 添加新磁盘
# 添加一个 20GB 的磁盘
virt-xml rocky-linux --add-device --disk /var/lib/libvirt/images/rocky-linux-disk2.qcow2,size=20 --update
# 删除磁盘
# 删除指定磁盘(需先确认磁盘设备名,如 vdb)
virt-xml rocky-linux --remove-device --disk target=vdb --update
# 增大虚拟机磁盘文件
## 关闭虚拟机
virsh shutdown rocky-linux
## 调整磁盘文件大小
qemu-img resize /kvm/images/rocky-linux.qcow2 +10G # + 增加 10GB,直接使用 30G 则直接设置为 30GB(绝对值)。
chown qemu:qemu /kvm/images/rocky-linux.qcow2
## 启动虚拟机
virsh start rocky-linux
virsh console rocky-linux # 连接控制台
## 在虚拟机中查看磁盘,可以将空闲空间新建一个分区。推荐使用 lvm
lsblk
Bash复制虚拟机:
# 先关闭虚拟机
virsh shutdown rocky-linux
virt-clone \
--original rocky-linux \
--name rocky-linux-copy \
--auto-clone
Bash