在ECS控制台上扩容云盘容量后,对应分区和文件系统并未扩容,您需要进入ECS实例内部继续扩容云盘的分区和文件系统。本文为您介绍如何扩容Linux实例云盘的分区和文件系统。
前提条件
您已在ECS控制台在线或者离线扩容完云盘容量。具体操作,请参见在线扩容云盘(Linux&Windows)或者离线扩容云盘(Linux&Windows)。
Linux实例扩容分区和文件系统前,需要满足以下条件。
资源限制条件
实例
实例状态为运行中(Running)。
镜像版本:Linux实例实现扩容分区和文件系统功能,支持的操作系统请参见支持的操作系统。
内核版本:Linux实例内核不低于3.6.0版本,您可以使用uname -a命令查看内核版本。如果Linux内核低于3.6.0版本,扩容分区操作请参见扩展低内核版本实例的系统盘分区和文件系统和扩展分区和文件系统_Linux数据盘。
云盘
云盘状态为使用中(In Use)。
云盘扩容后的容量不能超过云盘最高容量。更多信息,请参见块存储使用限制。
注意 云盘MBR分区格式不支持扩容到2 TiB及以上。如果您的MBR分区容量需要扩容到2 TiB以上,建议您先创建一块大于2 TiB的云盘并格式化为GPT分区,再将MBR分区中的数据拷贝到GPT分区中。格式化GPT分区具体操作,请参见分区格式化大于2 TiB数据盘。
背景信息
本文示例中使用的配置如下所示。
资源描述
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等)。不同的分区和文件系统,后续扩容分区和文件系统操作中存在差异。
远程登录ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
运行以下命令查看实例的云盘情况。
fdisk -lu
序号 | 分区 | 说明 |
---|---|---|
① | /dev/vda1 | 系统盘,System取值Linux表示为MBR分区。 |
② | /dev/vdb1 | 数据盘,System取值Linux表示为MBR分区。 |
③ | /dev/vdc1 | 数据盘,System取值GPT表示为GPT分区。 |
说明 如果您的查询结果中云盘容量还是40 GiB(Disk /dev/vda: 42.9 GB
),表示扩容不成功,建议您在控制台重启下本实例。
df -Th
执行结果如下所示。其中,Mounted on
列为文件系统对应的挂载点。
注意 云盘和文件系统正在被使用的状态下,采用resizefs等工具在线扩容文件系统,有可能会触发文件系统数据问题,该问题与镜像内核版本、resize2fs工具版本相关,与云盘扩容本身无关。因此建议您在扩容分区和文件系统前,为云盘创建快照,做好数据备份,并确认相关镜像和工具的可靠性。具体操作,请参见创建一个云盘快照。
通过查看云盘分区情况,在ECS实例内分区和文件系统并未扩容。此步骤介绍如何在ECS实例内部扩容云盘分区。
yum install gdisk -y
yum install -y cloud-utils-growpart
说明 由于CentOS 8结束生命周期(EOL),如果您使用CentOS 8系统的ECS实例,请先切换源地址。具体操作,请参见CentOS 8 EOL如何切换源?。
更新软件源。
apt-get update
安装cloud-guest-utils。
apt-get install -y cloud-guest-utils
growpart /dev/vda 1
示例命令表示扩容系统盘的第一个分区,/dev/vda
是系统盘,1
是分区编号,/dev/vda
和1
之间需要空格分隔。 请根据实际情况修改命令,继续扩容数据盘的分区。
growpart /dev/vdb 1
growpart /dev/vdc 1
/dev/vdb1
、/dev/vdb2
和/dev/vdb3
。扩容时,只需要扩容最后一个分区即可,即执行growpart /dev/vdb 3
,即可完成数据盘 /dev/vdb的分区扩容。unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]
。关于如何排查此问题,请参见常见问题。此步骤介绍如何在ECS实例内部扩容分区的文件系统。
resize2fs /dev/vda1
扩容数据盘/dev/vdb1的文件系统。 resize2fs /dev/vdb1
说明 /dev/vda1
和/dev/vdb1
都是分区名称,您需要根据实际情况修改。
xfs_growfs /media/vdc
说明 /media/vdc
为/dev/vdc1
的挂载点,您需要根据实际情况修改。
btrfs filesystem resize max /mountpoint
说明 /mountpoint
为数据盘对应的挂载点,您需要根据实际情况修改。
df -Th
执行结果如下所示。
扩容完成后,您需要根据实际情况检查数据是否正常。支持扩容分区和文件系统的Linux公共镜像(或基于公共镜像制作的自定义镜像)包括:
growpart /dev/vda 1
时,提示unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]
。解决方案:
locale
命令查看ECS实例的字符编码类型,将非en_US.UTF-8的字符编码类型切换成en_US.UTF-8。
LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
localectl set-locale LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
reboot
命令重启ECS实例。当您通过切换字符编码,成功完成扩容分区后,建议您按需切回原有字符编码。
growpart /dev/vda 1
时,提示-bash: growpart: command not found
。解决方案:
uname -a
检查Linux内核的版本。本文操作适用于Linux内核版本3.6.0及以上的系统。 如果Linux内核低于3.6.0版本,扩容分区操作请参见扩展低内核版本实例的系统盘分区和文件系统和扩展分区和文件系统_Linux数据盘。
yum install -y cloud-utils-growpart
说明 由于CentOS 8结束生命周期(EOL),如果您使用CentOS 8系统的ECS实例,请先切换源地址。具体操作,请参见CentOS 8 EOL如何切换源。
Debian 8及以上版本、Ubuntu14及以上版本运行以下命令。
apt install -y cloud-guest-utils
问题:为什么在CentOS 6.5中不能安装growpart进行扩容分区?
解决方案:CentOS 6操作系统的Linux内核低于3.6.0版本,如果您需要在CentOS 6中使用growpart,请参考以下步骤:
在CentOS 6中切换yum源。具体操作,请参见CentOS 6 EOL如何切换源?。
说明 CentOS 6操作系统版本已结束生命周期(EOL),如果您需要使用yum安装软件包,需要先切换yum源。
在CentOS 6中安装dracut-modules-growroot并扩容云盘分区。具体操作,请参见扩展低内核版本实例的系统盘分区和文件系统。
其他扩容场景
如果数据盘需要使用新扩容容量创建新的分区,请参见选项二:新增并格式化MBR分区或选项四:新增并格式化GPT分区。
如果数据盘没有创建分区,并且在裸设备上创建了文件系统,请参见选项五:扩容裸设备文件系统。