当前位置: 首页 > news >正文

虚拟化技术 ——KVM

一、KVM 技术简介

KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是 Linux 内核原生支持的全虚拟化解决方案,依托 CPU 的硬件虚拟化技术(Intel VT-x/AMD-V)实现高效的虚拟机运行。它将 Linux 内核转变为 Hypervisor,可直接管理硬件资源,支持在同一物理机上运行多个独立的虚拟机(Guest OS),包括 Linux、Windows 等操作系统。

1.1 核心优势

  • 高性能:依赖硬件虚拟化加速,虚拟机性能接近物理机,无额外性能损耗
  • 原生集成:作为 Linux 内核模块,无需额外安装 Hypervisor,与 Linux 系统深度融合
  • 资源灵活分配:支持 CPU、内存、存储、网络资源的动态调整
  • 多系统支持:可运行 Linux、Windows、BSD 等多种 Guest OS
  • 开源免费:基于 GPL 协议,无商业许可成本,支持自定义扩展

1.2 架构组成

KVM 虚拟化架构主要包含三部分,各组件协同实现虚拟机生命周期管理:

  • KVM 模块:内核级模块,负责 CPU 和内存虚拟化,直接与硬件交互
  • QEMU:用户态工具,提供设备模拟(如网卡、磁盘、显卡)和虚拟机创建 / 销毁能力
  • Libvirt:开源 API 和管理工具集,统一管理 KVM、Xen 等虚拟化技术,屏蔽底层差异
  • 管理工具:virsh(命令行工具)、virt-manager(图形化工具),用于日常运维操作

二、安装前准备

2.1 硬件要求

  • CPU:必须支持硬件虚拟化(Intel VT-x 或 AMD-V),需在 BIOS/UEFI 中启用
  • 内存:物理机内存≥4GB(建议 8GB 以上,预留至少 2GB 给宿主机,剩余分配给虚拟机)
  • 存储:预留足够磁盘空间(单个虚拟机建议 20GB 以上,根据业务需求调整)
  • 操作系统:仅支持 Linux 系统(推荐 CentOS 7/8、Ubuntu 20.04/22.04、RHEL 7/8)

2.2 检查硬件虚拟化支持

在 Linux 终端执行以下命令,验证 CPU 是否支持硬件虚拟化:

# 方法1:查看CPU标志(Intel显示vmx,AMD显示svm)
grep -E 'vmx|svm' /proc/cpuinfo# 方法2:通过kvm-ok工具检查(需安装cpu-checker)
sudo apt install cpu-checker  # Ubuntu/Debian
# 或
sudo yum install cpu-checker  # CentOS/RHEL
sudo kvm-ok
  • 若输出 “INFO: /dev/kvm exists”,说明硬件支持且已启用;若提示 “KVM acceleration can't be used”,需进入 BIOS/UEFI 开启虚拟化(常见路径:BIOS → Advanced → CPU Configuration → Intel VT-x/AMD-V → Enable)

2.3 操作系统环境准备

  • 更新系统:确保系统内核和软件包为最新版本
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y# CentOS/RHEL
sudo yum update -y
  • 关闭 SELinux(CentOS/RHEL 需操作,Ubuntu 默认关闭):
# 临时关闭
sudo setenforce 0# 永久关闭(重启生效)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  • 关闭防火墙(测试环境可关闭,生产环境建议配置规则):
# Ubuntu/Debian(ufw)
sudo ufw disable && sudo ufw status# CentOS/RHEL(firewalld)
sudo systemctl stop firewalld && sudo systemctl disable firewalld

三、KVM 安装步骤

3.1 Ubuntu 20.04/22.04 安装

# 1. 安装KVM核心组件和管理工具
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager# 2. 将当前用户添加到libvirt和kvm组(避免每次操作需sudo)
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER# 3. 重启libvirtd服务
sudo systemctl restart libvirtd# 4. 验证安装(查看KVM模块是否加载)
lsmod | grep kvm
# 输出kvm_intel(Intel CPU)或kvm_amd(AMD CPU)表示加载成功# 5. 验证libvirt服务状态
sudo systemctl status libvirtd
# 显示“active (running)”表示服务正常

3.2 CentOS 7/8 安装

# 1. 安装KVM相关包(CentOS 7)
sudo yum install -y qemu-kvm libvirt libvirt-python virt-manager virt-viewer bridge-utils# CentOS 8(使用dnf)
sudo dnf install -y qemu-kvm libvirt virt-manager virt-viewer bridge-utils# 2. 启动并设置libvirtd开机自启
sudo systemctl start libvirtd
sudo systemctl enable libvirtd# 3. 添加用户到libvirt和kvm组
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER# 4. 验证安装
lsmod | grep kvm
sudo systemctl status libvirtd

3.3 图形化工具(virt-manager)使用

若需图形化管理虚拟机,确保系统安装了桌面环境(如 GNOME、KDE),启动方法:

# 终端启动virt-manager
virt-manager

首次启动需输入密码,进入后界面如下:

  • 左侧 “QEMU/KVM” 为默认连接,右键可创建虚拟机、管理存储和网络
  • 右侧显示已创建的虚拟机列表,可直观查看虚拟机状态(运行 / 关闭)

四、KVM 核心配置

4.1 网络配置(桥接模式)

KVM 默认使用 “NAT 模式”,虚拟机通过宿主机 NAT 访问外网,但无法被局域网其他设备访问。生产环境常用桥接模式,使虚拟机直接获取局域网 IP,与宿主机处于同一网络层级。

4.1.1 Ubuntu 配置桥接网络

        1. 查看当前网卡名称(假设为eth0或enp0s3):

ip addr show

        2. 安装桥接工具(已安装可跳过):

sudo apt install -y bridge-utils

        3. 编辑网络配置文件(Ubuntu 20.04 + 使用 Netplan):

sudo vim /etc/netplan/01-network-manager-all.yaml

        4. 写入以下配置(替换enp0s3为实际网卡名):

network:version: 2renderer: networkdethernets:enp0s3:  # 物理网卡dhcp4: no  # 关闭物理网卡DHCPbridges:br0:  # 桥接网卡名称interfaces: [enp0s3]  # 关联物理网卡dhcp4: yes  # 桥接网卡使用DHCP获取IP(或配置static)# 静态IP配置(可选)# addresses: [192.168.1.100/24]# gateway4: 192.168.1.1# nameservers:#   addresses: [114.114.114.114, 8.8.8.8]

        5. 应用配置:

sudo netplan apply

        6. 验证桥接网卡:

ip addr show br0

若br0获取到 IP 且状态为UP,说明桥接配置成功。

4.1.2 CentOS 配置桥接网络

        1. 编辑物理网卡配置文件(假设网卡为ens33):

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

        2. 修改内容(仅保留关键配置):

TYPE=Ethernet
BOOTPROTO=none  # 关闭DHCP
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0  # 关联到桥接网卡br0

        3. 创建桥接网卡配置文件ifcfg-br0:

sudo vim /etc/sysconfig/network-scripts/ifcfg-br0

        4. 写入配置:

TYPE=Bridge
BOOTPROTO=dhcp  # 或static(静态IP)
NAME=br0
DEVICE=br0
ONBOOT=yes
# 静态IP配置(可选)
# IPADDR=192.168.1.100
# PREFIX=24
# GATEWAY=192.168.1.1
# DNS1=114.114.114.114

        5. 重启网络服务:

# CentOS 7
sudo systemctl restart network# CentOS 8
sudo nmcli connection reload

        6. 验证桥接:

ip addr show br0

4.2 存储配置(创建存储池)

KVM 使用 “存储池” 管理虚拟机磁盘文件,支持本地目录、LVM、NFS 等存储类型,推荐使用目录存储池(简单易维护)或LVM 存储池(支持动态扩容)。

4.2.1 创建目录存储池(命令行)

        1. 创建本地存储目录(如/var/lib/libvirt/images/kvm-pool):

sudo mkdir -p /var/lib/libvirt/images/kvm-pool

        2. 定义存储池(名称为kvm-pool):

sudo virsh pool-define-as kvm-pool dir --target /var/lib/libvirt/images/kvm-pool

        3. 构建存储池:

sudo virsh pool-build kvm-pool

        4. 启动存储池并设置开机自启:

sudo virsh pool-start kvm-pool
sudo virsh pool-autostart kvm-pool

        5. 验证存储池:

sudo virsh pool-list --all
# 输出“kvm-pool”状态为“active”表示正常
4.2.2 图形化创建存储池(virt-manager)
  1. 打开 virt-manager,右键 “QEMU/KVM”→“添加存储池”
  2. 输入存储池名称(如kvm-pool),选择 “目录” 类型,点击 “前进”
  3. 选择存储目录(如/var/lib/libvirt/images/kvm-pool),点击 “完成”
  4. 右键创建的存储池,选择 “启动” 和 “自动启动”

4.3 KVM 模块参数配置(优化性能)

通过调整 KVM 内核参数,优化虚拟机 CPU、内存性能:

        1. 编辑 KVM 配置文件:

sudo vim /etc/modprobe.d/kvm.conf

        2. 添加以下参数(根据 CPU 类型选择):

# Intel CPU(启用嵌套虚拟化、大页内存)
options kvm-intel nested=1 ept=1 unrestricted_guest=1# AMD CPU
options kvm-amd nested=1 svm_lock=0 unrestricted_guest=1
    • nested=1:启用嵌套虚拟化(允许在虚拟机内再创建虚拟机)
    • ept=1(Intel)/npt=1(AMD):启用扩展页表,提升内存访问性能

        3. 重启系统生效:

sudo reboot

        4. 验证嵌套虚拟化:

# Intel
cat /sys/module/kvm_intel/parameters/nested# AMD
cat /sys/module/kvm_amd/parameters/nested
# 输出“Y”表示启用成功

五、虚拟机完整部署(以 CentOS 7 为例)

5.1 准备镜像文件

        1. 下载 CentOS 7 ISO 镜像(推荐使用阿里云镜像源):

cd /var/lib/libvirt/images
sudo wget https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2207-02.iso

        2. 验证镜像完整性(可选):

md5sum CentOS-7-x86_64-Minimal-2207-02.iso

对比官方 MD5 值,确保镜像未损坏。

5.2 命令行创建虚拟机(virsh)

5.2.1 步骤 1:创建虚拟机磁盘

在之前创建的kvm-pool存储池中,创建 20GB 大小的 qcow2 格式磁盘(qcow2 支持动态扩容):

sudo virsh vol-create-as kvm-pool centos7-vm.qcow2 20G --format qcow2
  • centos7-vm.qcow2:磁盘文件名
  • 20G:磁盘大小
  • --format qcow2:磁盘格式(推荐 qcow2,比 raw 格式节省空间)
5.2.2 步骤 2:定义虚拟机 XML 配置

        1. 创建 XML 配置文件(centos7-vm.xml):

sudo vim /etc/libvirt/qemu/centos7-vm.xml

        2. 写入以下配置(根据实际资源调整 CPU、内存、网络):

<domain type='kvm'><name>centos7-vm</name>  <!-- 虚拟机名称 --><memory unit='GiB'>2</memory>  <!-- 最大内存(GiB) --><currentMemory unit='GiB'>2</currentMemory>  <!-- 当前内存(GiB) --><vcpu placement='static'>2</vcpu>  <!-- CPU核心数 --><os><type arch='x86_64' machine='pc-i440fx-focal'>hvm</type><boot dev='cdrom'/>  <!-- 优先从ISO启动(安装系统) --><boot dev='hd'/>     <!-- 后续从磁盘启动 --></os><features><acpi/><apic/><vmport state='off'/></features><cpu mode='host-model' check='partial'>  <!-- CPU模式(模拟宿主机CPU) --><model fallback='allow'/></cpu><clock offset='utc'><timer name='rtc' tickpolicy='catchup'/><timer name='pit' tickpolicy='delay'/><timer name='hpet' present='no'/></clock><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>destroy</on_crash><devices><!-- 磁盘配置(关联之前创建的qcow2文件) --><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2'/><target dev='vda' bus='virtio'/>  <!-- virtio总线,提升IO性能 --><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/></disk><!-- ISO镜像配置(安装系统用) --><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2207-02.iso'/><target dev='hda' bus='ide'/><readonly/><address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/></disk><!-- 网络配置(桥接模式,关联br0) --><interface type='bridge'><mac address='52:54:00:12:34:56'/>  <!-- 自定义MAC地址(可选) --><source bridge='br0'/><model type='virtio'/>  <!-- virtio网卡,提升网络性能 --><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface><!-- 控制台配置(支持virsh console登录) --><serial type='pty'><target type='isa-serial' port='0'><model name='isa-serial'/></target></serial><console type='pty' tty='/dev/pts/0'><source path='/dev/pts/0'/><target type='serial' port='0'/></console><!-- 显卡配置(VGA,支持图形化安装) --><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'><listen type='address' address='0.0.0.0'/></graphics></devices>
</domain>
5.2.3 步骤 3:启动虚拟机并安装系统

        1. 定义虚拟机(加载 XML 配置):

sudo virsh define /etc/libvirt/qemu/centos7-vm.xml

        2. 启动虚拟机:

sudo virsh start centos7-vm

        3. 查看虚拟机 VNC 端口(用于图形化安装):

sudo virsh vncdisplay centos7-vm

输出类似 “:0”,表示 VNC 端口为 5900(:0→5900,:1→5901,以此类推)。

        4. 使用 VNC 客户端(如 TightVNC、RealVNC)连接宿主机 IP: 端口(如 192.168.1.100:5900),进入 CentOS 7 安装界面,按常规步骤完成系统安装。

        5. 安装完成后,关闭虚拟机,删除 XML 配置中的 ISO 镜像部分(避免重复从 ISO 启动):

sudo virsh shutdown centos7-vm
sudo virsh undefine centos7-vm  # 删除旧定义
# 编辑XML,删除<disk type='file' device='cdrom'>...</disk>段
sudo virsh define /etc/libvirt/qemu/centos7-vm.xml  # 重新定义
sudo virsh start centos7-vm  # 从磁盘启动

5.3 图形化创建虚拟机(virt-manager)

  1. 打开 virt-manager,右键 “QEMU/KVM”→“新建”
  2. 选择 “本地安装介质(ISO 映像或 CDROM)”,点击 “前进”
  3. 点击 “浏览”→“浏览本地”,选择下载的 CentOS 7 ISO 镜像,点击 “前进”
  4. 配置 CPU 和内存(如 2 核 CPU、2GB 内存),点击 “前进”
  5. 配置存储:选择 “使用现有存储池中的存储”,选择kvm-pool和创建的centos7-vm.qcow2磁盘,点击 “前进”
  6. 输入虚拟机名称(如centos7-vm),网络选择 “桥接至 br0”,点击 “完成”
  7. 自动打开 VNC 窗口,进入系统安装界面,完成安装后重启虚拟机

六、虚拟机日常运维(virsh 命令)

6.1 虚拟机状态管理

操作

命令

说明

查看所有虚拟机

sudo virsh list --all

显示运行中(running)和关闭(shut off)的虚拟机

启动虚拟机

sudo virsh start centos7-vm

启动指定虚拟机

关闭虚拟机(优雅)

sudo virsh shutdown centos7-vm

发送关机信号,等待 Guest OS 正常关闭

强制关闭虚拟机

sudo virsh destroy centos7-vm

强制终止虚拟机(类似拔电源,谨慎使用)

重启虚拟机

sudo virsh reboot centos7-vm

重启虚拟机

设置开机自启

sudo virsh autostart centos7-vm

宿主机启动时自动启动该虚拟机

取消开机自启

sudo virsh autostart --disable centos7-vm

取消开机自启

查看虚拟机信息

sudo virsh dominfo centos7-vm

显示 CPU、内存、磁盘等配置信息

6.2 虚拟机控制台登录

通过virsh console直接登录虚拟机(无需 VNC),需 Guest OS 开启串口控制台:

        1. 进入虚拟机 VNC 界面,编辑/etc/default/grub,添加串口配置:

sudo vim /etc/default/grub

        修改GRUB_CMDLINE_LINUX:

GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet console=ttyS0,115200"

        2. 生成新的 grub 配置:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

        3. 重启虚拟机,在宿主机执行以下命令登录控制台:

sudo virsh console centos7-vm

按Enter键,输入虚拟机用户名和密码即可登录;退出控制台按Ctrl+]。

6.3 虚拟机资源调整(动态扩容)

6.3.1 内存扩容(需虚拟机支持热插拔)

        1. 查看当前内存配置:

sudo virsh dommemstat centos7-vm

        2. 临时调整内存(最大内存需在 XML 中预先设置足够值):

sudo virsh setmem centos7-vm 4G --live  # 动态调整为4GB(运行中生效)

        3. 永久调整内存(需关闭虚拟机):

sudo virsh shutdown centos7-vm
sudo virsh edit centos7-vm  # 编辑XML,修改<memory>和<currentMemory>为4G
sudo virsh start centos7-vm
6.3.2 磁盘扩容(qcow2 格式)

        1. 查看当前磁盘信息:

sudo virsh vol-info --pool kvm-pool centos7-vm.qcow2

        2. 扩容磁盘(从 20GB 扩展到 40GB):

sudo virsh vol-resize --pool kvm-pool centos7-vm.qcow2 40G

        3. 进入虚拟机,扩展磁盘分区和文件系统(以/dev/vda1为例):

# 1. 查看磁盘分区
lsblk# 2. 使用fdisk删除旧分区并创建新分区(或使用growpart)
sudo growpart /dev/vda 1  # 扩展/dev/vda的1号分区# 3. 扩展文件系统(ext4格式)
sudo resize2fs /dev/vda1# 4. 验证扩容结果
df -h

6.4 虚拟机快照管理(备份与恢复)

KVM 快照支持 “内部快照”(qcow2 格式)和 “外部快照”,推荐使用内部快照(操作简单):

6.4.1 创建快照
# 创建快照(名称为snap1,添加描述)
sudo virsh snapshot-create-as --domain centos7-vm --name snap1 --description "Initial setup"
6.4.2 查看快照
# 查看所有快照
sudo virsh snapshot-list centos7-vm# 查看快照详情
sudo virsh snapshot-info --domain centos7-vm --snapshotname snap1
6.4.3 恢复快照(需关闭虚拟机)
sudo virsh shutdown centos7-vm
sudo virsh snapshot-revert --domain centos7-vm --snapshotname snap1
sudo virsh start centos7-vm
6.4.4 删除快照
sudo virsh snapshot-delete --domain centos7-vm --snapshotname snap1

七、实际应用案例

7.1 案例 1:搭建 KVM 虚拟化服务器(生产环境)

需求
  • 宿主机:CentOS 8,CPU 8 核,内存 32GB,磁盘 500GB(LVM 分区)
  • 虚拟机:3 台 CentOS 7,每台配置 2 核 CPU、4GB 内存、50GB 磁盘,桥接网络(获取局域网 IP)
  • 存储:使用 LVM 存储池(支持动态扩容),NFS 挂载备份目录
实施步骤

        1. 宿主机 LVM 配置

# 创建LVM卷组(假设磁盘为/dev/sdb)
sudo pvcreate /dev/sdb
sudo vgcreate kvm-vg /dev/sdb
sudo lvcreate -L 400G -n kvm-lv kvm-vg
sudo mkfs.xfs /dev/kvm-vg/kvm-lv
# 挂载到/var/lib/libvirt/images/kvm-pool
sudo mkdir -p /var/lib/libvirt/images/kvm-pool
sudo echo "/dev/mapper/kvm--vg-kvm--lv /var/lib/libvirt/images/kvm-pool xfs defaults 0 0" >> /etc/fstab
sudo mount -a

        2. 创建 LVM 存储池

sudo virsh pool-define-as kvm-pool logical --source-name kvm-lv --source-vg kvm-vg --target /var/lib/libvirt/images/kvm-pool
sudo virsh pool-build kvm-pool
sudo virsh pool-start kvm-pool
sudo virsh pool-autostart kvm-pool

        3. 批量创建虚拟机

    • 复制centos7-vm.xml为centos7-vm1.xml、centos7-vm2.xml、centos7-vm3.xml
    • 修改每台虚拟机的name、mac address、source file(磁盘文件名)
    • 按 5.2 节步骤定义并启动虚拟机,完成系统安装

        4. 配置 NFS 备份

    • 在备份服务器搭建 NFS 共享目录(如/nfs/kvm-backup)
    • 宿主机挂载 NFS:
sudo mount -t nfs 192.168.1.200:/nfs/kvm-backup /var/lib/libvirt/images/backup
    • 定期执行快照备份脚本(示例):
#!/bin/bash
VM_LIST="centos7-vm1 centos7-vm2 centos7-vm3"
BACKUP_DIR="/var/lib/libvirt/images/backup"
DATE=$(date +%Y%m%d)for vm in $VM_LIST; do# 创建快照sudo virsh snapshot-create-as --domain $vm --name snap-$DATE --description "Backup $DATE"# 导出快照到NFSsudo virsh snapshot-dumpxml --domain $vm --snapshotname snap-$DATE > $BACKUP_DIR/$vm-snap-$DATE.xmlsudo cp /var/lib/libvirt/images/kvm-pool/$vm.qcow2 $BACKUP_DIR/$vm-$DATE.qcow2
done

7.2 案例 2:KVM 虚拟机迁移(冷迁移)

需求

将宿主机 A(192.168.1.100)上的centos7-vm迁移到宿主机 B(192.168.1.101),两台宿主机已配置相同的桥接网络和存储池。

实施步骤

        1. 宿主机 A 操作

# 1. 关闭虚拟机
sudo virsh shutdown centos7-vm# 2. 导出虚拟机XML配置
sudo virsh dumpxml centos7-vm > centos7-vm.xml# 3. 复制磁盘文件和XML到宿主机B(使用scp)
sudo scp /var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2 root@192.168.1.101:/var/lib/libvirt/images/kvm-pool/
sudo scp centos7-vm.xml root@192.168.1.101:/etc/libvirt/qemu/

        2. 宿主机 B 操作

# 1. 确保存储池已创建且磁盘文件权限正确
sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2# 2. 定义虚拟机
sudo virsh define /etc/libvirt/qemu/centos7-vm.xml# 3. 启动虚拟机并验证
sudo virsh start centos7-vm
sudo virsh list --all

        3. 验证迁移结果

    • 登录虚拟机,检查 IP 地址、磁盘数据是否正常
    • 测试网络连通性(ping 网关、局域网其他设备)

八、常见问题与解决方法

8.1 虚拟机无法启动,提示 “Error starting domain: internal error: process exited while connecting to monitor”

  • 原因
  1. 磁盘文件路径错误或权限不足
  2. 桥接网卡br0未创建或状态为DOWN
  3. CPU 虚拟化未启用或 KVM 模块未加载
  • 解决方法
  1. 检查磁盘路径:sudo virsh edit centos7-vm,确认<source file>路径正确;设置权限:sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2
  2. 检查桥接网卡:ip addr show br0,确保状态为UP;重新配置桥接网络
  3. 检查 KVM 模块:lsmod | grep kvm,若未加载执行sudo modprobe kvm-intel(Intel)或sudo modprobe kvm-amd(AMD);进入 BIOS 启用虚拟化

8.2 虚拟机无法获取 IP 地址(桥接模式)

  • 原因
  1. 虚拟机网卡未关联到正确的桥接网卡(如关联到virbr0而非br0)
  2. DHCP 服务器未分配 IP(如局域网 DHCP 地址池耗尽)
  3. 虚拟机网卡驱动异常(未使用 virtio 模式)
  • 解决方法
  1. 检查网络配置:sudo virsh edit centos7-vm,确认<source bridge='br0'/>
  2. 手动配置静态 IP:在虚拟机中编辑/etc/sysconfig/network-scripts/ifcfg-eth0,设置 IP、网关、DNS
  3. 更换网卡驱动:在 XML 中设置<model type='virtio'/>,重启虚拟机

8.3 VNC 无法连接虚拟机

  • 原因
  1. VNC 端口被防火墙拦截
  2. 虚拟机 VNC 配置中listen地址不是0.0.0.0(仅允许本地连接)
  3. 宿主机 IP 地址错误或虚拟机未启动
  • 解决方法
  1. 开放防火墙端口(如 5900):sudo ufw allow 5900/tcp(Ubuntu)或sudo firewall-cmd --add-port=5900/tcp --permanent(CentOS)
  2. 修改 VNC 配置:sudo virsh edit centos7-vm,确保<graphics type='vnc'...><listen type='address' address='0.0.0.0'/></graphics>
  3. 验证虚拟机状态:sudo virsh list --all,确保虚拟机已启动;重新查看 VNC 端口:sudo virsh vncdisplay centos7-vm

8.4 虚拟机磁盘扩容后,文件系统未识别新增空间

  • 原因:仅扩展了磁盘文件大小,未扩展分区和文件系统
  • 解决方法
  1. 进入虚拟机,使用lsblk确认磁盘已扩容(如/dev/vda从 20GB 变为 40GB)
  2. 使用growpart扩展分区:sudo growpart /dev/vda 1(扩展 1 号分区)
  3. 扩展文件系统:ext4 格式用resize2fs /dev/vda1,XFS 格式用xfs_growfs /dev/vda1
  4. 验证:df -h查看文件系统大小是否更新

九、总结

KVM 作为 Linux 原生虚拟化技术,凭借高性能、高兼容性和开源免费的优势,广泛应用于企业级虚拟化场景。本文从安装准备、核心配置、虚拟机部署到日常运维,完整覆盖了 KVM 的全流程操作,重点包括:

  1. 硬件虚拟化验证和系统环境准备,确保 KVM 正常运行基础
  2. 桥接网络和存储池配置,满足生产环境网络和存储需求
  3. 虚拟机创建(命令行 + 图形化)、资源调整和快照管理,实现虚拟机全生命周期运维
  4. 实际应用案例(生产环境部署、虚拟机迁移)和常见问题解决,提供实战参考

在实际使用中,需根据业务需求合理规划资源(CPU、内存、存储),定期备份虚拟机快照,同时关注 KVM 性能优化(如启用 virtio 驱动、大页内存、嵌套虚拟化),以充分发挥 KVM 的虚拟化优势,构建稳定、高效的虚拟化平台。

http://www.dtcms.com/a/349451.html

相关文章:

  • Redis常规指令及跳表
  • 机器学习--朴素贝叶斯
  • 零基础-动手学深度学习-13.1. 图像增广
  • 使用烛线图展示二进制01离散量趋势图
  • 嵌入式GPIO外设深度技术解析:从基础原理到高级应用
  • 开源 C++ QT Widget 开发(六)通讯--TCP调试
  • 微软恶意软件删除工具:官方免费的系统安全防护利器
  • CentOS安装Jenkins全流程指南
  • 3-1.Python 函数 - 函数基础(函数概述、函数的定义与调用、函数文档)
  • 8.25 朴素贝叶斯
  • [AI] Firebase Studio :AI+云端 IDE
  • C++深度优先搜素
  • 说明哈夫曼树查询过程的例子
  • 基于MATLAB的遥感图像变化检测
  • 嵌入式系统学习Day22(进程)
  • 【React】案例:B站评论
  • C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
  • Coze用户账号设置修改用户头像-后端源码
  • 【系统架构设计师】数据库设计(一):数据库技术的发展、数据模型、数据库管理系统、数据库三级模式
  • 容器学习day02
  • [React]Antd Cascader组件地区选择
  • SpringBoot整合Elasticsearch
  • SQL语法指南
  • Docker基本使用方法和常用命令
  • Spring文件上传核心技术解析
  • Java 编辑器与 IDE:开发者手中的利剑与盾牌
  • 彻底解决PyCharm中Matplotlib无法显示图形及中文乱码问题
  • Nginx + Certbot配置 HTTPS / SSL 证书
  • 无人机航拍数据集|第21期 无人机四种动物目标检测YOLO数据集2857张yolov11/yolov8/yolov5可训练
  • 数据分析编程第三步:分组统计