在ECS控制台上扩容云盘容量后,对应分区和文件系统并未扩容,您还需要继续扩容云盘的分区和文件系统,将扩容部分的容量划分至已有分区及文件系统内,使系统下可以正常使用扩容容量。本文为您介绍如何扩容Linux实例云盘的分区和文件系统。
前提条件
请确保实例满足以下条件:
状态为运行中(Running)。
请确保Linux实例的操作系统是Alibaba Cloud Linux 2/3、CentOS 6及以上、Debian 8及以上或者Ubuntu14及以上版本。
重要CentOS 6操作系统在扩容GPT分区表时,需要参考离线扩容分区和文件系统(Linux数据盘)使用
parted
命令进行操作,不能使用本文档介绍的growpart
命令进行操作,否则会有分区表被破坏的风险。判断是否为GPT分区,可以参见本文档中的步骤1:记录待扩容云盘信息。如果为其他操作系统,请参见离线扩容分区和文件系统(Linux数据盘)进行扩容操作。
请确保云盘满足以下条件:
状态为使用中(In_use)。
系统盘使用率未达到100%。
重要为确保扩容操作顺利进行,请登录实例并执行df -h命令,以确认根分区的使用率未达到100%。如根分区的使用率已达到100%,请参见解决Linux实例磁盘空间满问题以获取相应的解决方案。
已在ECS控制台扩容云盘容量。具体操作,请参见步骤一:扩容云盘容量。
说明如果您在扩容云盘容量时选择离线扩容,扩容后需要通过ECS控制台或API接口重启实例(在实例内部执行
reboot
命令重启无效)才能生效。具体操作,请参见重启实例。
准备工作
通过一键扩容工具扩容分区及文件系统
登录实例,自行扩容分区和文件系统
若您的环境无法通过云助手或一键扩容工具扩容分区及文件系统,您可选择登录实例,使用命令行实现扩容操作。
步骤1:记录待扩容云盘信息。
获取云盘信息。
方式一:通过命令行获取
远程连接ECS实例。
登录ECS管理控制台,点击左侧导航栏实例,选择目标实例,点击远程连接,登录实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
运行以下命令,确定待扩容云盘名称及分区信息。
sudo fdisk -lu
确定云盘是否分区。 如上图所示,表示该实例有3块云盘,系统盘
/dev/vda
、数据盘/dev/vdb
和数据/dev/vdc
盘,我们以数据盘为例。其中:vdb1表示数据盘/dev/vdb已分区,数字
1
是分区编号。vdc表示数据盘/dev/vdc未分区(裸设备)。
确定待扩容分区云盘。 我们以数据盘
/dev/vdb
为例。其中:SIZE表示容量大小,从图中可知
/dev/vdb1
分区的容量小于云盘/dev/vdb
的容量,即/dev/vdb1
分区需要扩容。说明您也可以通过运行
lsblk
命令查看哪个分区待扩容。确定待扩容云盘的分区类型。
Disklabel type
表示云盘的分区类型,值为dos
表示MBR分区,值为gpt
表示GPT分区。 我们以存在分区的数据盘/dev/vdb
为例。示例中的数据盘的云盘名称为/dev/vdb,分区名称为/dev/vdb1,分区类型为MBR分区。说明不同操作系统的显示略有不同。如果没有
Disk label type
字段,可通过System
字段判断。System
值为Linux
表示MBR分区,值为GPT
表示GPT分区。较低版本的fdisk可能不能正常显示GPT分区表。您可以通过
gdisk -l /dev/vdb
命令查看分区类型。
使用以下命令,获取待扩容云盘的文件系统信息。
sudo file -s 裸设备名称/分区名称
以上示例表示:
分区/dev/vdb1文件系统类型为ext4;
未分区(裸设备)/dev/vdc的文件系统类型为ext4;
未分区(裸设备)/dev/vdd无文件系统。
说明您也可以使用sudo blkid指令,获取待扩容云盘的文件系统信息。
方式二:通过控制台获取
重要使用该方式时注意:
该方式仅支持部分用户使用,支持情况以实际界面为准。
该云盘所在的ECS实例已安装云助手Agent。具体操作,请参见安装云助手Agent。
在实例详情页面的块存储页签下,找到待扩容的目标云盘。
鼠标悬浮至①处,再分别单击②处和③处的图标,查看待扩容云盘的设备名、分区类型、分区名称、文件系统类型和挂载点。
判断需要执行的扩容步骤。
云盘存在MBR分区,扩容后容量大于2TiB,且希望将扩容部分的容量划分至已有分区:因分区格式限制需先转换Linux数据盘的分区类型,然后再执行步骤2:扩容分区及步骤3:扩容文件系统。
云盘存在MBR或GPT分区,扩容后容量小于等于2TiB,且希望将扩容部分的容量划分至已有分区:需要执行步骤2:扩容分区及步骤3:扩容文件系统。
说明如果您希望新增分区而不是扩容已有分区,请参见新增并格式化MBR分区、选项四新增并格式化GPT分区。
云盘未分区但存在文件系统:无需执行扩容分区操作,直接执行步骤3:扩容文件系统即可。
云盘未分区也无文件系统:无需执行本文档操作。
说明具体的扩容示例,请参见扩容示例。
步骤2:扩容分区。
请依照判断需要执行的扩容步骤,确认云盘是否需要执行扩容分区操作。
执行扩容分区指令。
本操作以在ECS实例内部将云盘分区
/dev/vdb1
由40 GiB扩容至60 GiB(已在控制台扩大容量为60 GiB)为例,请您根据实际环境进行操作。根据不同的操作系统和分区类型,选择命令,扩容指定分区。
Alibaba Cloud Linux 2/3版本、CentOS 6及以上版本
重要由于CentOS 6和CentOS 8结束生命周期(EOL),所以如果您使用的是CentOS 6或者CentOS 8系统的ECS实例,请先切换源地址。具体操作,请参见CentOS 6 EOL如何切换源?和CentOS 8 EOL如何切换源?。
CentOS 6 扩容GPT分区表时,需要参考离线扩容分区和文件系统(Linux数据盘)使用parted进行操作,不能使用growpart命令进行操作,否则会有分区表被破坏的风险。
MBR分区
type growpart || sudo yum install -y cloud-utils-growpart sudo yum update cloud-utils-growpart sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
GPT分区(需安装gdisk工具)
type growpart || sudo yum install -y cloud-utils-growpart sudo yum update cloud-utils-growpart type sgdisk || sudo yum install -y gdisk sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
Debian 9及以上版本、Ubuntu14及以上版本
重要由于Debain9和Debain10结束生命周期(EOL),所以如果您使用的是Debain9和Debain10系统的ECS实例,请先切换源地址。具体操作,请参见Debian 9/10 EOL如何切换源?。
MBR分区
sudo apt-get update sudo apt-get install -y cloud-guest-utils sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
GPT分区(需安装gdisk工具)
sudo apt-get update sudo apt-get install -y cloud-guest-utils type sgdisk || sudo apt-get install -y gdisk sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
重要执行扩容分区命令时,您需要特别注意以下几种情况:
使用growpart工具时,如果出现报错信息,请参照常见问题进行排查。
命令参数中的
/dev/vdb
和1
之间需要空格分隔,1
是分区编号。这两个参数需要您根据实际情况进行设定。如果您扩容的是系统盘,命令中的
/dev/vdb
需要替换为/dev/vda
。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
完成分区的扩容。
如下图所示,输出
CHANGED
字样时,表示分区扩容成功。执行以下命令查看分区扩容是否生效。
sudo fdisk -lu
如上图示例,/dev/vdb与/dev/vdb1容量一致,分区扩容已生效。
说明CentOS 6等较低版本的操作系统,需要执行
reboot
命令重启实例,使分区扩容生效。通常情况下,扩容分区不需要执行重启。但如果您扩容的是CentOS 6操作系统的云盘或者发现扩容后操作系统实际识别的分区没有扩展,这是操作系统版本较低的原因,需要重启实例使分区扩容生效。建议您选择业务低谷的时间段进行重启,避免影响业务运行。
步骤3:扩容文件系统。
请依照判断需要执行的扩容步骤,确认云盘是否需要执行扩容文件系统操作。
运行以下命令,获取需要扩容的文件系统的类型和挂载目录。
df -Th
Type
值为文件系统类型,Mounted on
值为分区的挂载目录。如下图表示/dev/vdb1
分区的文件系统类型为ext4,挂载目录为/mnt。如果Filesystem取值后缀不带数字(例如
/dev/vdc
),则为裸设备。扩容文件系统。
扩容命令因文件系统类型而异,请您根据上一步中查询到的文件系统类型选择以下命令。
说明云盘和文件系统在使用的状态下,采用resize2fs等工具在线扩容文件系统,有可能会触发文件系统数据问题,该问题与镜像内核版本、resize2fs工具版本相关,与云盘扩容本身无关。建议您为云盘创建快照,做好数据备份。具体操作,请参见创建快照。
ext*(例如ext2、ext3、ext4)文件系统
以扩容云盘分区
/dev/vdb1
的ext*文件系统为例,则运行如下命令:sudo resize2fs /dev/vdb1
说明如果您扩容的是系统盘,命令中的
/dev/vdb1
需要替换为/dev/vda1
。以扩容裸设备
/dev/vdc
的ext*文件系统为例,则运行如下命令:sudo resize2fs /dev/vdc
xfs文件系统
以扩容挂载目录为/mnt的xfs文件系统为例,则运行如下命令:
Alibaba Cloud Linux 2/3版本、CentOS 6及以上版本
type xfs_growfs || sudo yum install -y xfsprogs sudo xfs_growfs /mnt
Debian 8及以上版本、Ubuntu14及以上版本
type xfs_growfs || sudo apt-get install -y xfsprogs sudo xfs_growfs /mnt
btrfs文件系统
以扩容挂载目录为/mnt的btrfs文件系统为例,则运行如下命令:
sudo btrfs filesystem resize max /mnt
运行以下命令,确认是否扩容成功。
df -Th
当查询结果中的文件系统容量和控制台容量一致时,表示扩容成功。
如下图所示,分区
/dev/vdb1
文件系统容量(59 GiB)和云盘容量(60 GiB)基本一致(因为文件系统本身会占用部分存储空间),表示扩容完成。扩容完成后,您需要根据实际情况检查云盘数据是否正常。
如果扩容成功,ECS实例中的业务程序能够正常运行,则完成操作。
如果扩容失败,您可以通过备份的快照回滚数据。具体操作,请参见使用快照回滚云盘。
扩容示例
本节以MBR分区、GPT分区、裸数据盘为例展示扩容分区和文件系统的操作命令,供您参考。在实际扩容过程中,请您以实际环境为准。
示例1:扩容MBR分区和ext4文件系统
设备名:/dev/vda(系统盘)
1个分区:/dev/vda1
文件系统类型:ext4
操作系统:Alibaba Cloud Linux 3
扩容分区和文件系统命令如下:
type growpart || sudo yum install -y cloud-utils-growpart
sudo yum update cloud-utils-growpart
sudo LC_ALL=en_US.UTF-8 growpart /dev/vda 1
sudo resize2fs /dev/vda1
示例2:扩容GPT分区和xfs文件系统
设备名:/dev/vdb(数据盘)
2个分区:/dev/vdb1 、/dev/vdb2
文件系统类型:xfs
/dev/vdb2的挂载目录:/mnt
操作系统:Debian 12
扩容分区和文件系统命令如下:
sudo apt-get update
sudo apt-get install -y cloud-guest-utils
type sgdisk || sudo apt-get install -y gdisk
sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 2
type xfs_growfs || sudo apt-get install -y xfsprogs
sudo xfs_growfs /mnt
示例3:扩容存在文件系统的裸数据盘
设备名:/dev/vdc(裸数据盘未分区)
文件系统类型:ext4
操作系统:CentOS 7
扩容文件系统命令如下:
sudo resize2fs /dev/vdc