Article / 文章中心

离线扩容云盘(Linux系统)

发布时间:2021-02-01 点击数:865

 云盘(系统盘或数据盘)使用空间不足时,您可以扩容云盘的存储容量。如果您的ECS实例不支持在线扩容云盘,可以通过离线扩容的方式为Linux实例进行扩容云盘。离线扩容云盘需要重启实例,您的业务会短暂中断,建议在业务不繁忙时操作。


 

背景信息

本文示例中使用的配置如下所示。
资源 描述
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。
 

步骤一:创建快照

在扩容云盘前,为云盘创建快照,做好数据备份。

  1. 登录ECS管理控制台
  2. 在左侧导航栏,单击实例与镜像 > 实例
  3. 在顶部菜单栏左上角处,选择地域。
  4. 找到需要扩容云盘的实例,单击实例ID。
  5. 实例详情页,单击云盘页签。
  6. 找到需要扩容的云盘,在操作列单击创建快照
  7. 在弹出的对话框中,输入快照名称,并按需绑定标签后,单击确定
  8. 单击快照页签,查看已创建的快照。
    当快照的进度100%时,表示快照创建完成,您可以执行后续操作。



步骤二:在控制台扩容云盘容量并重启(或启动)ECS实例

  1. 实例详情页,单击云盘页签。
  2. 选择需要扩容的云盘,在操作列单击更多 > 云盘扩容

    如果需要批量扩容多个云盘,请使用阿里云主账号在存储与快照 > 云盘页面选择多个云盘后,单击底部的云盘扩容。挂载在同一ECS实例下的云盘不支持批量扩容功能。

  3. 磁盘扩容页面,设置扩容后容量
    设置的扩容后容量不允许小于当前容量。
  4. 确认费用,阅读并选择服务条款后,单击确定扩容
  5. 阅读磁盘扩容须知后,单击已阅读,继续扩容,完成支付。
  6. 在控制台重启(或启动)实例。
    说明
    • 如果您的实例状态为运行中(Running)则需要在控制台重启实例;如果您的实例状态为已停止(Stopped)则需要在控制台启动实例。
    • 实例必须经过控制台重启实例或者调用API RebootInstance,才可以看到云盘容量扩展。在实例操作系统里重启无效。

    以下步骤以重启实例为示例。

    1. 在左侧导航栏,单击实例与镜像 > 实例
    2. 找到需要重启的实例,在操作列单击更多 > 实例状态 > 重启
    3. 重启实例对话框中,单击确定



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

进入ECS实例内部,查看系统盘和数据盘的分区类型(MBR和GPT)和文件系统类型(ext4、xfs等)。不同的分区和文件系统,后续扩容分区和文件系统操作中存在差异。

  1. 远程登录ECS实例。登录的具体步骤请参见通过Workbench远程连接Linux实例
  2. 运行以下命令查看实例的云盘情况。
    fdisk -lu
    示例以系统盘(/dev/vda1)和数据盘(/dev/vdb1、/vde/vdc1)的三个分区为例,执行结果如下所示。查看云盘分区情况
    序号 分区 说明
    /dev/vda1 系统盘,System取值Linux表示为MBR分区。
    /dev/vdb1 数据盘,System取值Linux表示为MBR分区。
    /dev/vdc1 数据盘,System取值GPT表示为GPT分区。
  3. 运行以下命令确认已有分区的文件系统类型。
    df -Th

    执行结果如下所示。

    查看文件系统



步骤四:扩容分区

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

  1. 在ECS实例内部,安装gdisk工具。
    如果您的分区为GPT格式,必须执行此步骤;如果您的分区为MBR格式,请跳过此步骤。
    yum install gdisk -y
  2. 安装growpart工具。
    • CentOS 7及以上版本运行以下命令。
      yum install -y cloud-utils-growpart
    • Debian 9及以上版本、Ubuntu14及以上版本运行以下命令。
      apt install -y cloud-guest-utils
  3. 运行以下命令扩容分区。
    growpart /dev/vda 1
    此示例以扩容系统盘为例,/dev/vda和1之间需要空格分隔。如果需要扩容其他分区,请根据实际情况修改命令。执行结果如下所示。growpart
    说明 您在执行此步骤时,可能出现报错信息unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]。关于如何排查此问题,请参见本文的常见问题部分。



步骤五:扩容文件系统

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

  1. 在ECS实例内部,根据查询的文件系统类型,扩容文件系统。
    • 扩容ext*(例如ext4)文件系统:运行以下命令扩容文件系统。
      扩容系统盘/dev/vda1的文件系统。
      resize2fs /dev/vda1

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

      resize2fs /dev/vdb1
      说明 /dev/vda1和/dev/vdb1都是分区名称,您需要根据实际情况修改。
    • 扩容xfs文件系统:运行以下命令扩容文件系统。
      xfs_growfs /media/vdc
      说明 /media/vdc为/dev/vdc1的挂载点,您需要根据实际情况修改。
  2. 运行以下命令检查扩容后结果。
    df -Th

    执行结果如下所示。

    查看扩容结果
    扩容完成后,您需要根据实际情况检查数据是否正常。
    • 如果扩容成功,ECS实例中的业务程序能够正常运行,则完成操作。
    • 如果扩容失败,则通过备份的快照回滚数据。



常见问题

  • 问题:运行growpart /dev/vda 1时,提示unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]。
    解决方案:
    1. 运行locale命令查看ECS实例的字符编码类型,将非en_US.UTF-8的字符编码类型切换成en_US.UTF-8
      1. 运行以下命令,切换字符编码类型。
        LANG=en_US.UTF-8
      2. 如果问题仍未解决,运行以下命令,切换字符编码类型。
        export LC_ALL=en_US.UTF-8
      3. 如果问题仍未解决,运行以下命令,切换字符编码类型。
        localectl set-locale LANG=en_US.UTF-8
      4. 如果您使用CentOS 8镜像,采用以上方案无法解决问题时,运行以下命令,切换字符编码类型。
        export LANGUAGE=en_US.UTF-8
    2. 如果问题仍未解决,请您尝试运行reboot命令重启ECS实例。
    注意

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

  • 问题:运行growpart /dev/vda 1时,提示-bash: growpart: command not found。
    解决方案:
    1. 运行uname -a检查Linux内核的版本。本文操作适用于Linux内核版本3.6.0及以上的系统。

      如果Linux内核低于3.6.0版本,扩容分区操作请参见扩展低内核版本实例的系统盘分区和文件系统扩展分区和文件系统_Linux数据盘

    2. 安装growpart工具。
      • CentOS 7及以上版本运行以下命令。
        yum install -y cloud-utils-growpart
      • Debian 9及以上版本、Ubuntu14及以上版本运行以下命令。
        apt install -y cloud-guest-utils

 

如果您有其他问题,可以联系北京志远天成阿里云代理商,为您提供一对一专业全面的技术服务,同时新老阿里云会员,均可享受我公司代理商价格,欢迎咨询! 欢迎咨询.gif