阿里云云盘动态扩容

阿里云 文章 2023-01-03 13:21 1298 0 全屏看文

AI助手支持GPT4.0

扩容分区和文件系统(Linux)

更新时间:2022年12月19日 23:47:00


本文为您介绍如何扩容Linux实例云盘(系统盘或数据盘)的分区和文件系统。

操作场景

在ECS控制台上扩容云盘容量后,对应分区和文件系统并未扩容,您还需要进入ECS实例内部继续扩容云盘的分区和文件系统,将扩容部分的容量划分至已有分区或者新增分区,使云盘扩容生效。

本文操作适用于以下云盘扩容场景:

前提条件

  • 确保Linux实例的操作系统是Alibaba Cloud Linux 2/3、CentOS 6及以上、Debian 8及以上或者Ubuntu14及以上版本。说明 如果为其他操作系统,扩容操作请参见扩展分区和文件系统_Linux数据盘

  • 已参考步骤一:扩容云盘容量,在ECS控制台扩容云盘容量。

  • (强烈建议)已创建云盘快照,做好数据备份。具体操作,请参见创建快照

    如果您在执行步骤一:扩容云盘容量时未创建快照,强烈建议您在扩容分区和文件系统前,为云盘创建快照,做好数据备份。

准备工作:确认待扩容云盘及其分区信息

执行扩容分区和文件操作系统前,请先确认待扩容云盘和云盘分区信息,来确定要执行的操作。

  1. 远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 运行以下命令,确认待扩容云盘及其分区信息。放大查看复制代码

    fdisk -lu

    确认分区情况如图所示,表示该实例有2块云盘,系统盘/dev/vda和数据盘/dev/vdb,我们以数据盘/dev/vdb为例。其中:

    • 已分区:有②处的分区信息表示已分区,Device取值为分区名称(示例中为/dev/vdb1),数字1是分区编号,则需扩容分区和文件系统。

    • 未分区(裸设备):没有②处的分区信息表示未分区,为裸设备。则无需扩容分区,直接执行步骤二:扩容文件系统

    • ①:云盘的设备名称。

    • ②:云盘是否分区及分区名称。

    • ③:云盘的分区类型。

      Disk label type值为dos表示MBR分区,值为gpt表示GPT分区。

      说明 不同操作系统的显示略有不同。如果没有Disk label type字段,可通过System字段判断。System值为Linux表示MBR分区,值为GPT表示GPT分区。

    • ④:该云盘的总扇区大小(图示例125829120)。如果云盘的最后一块分区(示例中为/dev/vdb1)的End值(图示例83886079)和总扇区大小差距过大,表示该分区未利用所有云盘空间,待扩容分区。或者您可以通过lsblk命令查看哪个分区待扩容。

步骤一:扩容分区

本操作以公共镜像Alibaba Cloud Linux 2.1903 LTS 64位操作系统、在ECS实例内部将云盘分区/dev/vdb1由40 GB扩容至60 GB(已在控制台扩大容量为60 GB)为例,请您根据实际环境进行操作。

  1. 可选:根据准备工作确认的信息,如果您的云盘分区类型为MBR且在控制台扩容后容量大于2 TiB,需先转换分区为GPT分区。否则跳过该步骤。具体操作,请参见转换Linux数据盘的分区类型

  2. 运行以下命令,安装工具。

    • Alibaba Cloud Linux 2/3版本、CentOS 6及以上版本运行以下命令。说明 由于CentOS 6和CentOS 8结束生命周期(EOL),如果您使用的是CentOS 6或者CentOS 8系统的ECS实例,请先切换源地址。具体操作,请参见CentOS 6 EOL如何切换源?CentOS 8 EOL如何切换源?

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

    1. 更新软件源。放大查看复制代码

      apt-get update
    2. 安装cloud-guest-utils。放大查看复制代码

      type growpart || apt-get install -y cloud-guest-utils
    3. (可选)根据准备工作确认的信息,如果您的云盘分区类型为GPT,还需运行以下命令安装gdisk工具。放大查看复制代码

      type sgdisk || apt-get install -y gdisk
    4. 安装growpart工具。放大查看复制代码

      type growpart || yum install -y cloud-utils-growpart
    5. (可选)根据准备工作确认的信息,如果您的云盘分区类型为GPT,还需运行以下命令安装gdisk工具。放大查看复制代码

      type sgdisk || yum install -y gdisk
  3. 扩容分区。以云盘分区名称/dev/vdb1为例,则运行如下命令。放大查看复制代码

    LC_ALL=en_US.UTF-8 growpart /dev/vdb 1

    重要如下图所示,输出CHANGED字样时,表示分区扩容成功。扩容分区

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

    • 使用growpart工具时,如果出现报错信息,请参见常见问题进行排查。

    • 1是分区编号,/dev/vdb和1之间需要空格分隔。

    • LC_ALL=en_US.UTF-8是为了解决中文操作系统的编码问题。

  4. 可选:执行reboot命令重启实例。如果您扩容的是CentOS 6的系统盘或者发现扩容后操作系统实际识别的分区没有扩展,这是操作系统版本较低的原因,需要重启实例使分区扩容生效。

步骤二:扩容文件系统

说明 云盘和文件系统正在被使用的状态下,采用resize2fs等工具在线扩容文件系统,有可能会触发文件系统数据问题,该问题与镜像内核版本、resize2fs工具版本相关,与云盘扩容本身无关。建议您为云盘创建快照,做好数据备份。具体操作,请参见创建快照
  1. 运行以下命令,查看文件系统类型。放大查看复制代码

    df -Th

    Type值为文件系统类型,Mounted on值为分区的挂载目录。如下图,表示/dev/vdb1分区的文件系统类型为ext4,挂载目录为/mnt。

    文件系统类型

    如果Filesystem取值后缀不带数字(例如/dev/vdc),则为裸设备。

  2. 运行以下命令,扩容文件系统。

    扩容命令因文件系统类型而异,请您根据上一步中查询到的文件系统类型选择以下命令。

    • 以扩容云盘分区/dev/vdb1的ext4文件系统为例,则运行如下命令:放大查看复制代码

      resize2fs /dev/vdb1
    • 以扩容裸设备/dev/vdc的ext4文件系统为例,则运行如下命令:放大查看复制代码

      resize2fs /dev/vdc
    • ext4文件系统

    • xfs文件系统以扩容挂载目录为/mnt的xfs文件系统为例,则运行如下命令:放大查看复制代码

      type xfs_growfs || yum install -y xfsprogs xfs_growfs /mnt
    • btrfs文件系统以扩容挂载目录为/mnt的btrfs文件系统为例,则运行如下命令:放大查看复制代码

      btrfs filesystem resize max /mnt
  3. 运行以下命令,确认是否扩容成功。放大查看复制代码

    df -Th

    当查询结果中的文件系统容量和控制台容量一致时,表示扩容成功。

    如下图所示,分区/dev/vdb1文件系统容量和控制台扩容容量(60 GB)基本一致,表示扩容完成。扩容效果扩容完成后,您需要根据实际情况检查云盘数据是否正常。

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

    • 如果扩容失败,您可以通过备份的快照回滚数据。具体操作,请参见使用快照回滚云盘

常见问题

说明 如果您遇到难以解决的问题,您可以加入云盘扩容问题客户钉钉群(钉钉群号:25920014655)与我们的工程师即时沟通。

growpart相关问题

  1. 运行扩容分区growpart命令时,提示unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]。

    原因:中文版操作系统使用了非en_US.UTF-8的字符编码类型。

    解决方案:重要 当您通过切换字符编码,成功完成扩容分区后,建议您按需切回原有字符编码。

    1. 运行以下命令,切换字符编码类型。放大查看复制代码

      export.UTF-8
    2. 如果问题仍未解决,运行以下命令,切换字符编码类型。放大查看复制代码

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

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

  2. 运行扩容分区growpart命令时,提示unexpected output in sfdisk --version [sfdisk (util-linux-ng 2.17.2)]。

    原因:您的fdisk版本与growpart版本不兼容。

    解决方案:尝试将growpart版本降低到0.27。

  3. 运行扩容分区growpart命令时,提示FAILED: unable to determine partition type。

    原因:您的云盘是裸设备,未分区。裸设备无需执行扩容分区操作,直接扩容文件系统即可。

    解决方案:直接扩容文件系统

  4. 运行扩容分区growpart命令时,提示WARNING: MBR/dos partitioned disk is larger than 2TB. Additional space will go unused.。

    原因:MBR分区类型不支持2 TiB以上的云盘。

    解决方案:先将分区类型从MBR转换为GPT,然后再扩容分区。具体操作,请参见转换MBR分区为GPT分区

  5. 为什么在CentOS 6中安装growpart工具时提示Error: Cannot retrieve repository metadata。

    原因:CentOS 6操作系统版本已结束生命周期(EOL),继续使用默认源会导致无法安装包。

    解决方案:

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

    2. 重新运行以下命令,安装growpart工具。放大查看复制代码

      type growpart || yum install -y cloud-utils-growpart
    3. 如果问题仍未解决,请参考扩展分区和文件系统_Linux数据盘扩容分区。

resize2fs相关问题

  1. 问题:运行扩容文件系统resize2fs命令时,提示如下信息。放大查看复制代码

    resize2fs: Device or resource busy while trying to open /dev/vda Couldn't find valid filesystem superblock.

    或者放大查看复制代码

    open: Is a directory while opening /mnt

    原因:扩容文件系统时,resize2fs指定的是云盘分区名称,不是云盘设备名称或者分区的挂载目录。

    解决方案:扩容文件系统时,请您指定正确的分区名称。

  2. 问题:运行扩容文件系统resize2fs命令时,提示The filesystem is already ... blocks long. Nothing to do!。

    原因:文件系统没有可扩容的空间,可能是分区扩容未生效导致。

    解决方案:如果您发现扩容后操作系统实际识别的分区没有扩展,可能是操作系统版本较低的原因,请尝试执行<code style="box-sizing: border-box;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);font-family: var(--cb-typo-font-family-monospace,Operator Mono,Menlo,Monaco,Liberation Mono,DejaVu Sans Mono,Courier New,monospace);font-size: 1em;padding: 2px 4px;border-ra


-EOF-

AI助手支持GPT4.0