如何在 Linux 中扩展 KVM 虚拟机磁盘大小

这个简短的指南解释了什么是 虚拟大小 命令行工具以及我们如何在 Linux 中使用 Virt-resize 工具扩展或扩展 KVM 虚拟机磁盘大小。

前几天我注意到我的一台 KVM 虚拟机的磁盘空间不足。 由于磁盘空间不足,我无法安装任何新应用程序或无法保存文件。 为了解决这个问题,我只是增加了 KVM 虚拟机磁盘的大小,使用 virt-size 命令。 我亲自测试了下面给出的步骤来增加 CentOS 8 KVM 虚拟机的磁盘大小,它按预期工作。

Virt 调整大小工具

虚拟调整大小 是一个用于调整虚拟机磁盘大小的命令行工具。 使用 virt-resize,我们可以增加或减少虚拟机磁盘的大小。 我们也可以使用 virt-resize 命令删除虚拟磁盘内的分区。 请注意 virt-resize 实时机器。 在调整其磁盘映像大小之前,应关闭来宾系统。

为了扩展虚拟机的磁盘大小,我们首先创建一个比源映像更大的磁盘映像。 然后我们将源图像复制到目标图像,最后调整它的大小。

Virt-resize 是 libguestfs-tools 包裹。 要在 Debian、Ubuntu 及其衍生产品上安装 libguestfs-tools 软件包,请运行:

$ sudo apt install libguestfs-tools

安装 libguestfs-tools 包 FedoraRHEL 及其克隆,运行:

$ sudo dnf install libguestfs-tools

在 Fedora 34, guestfs-tools 软件包提供了 virt-resize 工具。 所以如果你在 Fedora 34、安装 guestfs-tools 包如下:

$ sudo dnf install guestfs-tools

现在让我们看看如何使用扩展虚拟机磁盘大小 virt-resize 命令。

在 Linux 中扩展或扩展 KVM 虚拟机磁盘大小

出于本指南的目的,我将使用名为 CentOS 8 的虚拟机磁盘映像 centos8.qcow2. 我已将此法师存储在我当前的工作目录中。 您可以使用 virsh dumpxml 命令来定位要调整大小的磁盘映像。

例子:

$ virsh dumpxml centos8

在上述命令中将 centos8 替换为您的 VM 名称。

找到要调整大小的磁盘映像后,检查此磁盘映像内的分区详细信息。 要打印磁盘映像的分区详细信息及其大小,请运行:

$ virt-filesystems --long --parts --blkdevs -h -a centos8.qcow2 

样本输出:

 Name       Type       MBR  Size  Parent
 /dev/sda1  partition  83   1.0G  /dev/sda
 /dev/sda2  partition  8e   19G   /dev/sda
 /dev/sda   device     -    20G   -
在 Linux 中使用 virt-filesystems 命令显示当前分区及其大小

如您在上面的输出中看到的,我的磁盘映像只有两个分区,即 /dev/sda1 大小为 1 GB 和 /dev/sda2 19GB。 磁盘映像的总大小为 20 GB。

现在我们将,

  • 将总磁盘映像大小从 20 GB 增加到 30 GB,
  • 增加第一个分区的大小 /dev/sda1 从 1.0GB 到 1.5GB,
  • 展开第二个分区 /dev/sda2 以填充剩余空间。

Virt-resize 无法就地调整磁盘映像的大小。 此外,不应在实时虚拟机上使用 Virt-resize。 在调整磁盘映像大小之前,请关闭虚拟机并备份原始磁盘映像。

$ mv centos8.qcow2 centos8.qcow2.backup

上面的命令将重命名当前磁盘映像称为 centos8.qcow2centos8.qcow2.backup.

使用命令创建具有相同名称且大小为 30GB 的新磁盘映像:

$ qemu-img create -f qcow2 -o preallocation=metadata centos8.qcow2 30G

样本输出:

Formatting 'centos8.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=metadata compression_type=zlib size=32212254720 lazy_refcounts=off refcount_bits=16

确保新创建的磁盘大小为 30GB:

$ virt-filesystems --long --parts --blkdevs -h -a centos8.qcow2

样本输出:

Name      Type    MBR  Size  Parent
 /dev/sda  device  -    30G   -
使用 qemu-img 命令创建新的虚拟磁盘映像

现在使用命令扩展/扩展 KVM 虚拟机磁盘映像大小:

$ virt-resize --resize /dev/sda1=+500M --expand /dev/sda2 centos8.qcow2.backup centos8.qcow2

这里,

  • --resize /dev/sda1=+500M – 增加尺寸 /dev/sda1 分区为 500 MB。
  • –expand /dev/sda2 – 调整大小 /dev/sda2 分区以填充所有剩余空间。 就我而言,它将从 19.0G 调整为 28.5G。
  • centos8.qcow2.backup – 它是原始输入磁盘映像。
  • centos8.qcow2 – 它是新创建的输出磁盘映像。

上述命令的示例输出为:

[   0.0] Examining centos8.qcow2.backup
 
 Summary of changes:
 /dev/sda1: This partition will be resized from 1.0G to 1.5G.  The 
 filesystem ext4 on /dev/sda1 will be expanded using the ‘resize2fs’ 
 method.
 /dev/sda2: This partition will be resized from 19.0G to 28.5G.  The LVM PV 
 on /dev/sda2 will be expanded using the ‘pvresize’ method.
 
 [   4.2] Setting up initial partition table on centos8.qcow2
 [   5.6] Copying /dev/sda1
  100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
 [   9.7] Copying /dev/sda2
  100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
 [  45.1] Expanding /dev/sda1 using the ‘resize2fs’ method
 [  45.3] Expanding /dev/sda2 using the ‘pvresize’ method
 Resize operation completed with no errors.  Before deleting the old disk, 
 carefully check that the resized disk boots and works correctly.
扩展或扩展 KVM 虚拟机磁盘大小扩展或扩展 KVM 虚拟机磁盘大小

检查分区及其大小 virt-filesystems 命令:

$ virt-filesystems --long -h --all -a centos8.qcow2

样本输出:

 Name          Type        VFS   Label  MBR  Size  Parent
 /dev/sda1     filesystem  ext4  -      -    1.4G  -
 /dev/cl/root  filesystem  xfs   -      -    17G   -
 /dev/cl/swap  filesystem  swap  -      -    2.0G  -
 /dev/cl/root  lv          -     -      -    17G   /dev/cl
 /dev/cl/swap  lv          -     -      -    2.0G  /dev/cl
 /dev/cl       vg          -     -      -    29G   /dev/sda2
 /dev/sda2     pv          -     -      -    29G   -
 /dev/sda1     partition   -     -      83   1.5G  /dev/sda
 /dev/sda2     partition   -     -      8e   29G   /dev/sda
 /dev/sda      device      -     -      -    30G   -
使用 virt-filesystems 命令打印 KVM 虚拟机磁盘中的分区及其大小使用 virt-filesystems 命令打印 KVM 虚拟机磁盘中的分区及其大小

正如您在上面的输出中看到的,我的 CentOS8 KVM 磁盘映像大小已从 20 GB 调整为 30 GB。

现在使用新磁盘映像启动虚拟机。 您还可以使用 Qcow2 映像创建新的虚拟机,如以下链接中所述。

  • 在 Linux 中使用 Qcow2 镜像创建 KVM 虚拟机

如果它没有任何问题,请彻底检查您的所有数据是否存在。 如果一切正常,请删除旧的备份磁盘。

如果新磁盘有任何问题,请关闭虚拟机并将备份磁盘重命名为其原始名称。 再次仔细重复上述步骤。 不要忘记备份数据和磁盘映像。

资源:

相关阅读:

  • 使用 Libguestfs 访问和修改虚拟机磁盘映像
  • 如何使用 Virt-rescue 拯救虚拟机