在ECS控制台上扩容云盘容量后,对应分区和文件系统并未扩容,您需要进入ECS实例内部继续扩容云盘的分区和文件系统。本文为您介绍如何扩容Linux实例云盘的分区和文件系统。

前提条件

  • 您已在ECS控制台在线或者离线扩容完云盘容量。

  • Linux实例扩容分区和文件系统前,需要满足以下条件。


    资源限制条件
    实例
    云盘
    • 云盘状态为使用中(In Use)。

    • 云盘扩容后的容量不能超过云盘最高容量。注意 云盘MBR分区格式不支持扩容到2 TiB及以上。如果您的MBR分区容量需要扩容到2 TiB以上,建议您先创建一块大于2 TiB的云盘并格式化为GPT分区,再将MBR分区中的数据拷贝到GPT分区中。格式化GPT分区具体操作。

    • 实例状态为运行中(Running)。

    • 镜像版本:Linux实例实现扩容分区和文件系统功能。

    • 内核版本:Linux实例内核不低于3.6.0版本,您可以使用uname -a命令查看内核版本。


背景信息

本文示例中使用的配置如下所示。

资源描述
ECS实例的镜像公共镜像Alibaba Cloud Linux 2.1903 LTS 64位
系统盘/dev/vda:使用MBR分区和ext4文件系统,由40 GiB扩容到60 GiB。
数据盘
  • /dev/vdb:使用MBR分区和ext4文件系统,由40 GiB扩容到60 GiB。

  • /dev/vdc:使用GPT分区和xfs文件系统,由40 GiB扩容到60 GiB。

步骤一:查看云盘分区情况

在ECS控制台上扩容云盘后,对应分区和文件系统并未扩容,您需要进入ECS实例内部,查看系统盘和数据盘的分区类型(MBR和GPT)和文件系统类型(ext4、xfs等)。不同的分区和文件系统,后续扩容分区和文件系统操作中存在差异。

  1. 远程登录ECS实例。

  2. 运行以下命令查看实例的云盘情况。

fdisk -lu
  1. 示例以系统盘(/dev/vda1)和数据盘(/dev/vdb1、/dev/vdc1)的三个分区为例,执行结果如下所示。查看云盘分区情况


    序号分区说明
    /dev/vda1系统盘,System取值Linux表示为MBR分区。
    /dev/vdb1数据盘,System取值Linux表示为MBR分区。
    /dev/vdc1数据盘,System取值GPT表示为GPT分区。

    说明 如果您的查询结果中云盘容量还是40 GiB(Disk /dev/vda: 42.9 GB),表示扩容不成功,建议您在控制台重启下本实例。

  2. 运行以下命令确认已有分区的文件系统类型。

df -Th
  1. 执行结果如下所示。其中,Mounted on列为文件系统对应的挂载点。

    查看文件系统

步骤二:扩容分区

注意 云盘和文件系统正在被使用的状态下,采用resizefs等工具在线扩容文件系统,有可能会触发文件系统数据问题,该问题与镜像内核版本、resize2fs工具版本相关,与云盘扩容本身无关。因此建议您在扩容分区和文件系统前,为云盘创建快照,做好数据备份,并确认相关镜像和工具的可靠性。

通过查看云盘分区情况,在ECS实例内分区和文件系统并未扩容。此步骤介绍如何在ECS实例内部扩容云盘分区。

  1. 在ECS实例内部,安装gdisk工具。如果您的分区为GPT格式,必须执行此步骤;如果您的分区为MBR格式,请跳过此步骤。

yum install gdisk -y

安装growpart工具。

Alibaba Cloud Linux 2/3版本、CentOS 7及以上版本运行以下命令。

yum install -y cloud-utils-growpart

    • 说明 由于CentOS 8结束生命周期(EOL),如果您使用CentOS 8系统的ECS实例,请先切换源地址。

    • Debian 8及以上版本、Ubuntu14及以上版本运行以下命令。

      更新软件源。

    apt-get update
    • 安装cloud-guest-utils。

    apt-get install -y cloud-guest-utils
  1. 运行以下命令扩容分区。

growpart /dev/vda 1
  1. 示例命令表示扩容系统盘的第一个分区,/dev/vda是系统盘,1是分区编号,/dev/vda1之间需要空格分隔。growpart请根据实际情况修改命令,继续扩容数据盘的分区。说明

    • 如果单盘有多个连续分区的情况,例如数据盘/dev/vdb有三个分区/dev/vdb1/dev/vdb2/dev/vdb3。扩容时,只需要扩容最后一个分区即可,即执行growpart /dev/vdb 3,即可完成数据盘 /dev/vdb的分区扩容。

    • 您在执行此步骤时,可能出现报错信息unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]

    • 扩容数据盘/dev/vdb

      growpart /dev/vdb 1
    • 扩容数据盘/dev/vdc

      growpart /dev/vdc 1

步骤三:扩容文件系统

此步骤介绍如何在ECS实例内部扩容分区的文件系统。

  1. 在ECS实例内部,根据查询的文件系统类型,扩容文件系统。

    • 扩容ext*(例如ext4)文件系统:运行以下命令扩容文件系统。扩容系统盘/dev/vda1的文件系统。

      resize2fs /dev/vda1

      扩容数据盘/dev/vdb1的文件系统。

      resize2fs /dev/vdb1

      说明 /dev/vda1/dev/vdb1都是分区名称,您需要根据实际情况修改。

    • 扩容xfs文件系统:运行以下命令扩容数据盘/dev/vdc1的文件系统。

      xfs_growfs /media/vdc

      说明 /media/vdc/dev/vdc1的挂载点,您需要根据实际情况修改。

    • 扩容btrfs文件系统:如果您的数据盘文件系统为btrfs,则需要运行以下命令扩容文件系统。

      btrfs filesystem resize max /mountpoint

      说明 /mountpoint为数据盘对应的挂载点,您需要根据实际情况修改。

  2. 运行以下命令检查扩容后结果。

    df -Th

    执行结果如下所示。

    查看扩容结果扩容完成后,您需要根据实际情况检查数据是否正常。

    • 如果扩容成功,ECS实例中的业务程序能够正常运行,则完成操作。

    • 如果扩容失败,则通过备份的快照回滚数据。

支持的操作系统

支持扩容分区和文件系统的Linux公共镜像(或基于公共镜像制作的自定义镜像)包括:
  • Alibaba Cloud Linux:Alibaba Cloud Linux 2版本和Alibaba Cloud Linux 3版本

  • CentOS:

    • CentOS 6:CentOS 6.8及以上版本

    • CentOS 7:CentOS 7.2及以上版本

    • CentOS 8及以上版本

  • Red Hat Enterprise Linux:

    • RHEL 6:RHEL 6.9及以上版本

    • RHEL 7:RHEL 7.4及以上版本

    • RHEL 8及以上版本

  • Ubuntu:Ubuntu 16及以上版本

  • Debian:Debian 8及以上版本

  • SUSE:SUSE 12 SP2及以上版本

  • OpenSUSE:OpenSUSE 42.3及以上版本

常见问题

  • 问题:运行growpart /dev/vda 1时,提示unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]解决方案注意

    当您通过切换字符编码,成功完成扩容分区后,建议您按需切回原有字符编码。

    1. 运行以下命令,切换字符编码类型。

      LANG=en_US.UTF-8
    2. 如果问题仍未解决,运行以下命令,切换字符编码类型。

      export LC_ALL=en_US.UTF-8
    3. 如果问题仍未解决,运行以下命令,切换字符编码类型。

      localectl set-locale.UTF-8
    4. 如果采用以上方案无法解决问题时,运行以下命令,切换字符编码类型。

      export LANGUAGE=en_US.UTF-8
    5. 运行locale命令查看ECS实例的字符编码类型,将非en_US.UTF-8的字符编码类型切换成en_US.UTF-8

    6. 如果问题仍未解决,请您尝试运行reboot命令重启ECS实例。

  • 问题:运行growpart /dev/vda 1时,提示-bash: growpart: command not found解决方案

    • CentOS 7及以上版本运行以下命令。

      yum install -y cloud-utils-growpart

      说明 由于CentOS 8结束生命周期(EOL),如果您使用CentOS 8系统的ECS实例,请先切换源地址。

    • Debian 8及以上版本、Ubuntu14及以上版本运行以下命令。

      apt install -y cloud-guest-utils
    1. 运行uname -a检查Linux内核的版本。本文操作适用于Linux内核版本3.6.0及以上的系统。


  • 问题:为什么在CentOS 6.5中不能安装growpart进行扩容分区?解决方案:CentOS 6操作系统的Linux内核低于3.6.0版本,如果您需要在CentOS 6中使用growpart,请参考以下步骤:

    1. 在CentOS 6中切换yum源。说明 CentOS 6操作系统版本已结束生命周期(EOL),如果您需要使用yum安装软件包,需要先切换yum源。

    2. 在CentOS 6中安装dracut-modules-growroot并扩容云盘分区。