二、虚拟化技术与云计算-6-kvm-virtualization-guide-part2-vm-installation
KVM 虚拟化技术实战指南 - 第二部分:Linux 虚拟机安装实战
文档信息
- 系列: KVM 虚拟化技术实战指南
- 部分: 第二部分 - Linux 虚拟机安装
- 版本: V1.0
- 创建日期: 2026 年 3 月 9 日
- 对应视频: 7-07 (13:17)
- 预计阅读时间: 2-3 小时
目录
- 安装前准备
- 方法一: virt-install 命令行安装
- 方法二: virt-manager 图形化安装
- 方法三: virt-builder 快速部署
- 操作系统安装过程详解
- 安装后配置
- 性能优化
- 常见问题
安装前准备
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 [选项]
核心参数:
| 参数 | 说明 | 示例 |
|---|---|---|
--name | VM 名称 | --name centos7-web1 |
--ram | 内存大小 (MB) | --ram 2048 |
--vcpus | CPU 数量 | --vcpus 2 |
--disk | 磁盘配置 | --disk path=/xx,size=20 |
--os-variant | 操作系统版本 | --os-variant centos7.0 |
--network | 网络配置 | --network bridge=br0 |
--graphics | 图形显示 | --graphics vnc |
--cdrom | ISO 镜像路径 | --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 安装后,继续学习:
- 第三部分: 网络配置详解
- 第四部分: 安全设置
- 第五部分: 快照管理
- 第六部分: 模板制作
本文档属于 KVM 虚拟化技术实战系列
对应视频:7-07 (13:17)
最后更新:2026 年 3 月
更多推荐
所有评论(0)