扩容云盘容量后,对应分区和文件系统并未扩容,您还需要继续扩容云盘的分区和文件系统,将扩容的容量划分至已有分区及文件系统内,使系统能够正常使用扩容容量。本文为您介绍如何扩容RDS Custom实例云盘的分区和文件系统。
前提条件
RDS Custom实例满足以下条件:
状态为运行中(Running)。
操作系统是Alibaba Cloud Linux 2/3、CentOS 7及以上、Debian 11及以上或者Ubuntu14及以上版本。
云盘满足以下条件:
状态为使用中(In_use)。
系统盘使用率未达到100%。
重要为确保扩容操作顺利进行,请登录实例并执行
df -h
命令,以确认根分区的使用率未达到100%。
已扩容云盘容量但未扩容分区及文件系统。
注意事项
强烈建议扩容前创建云盘快照,做好数据备份。
扩容分区和文件系统正常情况下不会丢失数据。为避免误操作导致数据丢失或异常,建议您创建快照备份云盘数据。
操作步骤
步骤1:查看待扩容云盘的信息并确认扩容步骤
执行以下命令,确认待扩容云盘名称及分区信息。
sudo fdisk -lu
确定云盘是否分区。如图所示,该实例有3块云盘,系统盘
/dev/nvme0n1
、数据盘/dev/nvme1n1和数据盘/dev/nvme2n1。以数据盘为例,其中:数据盘
/dev/nvme1n1
已分区,存在/dev/nvme1n1p1的分区。数据盘
/dev/nvme2n1
未分区(裸设备)。
确定待扩容云盘的分区类型。
Disklabel type
表示云盘的分区类型,值为gpt
表示GPT分区,值为dos
表示MBR分区。本文示例中云盘分区为GPT类型。
执行以下命令,获取待扩容云盘的文件系统信息。
未分区的云盘
sudo file -s /dev/裸设备名称
已分区的云盘
sudo file -s /dev/分区名称
以
/dev/nvme1n1p1
分区为例,执行以下命令。sudo file -s /dev/nvme1n1p1
返回结果如下,表明分区
/dev/nvme1n1p1
文件系统类型为ext4;/dev/nvme1n1p1: Linux rev 1.0 ext4 filesystem data, UUID=342527ce-**** (needs journal recovery) (extents) (64bit) (large files) (huge files)
如果返回结果为/dev/nvme1n1p1: data,则表示该分区未安装文件系统。
确认需要执行的扩容步骤。
云盘已分区并存在文件系统:先执行步骤2:扩容分区,在执行步骤3:扩容文件系统。
说明MBR分区格式不支持2 TiB以上的云盘。如果您的云盘目前使用的是MBR分区类型,且希望将其扩容至2 TiB以上,需要先将MBR分区转换为GPT分区,再扩容分区及文件系统。
云盘已分区但无文件系统:只执行步骤2:扩容分区。
云盘未分区但存在文件系统:直接执行步骤3:扩容文件系统。
云盘未分区也无文件系统:无需执行本文档操作。
步骤2:扩容分区
如果云盘未分区但存在文件系统,则无需执行扩容分区操作,直接执行步骤3:扩容文件系统即可。
执行以下命令扩容分区,以下以
/dev/nvme1n1p1
分区为例,其中/dev/nvme1n1
是云盘名称,p1
中的1
是分区编号,两者之间需要空格分隔。请根据实际情况替换命令中的分区。Alibaba Cloud Linux 2/3版本、CentOS 7及以上版本
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/nvme1n1 1
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/nvme1n1 1
Debian 11及以上版本、Ubuntu14及以上版本
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/nvme1n1 1
MBR分区
sudo apt-get update sudo apt-get install -y cloud-guest-utils sudo LC_ALL=en_US.UTF-8 growpart /dev/nvme1n1 1
重要对于NVMe类型云盘,以分区名称
/dev/nvme1n1p1
为例,其中/dev/nvme1n1
是云盘名称,p1
中的1
是分区编号,两者之间需要空格分隔。扩容时执行命令为growpart /dev/nvme1n1 1
。对于虚拟云盘,以分区名称
/dev/vdb1
为例,其中/dev/vdb
为云盘名称,1
是分区编号,两者之间需要空格分隔。扩容命令为growpart /dev/vdb 1
LC_ALL=en_US.UTF-8
是环境变量设置,为了兼容中文操作系统的字符编码。如果单盘有多个连续分区的情况,仅能扩容最后一个分区。例如当数据盘
/dev/nvme3n1
有三个分区/dev/nvme3n1p1
、/dev/nvme3n1p2
和/dev/nvme3n1p3
。扩容时,只能扩容最后一个分区/dev/nvme3n1p3
,即执行growpart /dev/nvme3n1 3
命令即可完成数据盘的分区扩容。如果您需要扩容的云盘分区是MBR分区表下的扩展分区(通常判断方式是分区号大于等于5),您需要先对扩展分区扩容后再对逻辑分区进行扩容。例如您有
/dev/nvme1n1p1
(主分区)、/dev/nvme1n1p2
(扩展分区)、/dev/nvme1n1p5
(逻辑分区)三个分区,此时您需要依次执行growpart /dev/nvme1n1 2
、growpart /dev/nvme1n1 5
完成分区的扩容。
当返回如下
CHANGED
字样时,表示分区扩容成功。CHANGED: partition=1 start=2048 old: size=41938944 end=41940991 new: size=52426719 end=52428766
执行以下命令查看分区扩容是否生效。
sudo fdisk -lu
以扩容
/dev/nvme1n1p1
分区为例,云盘/dev/nvme1n1
与分区/dev/nvme1n1p1容量一致,分区扩容已生效。
步骤3:扩容文件系统
执行以下命令,获取待扩容设备的挂载目录。
df -Th
Type
值为文件系统类型,Mounted on
值为分区的挂载目录。例如:/dev/nvme2n1
云盘的文件系统类型为ext4,挂载目录为/tmp。/dev/nvme1n1p1
分区的文件系统类型为ext4,挂载目录为/mnt。
说明如果Filesystem取值为云盘名称(例如nvme2n1),则目标云盘未进行分区,为裸设备。如果为分区名称(例如/dev/nvme1n1p1),则目标云盘已进行分区。
执行以下命令,扩容文件系统。
ext*(例如ext2、ext3、ext4)文件系统
未分区的云盘,例如云盘
/dev/nvme2n1
。sudo resize2fs /dev/nvme2n1
已分区的云盘,例如云盘分区/dev/nvme1n1p1。
sudo resize2fs /dev/nvme1n1p1
xfs文件系统
以扩容挂载目录为/mnt的xfs文件系统为例,请根据实际情况替换命令中的挂载目录。
Alibaba Cloud Linux 2/3版本、CentOS 7及以上版本
type xfs_growfs || sudo yum install -y xfsprogs sudo xfs_growfs /mnt
Debian 11及以上版本、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/nvme1n1p1
所在云盘扩容后容量为25 GiB,文件系统扩容完成后容量也为25 GiB。说明由于文件系统本身会占用一定的存储空间,因此在文件系统扩容完成后,其可用容量可能会略小于云盘扩容后的总容量。