云盘扩容后使用growpart扩展GPT分区失败该如何处理?

更新时间:
复制 MD 格式

问题现象

云盘的分区格式为GPT,云盘进行云盘容量扩容后,使用growpart工具扩展分区(例如/dev/vdb1)或者文件系统时提示如下所示的报错信息,导致云盘容量扩容了但是分区和文件系统的可用空间没有增加。本文以/dev/vdb1分区为例进行说明。

[root@ixxx ~]# growpart /dev/vdb 1
failed [pt_update:1] pt_update /dev/vdb 1
partx: /dev/vdb: error updating partition 1
FAILED: disk=/dev/vdb partition=1: failed to repartition
***** WARNING: Resize failed, attempting to revert ******
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
***** Appears to have gone OK ****

可能原因

初始化数据盘(例如/dev/vdb)时,未按推荐的分区对齐方式进行分区,即未按要求执行mkpart primary 1 100%命令设置分区的开始位置和结束位置。

您可以执行以下命令查看分区是否对齐:

  • fdisk -l:查看Start值是否为2048。如果不是,表示分区未对齐。

  • parted -l:查看Start值是否1049 kB。如果不是(如下所示),表示分区未对齐。

    [root@izxxx ~]# parted -l
    Model: Virtio Block Device (virtblk)
    Disk /dev/vda: 42.9GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    Number  Start   End     Size    File system  Name                  Flags
     1      1049kB  101MB   99.6MB  fat16        EFI System Partition  boot
     2      101MB   20.1GB  20.0GB  ext4
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 3221GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    Number  Start   End     Size    File system  Name     Flags
     1      17.4kB  1074GB  1074GB  ext4         primary

解决方案

您可以参考以下步骤,重新分区后再扩展分区,解决上述问题。

  1. 远程连接ECS实例。

    具体操作,请参见选择ECS远程连接方式

  2. 执行以下命令,查看etc/fstab/dev/vdb1的分区信息。

    cat /etc/fstab

    例如/dev/vdb1分区的信息如下所示。

    [root@iZxxx ~]# cat /etc/fstab
    #
    # /etc/fstab
    # Created by anaconda on Fri Mar 18 11:23:53 2022
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=1ecad39c-b7f6-4d5f-bfe1-2ffec1877a1d /                       ext4    defaults        1 1
    UUID=B483-4E9C          /boot/efi               vfat    umask=0077,shortname=winnt 0 0
    UUID=f315122e-2d1d-4705-aaaa-1ad62ae66096 /mnt ext4 defaults 0 0
  3. 执行以下命令,编辑etc/fstab文件,然后手动删除已查询到的/dev/vdb1的分区信息。

    vim /etc/fstab
  4. 执行以下命令,卸载分区/dev/vdb1

    umount /dev/vdb1
    [root@xxx          ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs         31G     0   31G   0% /dev
    tmpfs            31G     0   31G   0% /dev/shm
    tmpfs            31G   33M   31G   1% /run
    tmpfs            31G     0   31G   0% /sys/fs/cgroup
    /dev/vda2        19G  3.5G   14G  21% /
    /dev/vda1        95M   12M   84M  12% /boot/efi
    tmpfs           6.2G     0  6.2G   0% /run/user/0
    /dev/vdb1       985G   77M  935G   1% /mnt
    [root@xxx          ~]# umount /dev/vdb1
    [root@xxx          ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs         31G     0   31G   0% /dev
    tmpfs            31G     0   31G   0% /dev/shm
    tmpfs            31G   33M   31G   1% /run
    tmpfs            31G     0   31G   0% /sys/fs/cgroup
    /dev/vda2        19G  3.5G   14G  21% /
    /dev/vda1        95M   12M   84M  12% /boot/efi
    tmpfs           6.2G     0  6.2G   0% /run/user/0
  5. 重新分区并挂载文件系统。

    重要

    重新分区会丢失原分区的数据,请您提前创建快照备份云盘上的所有数据,待重新分区并挂载文件系统完成后,您可以通过备份数据恢复原云盘。创建快照的具体操作,请参见手动创建单个快照

    具体操作,请参见初始化数据盘(Linux)

  6. 重新扩容分区及文件系统