如何使用 LVM VG 作为存储池来增加 KVM 客户磁盘大小?

如何使用 LVM VG 作为存储池来增加 KVM 客户磁盘大小?

KVM 主机服务器运行 CentOS 6.5,并使用 LVM 卷组“storage_pool”作为 KVM 的主存储池。

使用 ext4 文件系统安装 Ubuntu 客户机并将整个 /dev/vda1 挂载为 /。这是客户机磁盘配置:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none' io='native'/>
  <source dev='/dev/storage_pool/kvmguest.img'/>
  <target dev='vda' bus='virtio'/>
  <alias name='virtio-disk0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>

增加客户磁盘大小的最佳方法是什么?VG 有大量可用空间。

我找到了一些示例,但大多数也在客户机内部使用 LVM,或者不完全适用。据我所知,常用方法是在同一个 VG 中创建一个更大的 LV,关闭客户机,传输数据,编辑配置以使用新的 LV?

在此先感谢任何建议或指点

答案1

无需关闭访客(至少在 2019 年不再需要)。

简单地

lvextend -L+<size>G /dev/<group>/<volume>

然后

virsh blockresize <domain> /dev/<group>/<volume> --size <newsize>

最后,进入您的客房并做一切必要的事情以利用额外的空间。

在 Windows 客户机中你可以

diskpart

list volume

select volume <n>

extend

这些是我在 Ubuntu 19.04 下使用 qemu 3.1.0 扩展作为 KVM 域运行的 Windows 10 客户机的 C: 驱动器的具体步骤

答案2

以下是我所采取的程序:

  1. 扩展kvm guest虚拟机的逻辑卷

    # lvextend -L+50G /dev/storage_pool/guest.img
    
  2. 关闭 kvm 客户机并停用逻辑卷

    # virsh shutdown guest
    # lvchange -a n /dev/storage_pool/guest.img
    
  3. 列出并记录 kvm 客户端的分区信息,最重要的是第一个扇区。如果它不显示扇区,您可能需要添加“-u”或“-u 扇区”开关

    # fdisk -l /dev/storage_pool/guest.img
    
  4. 删除并重新创建分区以填充整个扩展空间,确保您使用扇区作为单位并选择相同的第一个扇区(如果分区对齐,通常为 2048),您可以使用“u”fdisk 命令在单位之间切换

    # fdisk /dev/storage_pool/guest.img
    Command (m for help): d
    Partition number (1-4): 1
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First sector (...): 2048
    Last sector...: hit enter and use the default last sector
    Command (m for help): a
    Partition number (1-4): 1
    Command (m for help): w
    
  5. 暴露 ext3/4 文件系统并调整其大小

    # kpartx -a -v /dev/storage_pool/guest.img
    # e2fsck -p -f /dev/mapper/storage_pool-guest.img1
    # resize2fs /dev/mapper/storage_pool-guest.img1
    # e2fsck -p -f /dev/mapper/storage_pool-guest.img1
    # kpartx -d -v /dev/storage_pool/guest.img
    
  6. 激活逻辑卷并启动 kvm 客户机

    # lvchange -a y /dev/storage_pool/guest.img
    # virsh start guest
    

答案3

在搜索相同内容时,我发现您的问题尚未得到解答。对我来说,以下方法有效:

  1. 以通常的方式关闭客户机(在我的情况下是 Debian 7.0)。

  2. 扩展“原始”LV(当然是在主机的 VG 中),例如,扩展 5G。为此,您必须在主机上拥有 root/sudo 权限:

    lvextend -L +5G /dev/你的存储池VG/你的虚拟计算机VGToExtend

  3. 在 gparted 中打开新扩展的 lv(即 VM 的“磁盘”):

    gparted /dev/mapper/YourStoragePoolVG-YourVirtualMachinesVGToExtend

  • 注意:您必须使用“/dev/mapper/…”路径, 不是“/dev/dm-77”或“/dev/YourStoragePoolVG/...”或其他(这似乎是 LVM 的一个错误/功能)!
  1. 摆弄修改后的卷上的分区(像往常一样使用 GUI)
  • 注意:考虑有关数据丢失、fs 类型等的警告!
  • 注意:要小心。
  • 分区,您可以调整分区大小并在 LV 内存储在 virtio 磁盘上的分区表中移动它们。
  • 在我看来,扩展一个或多个分区不是问题。对于分区/文件系统缩小,请使用 Google...
  • gparted 还会调整分区上的文件系统(而不仅仅是分区本身)。
  1. 重新启动虚拟机。它现在可以看到修改后的分区。

正如我所说,这对我来说很有效(我可以在一些玩具安装上尝试这个,而不会冒险)。有人可以查看上述说明并评论这是否普遍有效吗?谢谢。

答案4

这很简单 - 在主机的 LVEXTEND|LVRESIZE 之后,从具有 GPARTED 的 LiveCD ISO 启动到 VM。CD 启动完成后,使用 VM 中使用的根分区名称运行 GPARTED:

$ gparted /dev/vda1" # for VirtIO /dev/vda

或者

$ gparted /dev/sda1" # for SATA emulated /dev/sda

并以 GPARTED 的通常方式执行分区大小调整

相关内容