KVM 虚拟化技术实战指南 - 第二部分:Linux 虚拟机安装实战

文档信息

  • 系列: KVM 虚拟化技术实战指南
  • 部分: 第二部分 - Linux 虚拟机安装
  • 版本: V1.0
  • 创建日期: 2026 年 3 月 9 日
  • 对应视频: 7-07 (13:17)
  • 预计阅读时间: 2-3 小时

目录

  1. 安装前准备
  2. 方法一: virt-install 命令行安装
  3. 方法二: virt-manager 图形化安装
  4. 方法三: virt-builder 快速部署
  5. 操作系统安装过程详解
  6. 安装后配置
  7. 性能优化
  8. 常见问题

安装前准备

ISO 镜像下载

CentOS/RHEL:

# CentOS 7
wget http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso

# CentOS Stream 8
wget http://mirrors.aliyun.com/centos/8-stream/isos/x86_64/CentOS-Stream-8-latest-x86_64-dvd1.iso

# Rocky Linux 8 (RHEL 替代品)
wget https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.5-x86_64-dvd1.iso

Ubuntu:

# Ubuntu 20.04 LTS
wget http://mirrors.aliyun.com/ubuntu-releases/20.04.5/ubuntu-20.04.5-live-server-amd64.iso

# Ubuntu 22.04 LTS
wget http://mirrors.aliyun.com/ubuntu-releases/22.04.1/ubuntu-22.04.1-live-server-amd64.iso

Debian:

# Debian 11
wget http://mirrors.aliyun.com/debian-cd/current/amd64/iso-cd/debian-11.5.0-amd64-netinst.iso

存储路径规划

# ISO 镜像存储路径
ISO 存储目录:/var/lib/libvirt/images/iso/

# 虚拟机磁盘存储路径
VM 磁盘目录:/var/lib/libvirt/images/vms/

# 创建目录
sudo mkdir -p /var/lib/libvirt/images/iso
sudo mkdir -p /var/lib/libvirt/images/vms

# 下载 ISO 到指定目录
cd /var/lib/libvirt/images/iso
wget [ISO 下载链接]

# 设置权限
sudo chown -R libvirt-qemu:kvm /var/lib/libvirt/images
sudo chmod -R 755 /var/lib/libvirt/images

资源配置建议

开发测试环境:

VM 配置:
- vCPU: 1-2 核
- 内存:1-2GB
- 系统盘:20-30GB
- 网络:NAT

适用场景:
- 学习实验
- 软件测试
- 临时环境

生产环境:

VM 配置:
- vCPU: 4-8 核
- 内存:8-16GB
- 系统盘:50-100GB
- 数据盘:根据需求
- 网络:桥接

适用场景:
- Web 服务器
- 数据库
- 应用服务

方法一:virt-install 命令行安装

virt-install 命令详解

基本语法:

virt-install [选项]

核心参数:

参数说明示例
--nameVM 名称--name centos7-web1
--ram内存大小 (MB)--ram 2048
--vcpusCPU 数量--vcpus 2
--disk磁盘配置--disk path=/xx,size=20
--os-variant操作系统版本--os-variant centos7.0
--network网络配置--network bridge=br0
--graphics图形显示--graphics vnc
--cdromISO 镜像路径--cdrom /path/to.iso
--boot启动选项--boot cdrom,hd

完整安装示例

示例 1: CentOS 7 最小化安装

virt-install \
  --name centos7-minimal \
  --description "CentOS 7 最小化安装" \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/vms/centos7-minimal.qcow2,size=30,format=qcow2,bus=virtio \
  --os-variant centos7.0 \
  --network network=default,model=virtio \
  --graphics vnc,listen=0.0.0.0,port=5901 \
  --cdrom /var/lib/libvirt/images/iso/CentOS-7-x86_64-DVD-2009.iso \
  --boot cdrom,hd \
  --noautoconsole

参数说明:

  • format=qcow2: 使用 QCOW2 格式,支持快照
  • bus=virtio: 使用 virtio 驱动,性能更好
  • model=virtio: virtio 网卡
  • port=5901: VNC 端口
  • --noautoconsole: 不自动连接控制台

查看安装进度

# 查看 VM 状态
virsh list --all

# 查看控制台 (VNC)
virt-viewer centos7-minimal

# 或通过 VNC 客户端连接
# 地址:宿主机 IP:5901

自定义安装配置

示例 2: Ubuntu Server 20.04 带云初始化

virt-install \
  --name ubuntu20-cloud \
  --description "Ubuntu 20.04 云初始化" \
  --ram 4096 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/vms/ubuntu20-cloud.qcow2,size=50,format=qcow2,bus=virtio \
  --os-variant ubuntu20.04 \
  --network bridge=br0,model=virtio \
  --graphics vnc,listen=0.0.0.0 \
  --cdrom /var/lib/libvirt/images/iso/ubuntu-20.04.5-live-server-amd64.iso \
  --cloud-init \
  --user-data /path/to/user-data.yaml

user-data.yaml 示例:

#cloud-config
hostname: ubuntu20-cloud
manage_etc_hosts: true
users:
  - name: admin
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-rsa AAAA... your_public_key
packages:
  - vim
  - git
  - curl
  - wget
runcmd:
  - echo "Hello from cloud-init" > /tmp/cloud-init-test.txt

高级配置选项

多磁盘配置:

virt-install \
  --name multi-disk-vm \
  --ram 4096 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/vms/multi-disk-system.qcow2,size=50,bus=virtio \
  --disk path=/var/lib/libvirt/images/vms/multi-disk-data.qcow2,size=100,bus=virtio \
  --os-variant centos7.0 \
  --network network=default \
  --graphics vnc \
  --cdrom /var/lib/libvirt/images/iso/CentOS-7-x86_64-DVD-2009.iso

CPU 和内存优化:

virt-install \
  --name performance-vm \
  --ram 8192 \
  --vcpus sockets=2,cores=4,threads=1 \
  --cpu host-passthrough \
  --disk path=/var/lib/libvirt/images/vms/perf.qcow2,size=80,bus=virtio,cache=none \
  --os-variant centos7.0 \
  --network model=virtio \
  --graphics vnc \
  --cdrom /var/lib/libvirt/images/iso/CentOS-7-x86_64-DVD-2009.iso

方法二:virt-manager 图形化安装

启动 virt-manager

# 本地启动
virt-manager

# 远程连接 (SSH)
virt-manager -c qemu+ssh://root@192.168.1.100/system

创建 VM 步骤详解

步骤 1: 新建虚拟机

1. 文件 → 新建虚拟机
2. 或点击工具栏"新建"按钮

步骤 2: 选择安装方式

选择安装方法:
○ 本地安装介质 (ISO 映像或 CDROM)
○ 网络安装 (HTTP/FTP/NFS)
○ 网络引导 (PXE)
○ 导入现有磁盘映像
○ 从模板克隆

选择:本地安装介质

步骤 3: 选择 ISO 镜像

选择 ISO 映像位置:
- 浏览本地文件系统
- 或从 ISO 存储池选择

点击"浏览" → 选择 ISO 文件

步骤 4: 配置 CPU 和内存

内存:2048 MB
CPU: 2

推荐配置:
- 开发测试:1-2GB 内存,1-2 CPU
- 生产环境:4-8GB 内存,2-4 CPU

步骤 5: 创建磁盘

磁盘配置:
- 选择:定制存储配置
- 总线类型:VirtIO (性能最佳)
- 格式:qcow2
- 大小:30GB

高级选项:
- 预分配:否 (精简配置)
- 缓存模式:default
- I/O 模式:native

步骤 6: 网络配置

网络选择:
- NAT: 默认网络,VM 可访问外网
- 桥接:VM 与宿主机同网段
- 隔离:仅 VM 之间通信

选择:NAT (默认网络)

步骤 7: 完成并启动

虚拟机名称:centos7-web1
□ 安装前自定义配置
  - 如果勾选,可以在启动前修改配置

点击"完成"开始安装

图形化安装优势

优势:
✅ 直观易用
✅ 所见即所得
✅ 适合初学者
✅ 实时查看进度

劣势:
❌ 需要图形界面
❌ 不适合批量部署
❌ 无法脚本自动化

方法三:virt-builder 快速部署

什么是 virt-builder?

virt-builder 是一个快速创建虚拟机磁盘镜像的工具,支持:

  • 预配置系统
  • 批量部署
  • 自定义配置
  • 快速交付

安装 virt-builder

# CentOS/RHEL
sudo yum install -y libguestfs-tools

# Ubuntu/Debian
sudo apt install -y libguestfs-tools

查看可用镜像

# 列出所有可用镜像
virt-builder --list

# 搜索特定系统
virt-builder --list | grep centos
virt-builder --list | grep ubuntu

输出示例:

centos-7.6             x86_64   CentOS 7.6
centos-8               x86_64   CentOS 8
debian-10              x86_64   Debian 10
ubuntu-20.04           x86_64   Ubuntu 20.04 LTS

快速创建 VM

示例 1: 创建 CentOS 7

# 下载并创建磁盘镜像
virt-builder centos-7.6 \
  --size 20G \
  --format qcow2 \
  --output /var/lib/libvirt/images/vms/centos7-quick.qcow2 \
  --root-password password:123456 \
  --hostname centos7-quick \
  --ssh-inject root:file:/root/.ssh/id_rsa.pub

参数说明:

  • --size 20G: 磁盘大小
  • --format qcow2: 磁盘格式
  • --root-password: root 密码
  • --hostname: 主机名
  • --ssh-inject: 注入 SSH 公钥

示例 2: 创建 Ubuntu 20.04

virt-builder ubuntu-20.04 \
  --size 30G \
  --format qcow2 \
  --output /var/lib/libvirt/images/vms/ubuntu20-quick.qcow2 \
  --root-password password:ubuntu123 \
  --hostname ubuntu20-quick \
  --ssh-inject root:file:/root/.ssh/id_rsa.pub \
  --install vim,curl,wget,git

注册到 libvirt

# 创建 VM 定义
virt-install \
  --name centos7-quick \
  --import \
  --disk /var/lib/libvirt/images/vms/centos7-quick.qcow2,format=qcow2,bus=virtio \
  --ram 2048 \
  --vcpus 2 \
  --os-variant centos7.0 \
  --network network=default \
  --graphics vnc

# 启动 VM
virsh start centos7-quick

# 连接控制台
virsh console centos7-quick

批量部署脚本

#!/bin/bash
# deploy-vms.sh

BASE_IMAGE="centos-7.6"
COUNT=5
PREFIX="web-server"

for i in $(seq 1 $COUNT); do
  VM_NAME="${PREFIX}-${i}"
  DISK_PATH="/var/lib/libvirt/images/vms/${VM_NAME}.qcow2"
  
  echo "Creating ${VM_NAME}..."
  
  virt-builder ${BASE_IMAGE} \
    --size 20G \
    --format qcow2 \
    --output ${DISK_PATH} \
    --root-password password:123456 \
    --hostname ${VM_NAME} \
    --ssh-inject root:file:/root/.ssh/id_rsa.pub \
    --install vim,curl,wget
  
  # 注册到 libvirt
  virt-install \
    --name ${VM_NAME} \
    --import \
    --disk ${DISK_PATH},format=qcow2,bus=virtio \
    --ram 2048 \
    --vcpus 2 \
    --os-variant centos7.0 \
    --network network=default \
    --graphics vnc \
    --noautoconsole
  
  echo "${VM_NAME} created successfully!"
done

echo "All VMs deployed!"

使用方法:

chmod +x deploy-vms.sh
sudo ./deploy-vms.sh

操作系统安装过程详解

CentOS 7 安装流程

步骤 1: 启动安装程序

1. VM 从 ISO 启动
2. 出现 GRUB 菜单
3. 选择 "Install CentOS 7"
4. 按 Enter 开始

步骤 2: 选择语言

语言选择:
- English (推荐,避免编码问题)
- 中文 (如果需要)

选择后点击 Continue

步骤 3: 安装信息摘要

主要配置项:

1. DATE & TIME
   - 选择时区:Asia/Shanghai
   - 系统时间自动同步

2. KEYBOARD
   - 默认:English (US)
   - 添加:Chinese

3. INSTALLATION SOURCE
   - 默认:本地 ISO
   - 无需修改

4. SOFTWARE SELECTION
   - Minimal Install (最小化)
   - 或 GNOME/KDE (带图形界面)

5. INSTALLATION DESTINATION
   - 选择磁盘:vda (30GB)
   - 分区方案:
     * /boot: 500MB
     * /: 25GB
     * swap: 2GB
     * /home: 剩余空间

6. NETWORK & HOST NAME
   - Hostname: centos7-web1
   - Network: ON
   - 获取 IP: DHCP

步骤 4: 开始安装

点击 "Begin Installation"
安装进度显示:
- 设置分区
- 安装软件包
- 执行配置脚本

预计时间:5-10 分钟

步骤 5: 配置 root 密码

Root Password:
- 输入强密码
- 确认密码
- 点击 Done

警告:如果密码太简单,需要确认两次

步骤 6: 创建用户 (可选)

User Creation:
- Full Name: Administrator
- User name: admin
- Password: ******
- □ Make this user administrator

建议:创建普通用户,日常使用

步骤 7: 安装完成

安装完成后:
- 点击 "Reboot"
- 取出 ISO (自动或手动)
- 系统重启

Ubuntu Server 安装流程

步骤 1: 启动 Ubuntu 安装程序

1. GRUB 菜单
2. 选择 "Install Ubuntu"
3. 加载安装程序

步骤 2: 选择语言

Language:
- English
- 中文 (简体)

选择后 Continue

步骤 3: 键盘布局

Keyboard layout:
- English (US)
- 检测键盘布局

Continue

步骤 4: 网络配置

Network connections:
- eth0: DHCP (自动获取 IP)
- 或手动配置静态 IP

DHCP 示例:
IPv4 Address: 192.168.1.100/24
Gateway: 192.168.1.1
DNS: 8.8.8.8, 1.1.1.1

步骤 5: 配置代理 (可选)

Proxy address:
- 留空 (无代理)
- 或输入:http://proxy.example.com:8080

步骤 6: 镜像源

Mirror address:
- 默认:archive.ubuntu.com
- 推荐 (国内): mirrors.aliyun.com

Continue

步骤 7: 存储配置

Storage configuration:
- Use an entire disk: ✓
- 选择磁盘:/dev/vda (30GB)
- Set up this disk now

高级选项:
- Custom storage layout (自定义分区)
  * /boot: 500MB ext4
  * /: 25GB ext4
  * swap: 2GB
  * /home: 剩余

步骤 8: 配置文件系统

Filesystem:
- ext4 (默认,推荐)
- xfs
- btrfs

选择 ext4,Done

步骤 9: 用户配置

Profile setup:
- Your name: Administrator
- Your server's name: ubuntu20-web1
- Pick a username: admin
- Choose a password: ******
- Confirm your password: ******

□ Create a home directory
□ Import SSH identity (可选)

步骤 10: SSH 配置

SSH Setup:
□ Install OpenSSH server: ✓ (推荐勾选)
- 允许远程访问
- 生产环境必备

Import SSH identity:
- 可以选择导入公钥
- 或手动配置密码

步骤 11: 额外软件

Featured Server Snaps:
□ Docker
□ Kubernetes
□ MySQL
□ PostgreSQL
□ Nginx
□ Apache

开发测试:可以勾选
生产环境:建议最小化安装

步骤 12: 安装完成

Installing system...
进度条显示安装进度

完成后:
- 点击 "Reboot Now"
- 系统重启
- 取出 ISO

安装后配置

首次启动检查

连接 VM:

# VNC 连接
virt-viewer vm-name

# SSH 连接 (推荐)
ssh admin@vm-ip-address

基本检查:

# 1. 检查系统信息
uname -a
cat /etc/os-release

# 2. 检查网络
ip addr show
ping -c 4 www.baidu.com

# 3. 检查磁盘
df -h
lsblk

# 4. 检查内存
free -h

# 5. 检查 CPU
lscpu

更新系统

CentOS/RHEL:

# 更新所有软件包
sudo yum update -y

# 仅安全更新
sudo yum update --security -y

# 查看可更新列表
yum check-update

# 重启 (如果内核更新)
sudo reboot

Ubuntu/Debian:

# 更新软件包列表
sudo apt update

# 升级软件包
sudo apt upgrade -y

# 完整升级 (包括内核)
sudo apt full-upgrade -y

# 清理旧内核
sudo apt autoremove -y

# 重启
sudo reboot

安装必要工具

CentOS/RHEL:

# 安装基础工具
sudo yum install -y \
  vim \
  wget \
  curl \
  git \
  net-tools \
  bash-completion \
  htop \
  iotop

Ubuntu/Debian:

sudo apt install -y \
  vim \
  wget \
  curl \
  git \
  net-tools \
  bash-completion \
  htop \
  iotop

配置防火墙

CentOS 7 (firewalld):

# 查看状态
sudo firewall-cmd --state

# 开放 SSH
sudo firewall-cmd --permanent --add-service=ssh

# 开放 HTTP/HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 重新加载
sudo firewall-cmd --reload

# 查看规则
sudo firewall-cmd --list-all

Ubuntu (ufw):

# 启用防火墙
sudo ufw enable

# 允许 SSH
sudo ufw allow ssh

# 允许 HTTP/HTTPS
sudo ufw allow http
sudo ufw allow https

# 查看状态
sudo ufw status verbose

配置 SSH

SSH 配置优化:

# 编辑配置文件
sudo vim /etc/ssh/sshd_config

# 推荐配置:
Port 22                    # 或自定义端口
Protocol 2
PermitRootLogin no         # 禁止 root 登录
PasswordAuthentication no  # 禁用密码,使用密钥
PubkeyAuthentication yes   # 启用公钥认证
X11Forwarding no           # 禁用 X11 转发
UseDNS no                  # 禁用 DNS 反向解析

# 重启 SSH 服务
sudo systemctl restart sshd

配置 SSH 密钥认证:

# 生成密钥对 (在宿主机)
ssh-keygen -t rsa -b 4096

# 复制公钥到 VM
ssh-copy-id admin@vm-ip

# 测试登录
ssh admin@vm-ip
# 应该无需密码

性能优化

安装 virtio 驱动

Linux VM 自动检测:

# 检查是否使用 virtio
lsblk | grep vd
# 如果显示 vda, vdb 表示使用 virtio

lspci | grep -i virtio
# 显示 virtio 设备

Windows VM 需要手动安装:

1. 下载 virtio 驱动 ISO
   https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/

2. 挂载到 VM
   virsh attach-disk vm-name /path/to/virtio-win.iso hdd:cdrom

3. 在 Windows 中安装驱动

内存优化

内存气球 (Ballooning):

# 启用内存气球
virsh setmem vm-name 1048576 --live

# 查看内存使用
virsh domstats vm-name

# 配置自动气球
# 在 VM XML 中添加:
<memoryBacking>
  <locked/>
</memoryBacking>

CPU 优化

CPU 绑核:

# 查看物理 CPU 拓扑
lscpu

# 绑定 vCPU 到物理 CPU
virsh emulatorpin vm-name 0-3

# 绑定 vCPU
virsh vcpupin vm-name 0 0
virsh vcpupin vm-name 1 1

CPU 模式:

# 编辑 VM 配置
virsh edit vm-name

# 修改 CPU 模式:
<cpu mode='host-passthrough' check='none'/>

磁盘 I/O 优化

磁盘缓存模式:

# 查看当前配置
virsh domblklist vm-name

# 修改缓存模式
virsh attach-disk vm-name \
  --source /path/to/disk.qcow2 \
  --target vda \
  --cache none \
  --io native

I/O 调度器:

# 查看当前调度器
cat /sys/block/vda/queue/scheduler

# 临时修改
echo none > /sys/block/vda/queue/scheduler

# 永久修改
# 编辑 /etc/default/grub
GRUB_CMDLINE_LINUX="elevator=none"
# 更新 grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

网络优化

启用多队列:

# 编辑 VM 配置
virsh edit vm-name

# 添加:
<interface type='network'>
  <source network='default'/>
  <model type='virtio'/>
  <driver name='vhost' queues='4'/>
</interface>

常见问题

问题 1: VM 无法启动

症状:

Error starting domain: internal error: process exited while connecting to migration

排查:

# 1. 查看错误日志
virsh start vm-name
sudo tail -f /var/log/libvirt/qemu/vm-name.log

# 2. 检查磁盘空间
df -h

# 3. 检查权限
ls -la /var/lib/libvirt/images/vm-name.qcow2

# 4. 检查 SELinux
getenforce
# 如果是 Enforcing,临时禁用测试
setenforce 0

问题 2: 网络连接失败

症状:

VM 无法获取 IP 或无法访问外网

解决:

# 1. 检查虚拟网络
virsh net-list --all

# 2. 启动默认网络
virsh net-start default
virsh net-autostart default

# 3. 检查 NAT
iptables -t nat -L -n

# 4. 重启 libvirtd
sudo systemctl restart libvirtd

问题 3: 磁盘空间不足

症状:

VM 运行中磁盘空间不足

扩展磁盘:

# 1. 关闭 VM
virsh shutdown vm-name

# 2. 扩展磁盘
qemu-img resize /path/to/disk.qcow2 +50G

# 3. 启动 VM
virsh start vm-name

# 4. 在 VM 中扩展分区
# CentOS/RHEL:
sudo growpart /dev/vda 1
sudo xfs_growfs /

# 或扩展逻辑卷:
sudo lvextend -l +100%FREE /dev/mapper/centos-root
sudo xfs_growfs /

问题 4: VNC 连接失败

症状:

无法通过 VNC 连接到 VM 控制台

解决:

# 1. 查看 VNC 端口
virsh domdisplay vm-name

# 2. 检查防火墙
sudo firewall-cmd --list-ports
# 添加 VNC 端口
sudo firewall-cmd --add-port=5900-5910/tcp --permanent
sudo firewall-cmd --reload

# 3. 使用 virt-viewer
virt-viewer vm-name

问题 5: VM 性能低下

症状:

VM 运行缓慢,响应延迟

优化:

# 1. 检查资源使用
virsh domstats vm-name

# 2. 增加资源
virsh setmem vm-name 4096 --live
virsh setvcpus vm-name 4 --live

# 3. 使用 virtio 驱动
# 检查磁盘和网卡是否使用 virtio

# 4. 调整 CPU 模式
virsh edit vm-name
# <cpu mode='host-passthrough'/>

总结

安装方法对比

方法适用场景优势劣势
virt-install批量部署、自动化可脚本化、灵活命令行复杂
virt-manager初学者、单次安装图形化、直观需要 GUI
virt-builder快速部署、标准化最快、预配置镜像有限

最佳实践

✓ 使用 virtio 驱动 (性能最佳)
✓ 选择精简配置 (节省空间)
✓ 配置 SSH 密钥认证 (安全)
✓ 定期更新系统 (安全补丁)
✓ 创建快照 (备份)
✓ 监控资源使用 (性能)

下一步学习

完成 VM 安装后,继续学习:

  1. 第三部分: 网络配置详解
  2. 第四部分: 安全设置
  3. 第五部分: 快照管理
  4. 第六部分: 模板制作

本文档属于 KVM 虚拟化技术实战系列
对应视频:7-07 (13:17)
最后更新:2026 年 3 月

更多推荐