扩容云盘
扩容云盘
提示
不是所有的业务都需要扩展云盘,根据自己的业务需求来判断
扩容分区
确认待扩容云盘及其分区信息
sudo fdisk -lu


如图所示,表示该实例有2块云盘,系统盘/dev/vda和数据盘/dev/vdb,我们以数据盘/dev/vdb为例。其中:
● ①:云盘的设备名称。
● ②:云盘是否分区及分区名称。
○ 已分区:如果有②处的分区信息表示已分区,Device取值为分区名称(示例中为/dev/vdb1),数字1是分区编号,则需扩容分区和文件系统。
○ 未分区(裸设备):如果没有②处的分区信息表示未分区,为裸设备。则无需执行步骤1:扩容分区,直接执行步骤2:扩容文件系统即可。
● ③:云盘的分区类型。Disk label type值为dos表示MBR分区,值为gpt表示GPT分区。
● 不同操作系统的显示略有不同。如果没有Disk label type字段,可通过System字段判断。System值为Linux表示MBR分区,值为GPT表示GPT分区。
● 较低版本的fdisk可能不能正常显示GPT分区表。您可以通过gdisk -l /dev/vdb命令查看分区类型。
● ④:确认待扩容的分区。
由于容量= sectors值512 bytes,图示例中:
● 云盘/dev/vdb的sectors=125829120,则云盘容量=125829120512bytes=64.4GB(等于60GiB)
● 分区/dev/vdb1的sectors=(End-Start)=83886078,则分区容量= 83886078*512bytes=42.9GB(等于40GiB)
根据计算得出/dev/vdb1分区的容量小于云盘/dev/vdb的容量,即/dev/vdb1分区需要扩容。
您也可以通过运行lsblk命令查看哪个分区待扩容。
lsblk
● (条件必选)根据准备工作获取的信息,如果您的云盘分区类型为MBR且在控制台扩容后容量大于2 TiB,需先转换分区为GPT分区。
具体操作,请参见转换Linux数据盘的分区类型。
运行以下命令,扩容指定分区。例如扩容分区名称为/dev/vdb1的分区,则执行如下命令。
● 说明
● 命令参数中的/dev/vdb和1之间需要空格分隔,1是分区编号。
● 如果您扩容的是系统盘,命令中的/dev/vdb需要替换为/dev/vda。
● MBR分区
type growpart || sudo yum install -y cloud-utils-growpart
sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
sudo LC_ALL=en_US.UTF-8 growpart /dev/vda 1

GPT分区(需安装gdisk工具)
type growpart || sudo yum install -y cloud-utils-growpart
type sgdisk || sudo yum install -y gdisk
sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
由于CentOS 6和CentOS 8结束生命周期(EOL),如果您使用的是CentOS 6或者CentOS 8系统的ECS实例,请先切换源地址。具体操作,请参见CentOS 6 EOL如何切换源?和CentOS 8 EOL如何切换源?。
重要
执行扩容分区命令时,您需要特别注意以下几种情况:
● LC_ALL=en_US.UTF-8是环境变量设置,为了兼容中文操作系统的字符编码。
● 如果单盘有多个连续分区的情况,仅能扩容最后一个分区。例如数据盘/dev/vdb有三个分区/dev/vdb1、/dev/vdb2和/dev/vdb3。扩容时,只能扩容最后一个分区/dev/vdb3,即执行growpart /dev/vdb 3命令即可完成数据盘的分区扩容。
● 如果您是NVMe类型云盘,以分区名称/dev/nvme0n1p1为例,其中/dev/nvme0n1是设备名称。扩容时执行命令为growpart /dev/nvme0n1 1,而不是growpart /dev/nvme0n1p1 1。
● 如果您需要扩容的云盘分区是MBR分区表下的扩展分区(通常判断方式是分区号大于等于5),您需要先进行扩展分区扩容后再对逻辑分区进行扩容。例如您有/dev/vdb1(主分区)、/dev/vdb2(扩展分区)、/dev/vdb5(逻辑分区)三个分区,此时您需要依次执行growpart /dev/vdb 2、growpart /dev/vdb 5完成分区的扩容。
● 使用growpart工具时,如果出现报错信息,请参见常见问题进行排查。
如下图所示,输出CHANGED字样时,表示分区扩容成功。

扩容云盘
运行以下命令,获取需要扩容的文件系统的类型和挂载目录。
df -Th
Type值为文件系统类型,Mounted on值为分区的挂载目录。如下图表示/dev/vdb1分区的文件系统类型为ext4,挂载目录为/mnt。

如果Filesystem取值后缀不带数字(例如/dev/vdc),则为裸设备。
容文件系统。
扩容命令因文件系统类型而异,请您根据上一步中查询到的文件系统类型选择以下命令。
说明
云盘和文件系统正在被使用的状态下,采用resize2fs等工具在线扩容文件系统,有可能会触发文件系统数据问题,该问题与镜像内核版本、resize2fs工具版本相关,与云盘扩容本身无关。建议您为云盘创建快照,做好数据备份。具体操作,请参见创建一个云盘快照。
● 以扩容云盘分区/dev/vdb1的ext文件系统为例,则运行如下命令:
● 以扩容裸设备/dev/vdc的ext文件系统为例,则运行如下命令:
sudo resize2fs /dev/vdb1
提示
说明 如果扩容的是系统盘,命令中的/dev/vdb1需要替换为/dev/vda1。
实例:
sudo resize2fs /dev/vda1
sudo resize2fs /dev/vdc
运行以下命令,确认是否扩容成功。
df -Th
当查询结果中的文件系统容量和控制台容量一致时,表示扩容成功。
如下图所示,分区/dev/vdb1文件系统容量(59 GiB)和云盘容量(60 GiB)基本一致(因为文件系统本身会占用部分存储空间),表示扩容完成。

扩容完成后,您需要根据实际情况检查云盘数据是否正常。
● 如果扩容成功,ECS实例中的业务程序能够正常运行,则完成操作。
● 如果扩容失败,您可以通过备份的快照回滚数据。具体操作,请参见使用快照回滚云盘