三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

银河麒麟系统下virt-manager虚拟机磁盘扩容实战

银河麒麟系统下virt-manager虚拟机磁盘扩容实战

1. 项目背景与需求分析

在国产操作系统银河麒麟上使用virt-manager管理虚拟机时,磁盘空间不足是个常见痛点。最近接手的一个Kylin V10项目就遇到了这个问题——当初分配50GB的qcow2磁盘镜像,随着业务数据增长已经使用了47GB,系统频繁报警。传统解决方案是新建磁盘并挂载,但这对已有分区结构的系统来说操作复杂,还可能影响服务连续性。

通过virt-manager的磁盘扩容功能,我们可以直接在宿主机层面对虚拟机磁盘文件进行扩容,再进入虚拟机内部调整分区。这种方法有三大优势:操作全程在线完成不影响业务;扩容前后数据完全保留;支持主流虚拟磁盘格式(qcow2、raw等)。实测从50GB扩容到100GB,整个过程仅需10分钟,其中包含5分钟的安全检查时间。

2. 环境准备与工具检查

2.1 硬件资源确认

首先通过df -h查看宿主机存储空间,确保有足够空间容纳扩容后的磁盘文件。例如原磁盘50GB要扩容到100GB,则宿主机对应分区至少需要50GB可用空间。建议预留20%缓冲空间,避免因磁盘碎片导致扩容失败。

重要提示:使用LVM存储池时,需先通过vgs命令检查卷组剩余空间。曾遇到过因VG空间不足导致扩容命令无报错但实际未生效的坑。

2.2 软件依赖验证

银河麒麟V10默认已安装libvirt套件,但仍需确认关键组件版本:

rpm -q libvirt qemu-kvm virt-manager

要求最低版本:libvirt-6.0.0、qemu-kvm-4.2.0、virt-manager-3.2.0。若版本过低,需通过麒麟软件仓库更新:

sudo kylin-software-center --upgrade

3. 磁盘扩容实操步骤

3.1 虚拟机状态管理

建议先将虚拟机切换为关机状态(非暂停),避免出现文件锁冲突。通过virsh命令操作:

virsh shutdown vm_name # 优雅关机 virsh list --all # 确认状态为shut off

3.2 磁盘文件扩容

定位虚拟机磁盘文件路径有两种方式:

  1. virt-manager图形界面:双击虚拟机 → 查看详情 → 磁盘设备
  2. 命令行查找:
virsh domblklist vm_name

使用qemu-img工具进行扩容(示例扩容到100G):

qemu-img resize /path/to/disk.qcow2 +50G

执行后务必验证:

qemu-img info /path/to/disk.qcow2

输出中virtual size应显示新容量,且disk size小于原值(qcow2的稀疏特性)。

3.3 分区表调整

启动虚拟机后,在终端执行:

lsblk

确认磁盘设备名(通常为vda或sda)。然后使用growpart工具调整分区:

sudo growpart /dev/vda 1 # 调整第1个分区 sudo resize2fs /dev/vda1 # 扩展ext4文件系统

对于xfs文件系统需改用:

sudo xfs_growfs /

4. 常见问题与解决方案

4.1 扩容后系统未识别新空间

典型症状:df -h显示容量未变,但lsblk看到磁盘已扩容。这通常是因为:

  1. 分区未扩展到磁盘末尾 - 使用fdisk删除重建分区(注意先备份分区表)
  2. 文件系统未resize - 确保执行了resize2fs/xfs_growfs

4.2 虚拟机启动报错

若出现"could not open disk image"错误,检查:

  1. 文件权限:ls -l /path/to/disk.qcow2应为qemu用户可读
  2. SELinux上下文:restorecon -v /path/to/disk.qcow2
  3. 磁盘格式:qemu-img check /path/to/disk.qcow2

4.3 性能下降处理

扩容后可能出现IO性能下降,可通过以下方式优化:

sudo virt-sparsify --in-place /path/to/disk.qcow2 # 回收空白空间 sudo fstrim /mount/point # 通知宿主回收块设备未用空间

5. 高级技巧与注意事项

5.1 在线热扩容方案

对于不能停机的生产环境,可采用以下方案:

  1. 添加新磁盘:virsh attach-disk vm_name /new/disk.qcow2 vdb --persistent
  2. 虚拟机内用LVM合并:
pvcreate /dev/vdb vgextend vg_name /dev/vdb lvextend -l +100%FREE /dev/vg_name/lv_name resize2fs /dev/vg_name/lv_name

5.2 扩容前后的数据校验

建议操作前后执行:

sudo virt-diff -a /path/to/disk.qcow2 /mnt/backup # 对比备份 sudo virt-filesystems -a /path/to/disk.qcow2 # 验证文件系统完整性

5.3 自动化脚本示例

创建resize_vm_disk.sh脚本:

#!/bin/bash VM_NAME=$1 NEW_SIZE=$2 virsh shutdown $VM_NAME qemu-img resize /var/lib/libvirt/images/${VM_NAME}.qcow2 $NEW_SIZE virsh start $VM_NAME echo "Now please login to VM and run:" echo "sudo growpart /dev/vda 1" echo "sudo resize2fs /dev/vda1"

6. 性能监控与调优

扩容后建议监控一周的磁盘性能:

  1. 安装监控工具:
sudo yum install sysstat iotop -y
  1. 关键指标采集:
# 磁盘IOPS iostat -dx 1 10 # 空间利用率 df -hT # 内存缓存 free -m

对于数据库等重IO负载,建议在/etc/fstab添加挂载参数:

noatime,nodiratime,data=writeback
← 返回列表