如何增加 KVM 客户机的磁盘空间?

如何增加 KVM 客户机的磁盘空间?

我在 CentOS KVM 主机上设置了一个 Ubuntu 客户端,初始磁盘空间为 6GB。如何从命令行增加 Ubuntu 客户端的磁盘空间?

编辑#1:我正在使用磁盘映像文件(qemu)。

答案1

  1. 停止虚拟机
  2. 运行qemu-img resize vmdisk.img +10G以将图像大小增加 10Gb
  3. 启动虚拟机,正常调整其中的分区和 LVM 结构

答案2

在线方法(使用 qemu、libvirt 和 virtio-block)

不管怎样,即使目标虚拟磁盘已挂载,以下命令也会运行。这在磁盘无法卸载(例如根分区)、虚拟机必须保持开启状态且系统所有者愿意承担数据损坏的风险为了消除这种风险,您需要先登录虚拟机并卸载目标磁盘,但这并不总是可行的。

从 KVM 虚拟机管理程序执行以下操作。

  1. 增加磁盘映像文件本身的大小(指定要增加的数量):

    qemu-img resize <my_vm>.img +10G
    
  2. 通过 libvirt shell 获取 virtio 设备的名称(drive-virtio-disk0在此示例中):

    virsh qemu-monitor-command <my_vm> info block --hmp
      drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0
      drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
    
  3. 向 virtio 驱动程序发出信号以检测新的大小(指定新的总容量):

    virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
    

然后登录虚拟机。运行dmesg应报告 virtio 磁盘检测到容量变化。此时,继续根据需要调整分区和 LVM 结构的大小。

答案3

这些 serverfault 问题类似,但更具体,KVM 在线调整磁盘大小?&Centos Xen 调整 DomU 分区和卷组的大小。第一个问题是如何在 KVM 客户机在线时增加它,而第二个问题则是使用 LVM 的 XEN 特定问题。我问的是如何在 KVM 离线时完成此操作。

笔记:此链接对于方法 #1 很有用,并展示了如何增加 KVM 的磁盘空间(基于 ext3),如何:调整 KVM 虚拟机映像的大小

对于 KVM 客户机要注意的一件事是,它们内部使用的分区会影响您可以使用哪种方法来增加其磁盘空间。

方法一:分区基于 ext2/ext3/ext4

该方法的具体内容如下:

# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak

# 3. create a new image
qemu-img create -f raw addon.raw 30G

# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img

现在有了更大的 mykvm.img 文件,启动分区并将现有分区扩展到新添加的磁盘空间。这最后一步基本上扩展了操作系统分区,以便它可以利用额外的空间。

方法 2:分区基于 LVM

以下是我大致遵循的调整内部使用 LVM 的 KVM 客户机大小的步骤。

  1. 关闭虚拟机
  2. 为客户的“图像文件”添加更多空间(例如:cat old.img 10G_addon.raw >> new.img
  3. 启动虚拟机(使用新创建的 new.img)
  4. 在虚拟机内运行 fdisk 并删除并重新创建 LVM 分区

    % fdisk /dev/vda
    ...
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        3263    26105625   8e  Linux LVM
    
    Command (m for help): d
    Partition number (1-4): 2
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    
    Command (m for help): n 
    Command action
      e   extended
      p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (14-5874, default 14): 14
    Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874): 
    Using default value 5874
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  83  Linux
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or 
    resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.
    %
    
  5. 重启虚拟机

  6. 调整 LVM 物理卷的大小

    % pvdisplay 
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               24.90 GB / not usable 21.59 MB
      Allocatable           yes (but full)
      PE Size (KByte)       32768
      Total PE              796
      Free PE               0
      ...
    
    % pvresize /dev/vda2
    
    % pvdisplay
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               44.90 GB / not usable 22.89 MB
      Allocatable           yes 
      PE Size (KByte)       32768
      Total PE              1436
      Free PE               640
      ...
    
  7. 调整 LVM 逻辑卷的大小

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. 扩大文件系统

      % resize2fs /dev/VolGroup00/LogVol00 
      resize2fs 1.39 (29-May-2006)
      Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
      Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
      The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
    

以上是我的例子,但我遵循了此步骤网站

答案4

无需停止虚拟机即可进行在线调整大小。libvirtd 原生支持此功能:

查找块设备名称。应该类似于“vda”

$ virsh domblklist <libvirtd_vm_name>

调整虚拟设备的大小:

$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>

下面是我将vda磁盘从扩展50GB到VM51GB的一个例子undercloud

[root@localhost ~]# virsh domblklist undercloud
Target     Source
------------------------------------------------
vda        /home/images/undercloud.qcow2

现在看一下.qcow2 图像文件的详细信息:

[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

现在让我们调整 vda 块设备的大小:

[root@localhost ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized

并确认:

[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 51G (54760833024 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
[root@localhost ~]#

然后,您可以在虚拟机内部使用此脚本来显示调整块设备和 fs 大小的命令:https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh。以下是示例输出:

mvutcovi@ubuntu1904:~$ wget -q https://raw.githubusercontent.com/mircea-vutcovici/scripts/master/vol_resize.sh

mvutcovi@ubuntu1904:~$ df /
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda1       15414216 7928904   6682600  55% /

mvutcovi@ubuntu1904:~$ sudo bash vol_resize.sh --block-device /dev/vda1
sfdisk -d /dev/vda > dev_vda-partition-table-$(date +%F_%H%M%S).txt   # Backup MS-DOS partition table for /dev/vda block device.
parted -s /dev/vda resizepart 1   # Resize MS-DOS partition /dev/vda1
# Update kernel with new partition table from disk
partx -u /dev/vda
partprobe /dev/vda
blockdev --rereadpt /dev/vda
kpartx -u /dev/vda
resize2fs /dev/vda1    # Resize ext3 or ext4 filesystem
mvutcovi@ubuntu1904:~$ 

相关内容