「KVM」- 扩容 qcow2 镜像、磁盘扩容、零重启

  CREATED BY JENKINSBOT

问题描述

我们的虚拟机是从虚拟机模板创建的,磁盘默认仅有 10G 空间,无法容纳更多数据,因此需要进行扩容。

注意事项,错误的磁盘分区调整将导致数据的丢失,如果无足够经验,请先进行数据备份,防止数据丢失。

该笔记将记录:在 KVM 中,扩容 .qcow2 操作系统镜像文件的方法,以及常见问题处理。

解决方案

第一阶段、磁盘扩容

通过 virsh 扩容(**推荐**):

# virsh qemu-monitor-command --domain tmpl-ubuntu-1804  --hmp "info block"
drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/tmpl-ubuntu-1804.qcow2 ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
drive-ide0-0-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]

# virsh qemu-monitor-command --domain tmpl-ubuntu-1804  --hmp "block_resize drive-virtio-disk0 20G"

通过 qemu-img resize 扩容,我们**不推荐**这种做法(在操作系统中,磁盘空间未改变,需要额外处理):

# qemu-img resize /var/lib/libvirt/images/tmpl-ubuntu-1804.qcow2 +5G # 增加 5G 空间
Image resized.

# qemu-img info /var/lib/libvirt/images/tmpl-ubuntu-1804.qcow2
image: /var/lib/libvirt/images/tmpl-ubuntu-1804.qcow2
file format: qcow2
virtual size: 15G (16106127360 bytes)
disk size: 2.7G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

注意事项,请勿缩小磁盘,如果需要缩小磁盘,请先缩小内部文件系统。(这里不再展开讨论)

第二阶段、调整文件系统

接下来,需要进入虚拟机,进行操作系统磁盘空间扩容。该阶段的场景比较多(有人使用 LVM,有人使用 Ext4,有人使用 XFS),我们无法枚举,这里仅记录我们的场景。

我们使用 LVM 进行磁盘管理,上层是 XFS 文件系统,所以扩容操作过程如下:

pvresize "/dev/vda2" # 扩大 PV 空间

vgs # 能够看到 VG 空间已经扩大

lvextend -l +100%FREE /dev/centos/root # 将空间全部分配
lvdisplay # 查看扩容后的大小,能够看到 LV 已扩大

xfs_growfs /dev/centos/root # 该虚拟机为 XFS 文件系统,需要 xfs_growfs 命令

参考文献

Increasing the Size of a qcow2 Image Under KVM – Natural Born Coder
Linux KVM – How to Add/Resize Virtual disk on fly? Part 7 – UnixArena