数据盘扩容分区及文件系统(Linux)
概述
在完成磁盘物理空间扩容操作后,在操作系统层面仍需分别手动进行分区和文件系统扩容,才能让扩容空间可用。
本文档介绍 Linux 系统实例完成数据盘物理空间扩容后,在操作系统内进行分区和文件系统扩容的方法。
如果想扩容 Windows 系统实例的云磁盘,请您查看 扩容分区及文件系统(Windows)。
前提条件
- 扩容分区和文件系统前,请确认已完成磁盘物理空间的扩容操作,详情可参考 扩容概述。
- 该云磁盘已挂载至 BCC 实例,且实例状态为运行中。
- 待扩容分区和文件系统的云磁盘状态为使用中。
- Linux 实例内核不低于 3.6.0 版本的操作系统支持在线进行分区扩容。
注意:
Linux 实例内核版本低于 3.6.0 的操作系统,例如 CentOS 6 及以下、OpenSUSE 42.3、Debian 8 及以下版本,完成分区扩容后需要重启云服务器实例才可生效;
- 如果您是CentOS、 Ubuntu系统版本,可以使用CDSCMD工具进行自动扩容分区操作。
准备工作
说明:
在线分区扩容支持确认
- 可以通过控制台远程登录、SSH 等方式登录 BCC 实例,具体登录方式请参考 登录实例。
-
执行以下命令确认 Linux 内核版本,并判断当前操作系统是否支持在线扩容分区。
Bash1uname -r
操作步骤
本文档中以 BaiduLinux 4.1 x86_64 (64bit) 系统中的数据盘扩容为例。示例环境数据盘说明:
| 云磁盘 | 说明 |
|---|---|
| /dev/vdb | 数据盘,已创建 MBR 分区、已格式化并创建 EXT4 文件系统,已通过控制台由 100 GiB 扩容到 200 GiB |
| /dev/vdc | 数据盘,已创建 GPT 分区、已格式化并创建 XFS 文件系统,已通过控制台由 300 GiB 扩容到 500 GiB |
| /dev/vdd | 数据盘,已创建 MBR 分区、已格式化并创建 XFS 文件系统,已通过控制台由 1 TiB 扩容到 3 TiB |
| /dev/vde | 数据盘,未分区、未创建文件系统,已通过控制台由 50 GiB 扩容到 100 GiB |
| /dev/vdf | 数据盘,未分区、已格式化并创建 EXT4 文件系统,已通过控制台由 70 GiB 扩容到 150 GiB |
步骤一:确认云磁盘分区状态和格式
执行 fdisk -l 查看当前分区大小、磁盘设备名和分区编号。相应云盘信息,参考上述示例环境数据盘说明。
1fdisk -l
返回结果有如下类似信息:

待扩容云磁盘容量大于分区总容量时,需要扩容分区。本例待扩容说明:
- 数据盘 vdb 扩容后容量为 200 GiB,存在 1 个分区,分区总容量为 100 GiB,需对编号为 1 的分区 vdb1 扩容。
- 数据盘 vdc 扩容后容量为 500 GiB,存在 1 个分区,分区总容量为 300 GiB,需对编号为 1 的分区 vdc1 扩容。
- 数据盘 vdd 扩容后容量为 3 TiB,存在 1 个分区,分区总容量为 1 TiB,需对编号为 1 的分区 vdd1 扩容。
- 数据盘 vde 扩容后容量为 100 GiB,未分区,无法确认文件系统,需要通过查看文件系统,判断后续操作。
- 数据盘 vdf 扩容后容量为 150 GiB,未分区,无法确认文件系统,需要通过查看文件系统,判断后续操作。
说明:
- 仅支持对单块云磁盘的最后一个分区扩容。
- 在 Disk /dev/vdx 下有同名前缀的形如 /dev/vdx1 、/dev/vdx2 等的 Device,表示该云磁盘有分区.
在 fdisk -l 的返回结果中,查看 Disklabel type 字段来确定分区表的格式:
- 若 Disklabel type 值为 dos,表示分区表为 MBR 格式。
- 若 Disklabel type 值为 gpt,表示分区表为 GPT 格式。
步骤二:查看文件系统类型
执行 blkid 命令查看当前文件系统的类型。
1[root@instance-xxxx ~]# # lsblk -f
2NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
3vda
4└─vda1 ext4 1.0 09f78617-7647-47ce-8f69-47feca292ce5 14.6G 21% /
5vdb
6└─vdb1 ext4 1.0 1f8f9754-5830-4161-a80a-c67deff5635f 92.9G 0% /mnt/data-b
7vdc
8└─vdc1 xfs ff92a956-546c-44c2-bc0d-2ce1d6790808 297.7G 1% /mnt/data-c
9vdd
10└─vdd1 xfs 8e5735ce-3686-4363-a54f-6afd7429e219
11vde
12vdf ext4 1.0 4f2a3f1d-7e30-4b7d-99a2-c1cd77c79188 64.8G 0% /mnt/data-f
根据 Type 列确认系统盘分区的文件系统类型,文件系统类型包括:
- XFS 表示文件系统为 XFS
- ext4 表示文件系统为 EXT4
- ext3 表示文件系统为 EXT3
本例查询到文件系统类型信息:数据盘 /dev/vdb1、/dev/vdf的文件系统类型为 ext4;数据盘 /dev/vdc1、/dev/vdd1的文件系统类型为 xfs;数据盘vde无文件系统。
步骤三:根据上述信息确认后续操作
在完成上述步骤后,您需要确认当前磁盘后续的操作方式。
操作方式的选择依赖于数据盘当前分区状态和已挂载文件系统状态,同时取决于您在想要实现的扩容场景。
| 分区状态 | 文件系统状态 | 扩容场景 | 相关操作 |
|---|---|---|---|
| 已分区 | 已创建 | 分区格式为 MBR,扩容后的容量≤2TiB,需求扩大当前已有分区容量; 本示例中为/dev/vdb |
1. 步骤四:扩容分区 2. 步骤五:扩展文件系统 |
| 已分区 | 已创建 | 分区格式为 MBR,扩容后的容量≥2TiB,需求扩大当前已有分区容量; 本示例中为/dev/vdc |
MBR 格式分区支持的磁盘最大容量为 2 TiB。如果您的硬盘分区为 MBR 格式,且需扩容到超过 2 TiB 时,需要先将分区格式转换为 GPT。 1. 转换 MBR 分区为 GPT 分区 2. 步骤四:扩容分区 3. 步骤五:扩展文件系统 |
| 已分区 | 已创建 | 分区格式为 GPT,需求扩大当前已有分区容量; 本示例中为/dev/vdd |
1. 步骤四:扩容分区 2. 步骤五:扩展文件系统 |
| 未分区 | 未创建 | 需求对该磁盘进行分区并创建文件系统; 本示例中为/dev/vde |
Linux 系统格式化分区 |
| 未分区 | 已创建 | 需求在已有文件系统进行扩容操作; 本示例中为/dev/vdf |
步骤五:扩展文件系统 |
步骤四:扩容分区
-
根据文件系统类型安装 gdisk 工具。
说明:
- 若分区类型为 MBR,无需安装此工具,直接执行下一步安装 growpart 工具。
- 若分区类型为 GPT,则请对应云服务器操作系统类型,执行以下命令安装工具。
-
CentOS
安装
gdisk工具。Shell1yum install gdisk -y -
Ubuntu(14.04 及以上)、Debian(9 及以上)
安装
gdisk工具。Shell1apt-get install gdisk -y
-
根据操作系统版本安装对应 growpart 扩容工具。
-
CentOS 6
安装
dracut-modules-growroot工具。Shell1yum install -y dracut-modules-growroot运行以下命令覆盖
initramfs文件。Shell1dracut -f -
CentOS 7、CentOS 8
安装
cloud-utils-growpart和xfsprogs。Shell1yum install -y cloud-utils-growpart xfsprogs -
Ubuntu(14.04 及以上)、Debian(9 及以上)
安装
cloud-guest-utils和xfsprogs。Shell1apt install -y cloud-guest-utils xfsprogs
-
-
执行分区扩容命令,使用 growpart 工具扩容分区。
Shell1growpart <DeviceName> <PartitionNumber>其中
<DeviceName>为磁盘设备名,<PartitionNumber>为分区编号。注:本示例以扩容数据盘 /dev/vdb1 分区为例,命令中 /dev/vdb 与 1 间需使用空格分隔。您需要按需修改命令。
Shell1growpart /dev/vdb 1返回结果如下所示,则表示分区扩容成功。
Shell1[root@instance-xxx ~]# growpart /dev/vdb 1 2CHANGED: partition=1 start=2048 old: size=209713152 end=209715199 new: size=419428319 end=419430366注意:
内核版本低于 3.6.0 的Linux操作系统,需要在此操作后重启 BCC 实例。
- 分区扩容完成后,再次执行
fdisk -l查看分区大小。文件系统容量需要在下一步扩展文件系统后生效。
说明:扩容其他数据盘分区与 /dev/vdb1 的操作步骤一致。
步骤五:扩展文件系统
-
根据步骤二:查看文件系统类型获取到的文件系统类型,执行对应扩容文件系统命令。
-
ext 文件系统,使用
resize2fs扩展。Shell1resize2fs 裸设备名(如/dev/vdb)或分区名(如/dev/vdb1)本例中数据盘分区 /dev/vdb1 为 EXT4 文件系统,因此执行 resize2fs /dev/vdb1,执行过程中按照系统提示,可能需要执行esfsck相关指令。执行返回结果如下所示:
Shell1[root@instance-xxx ~]# resize2fs /dev/vdb1 2resize2fs 1.46.5 (30-Dec-2021) 3Filesystem at /dev/vdb1 is mounted on /mnt/data-b; on-line resizing required 4old_desc_blocks = 13, new_desc_blocks = 25 5The filesystem on /dev/vdb1 is now 52428539 (4k) blocks long. -
XFS 文件系统,使用
xfs_growfs扩展。其中文件系统挂载点可以通过命令df -Th或lsblk -f查看。Shell1xfs_growfs <挂载点>本例中数据盘分区 /dev/vdc1 为 XFS 文件系统,且 /dev/vdc1 挂载在 /mnt/data-c,则执行以下命令。
Shell1xfs_growfs /mnt/data-c执行返回结果如下所示:
Shell1[root@instance-xxx ~]# xfs_growfs /mnt/data-c 2meta-data=/dev/vdc1 isize=512 agcount=4, agsize=19660672 blks 3 = sectsz=512 attr=2, projid32bit=1 4 = crc=1 finobt=1, sparse=1, rmapbt=0 5 = reflink=1 bigtime=1 inobtcount=1 nrext64=0 6data = bsize=4096 blocks=78642688, imaxpct=25 7 = sunit=0 swidth=0 blks 8naming =version 2 bsize=4096 ascii-ci=0, ftype=1 9log =internal log bsize=4096 blocks=38399, version=2 10 = sectsz=512 sunit=0 blks, lazy-count=1 11realtime =none extsz=4096 blocks=0, rtextents=0 12data blocks changed from 78642688 to 131071739
-
-
执行
df -Th或lsblk -f命令检查文件系统扩容结果。Shell1lsblk -f本例返回结果如下所示:
Shell1[root@instance-xxx ~]# lsblk -f 2NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS 3vda 4└─vda1 ext4 1.0 09f78617-7647-47ce-8f69-47feca292ce5 14.4G 22% / 5vdb 6└─vdb1 ext4 1.0 1f8f9754-5830-4161-a80a-c67deff5635f 187.3G 0% /mnt/data-b 7vdc 8└─vdc1 xfs ff92a956-546c-44c2-bc0d-2ce1d6790808 496.3G 1% /mnt/data-c 9vdd 10└─vdd1 xfs 8e5735ce-3686-4363-a54f-6afd7429e219 11vde 12vdf ext4 1.0 4f2a3f1d-7e30-4b7d-99a2-c1cd77c79188 64.8G 0% /mnt/data-f确认数据盘(/dev/vdb1、/dev/vdc1)目标分区的文件系统容量已扩展到磁盘扩容后的容量。
- 扩容成功后请检查数据完整性,观察 BCC 实例中的业务是否正常运行。
评价此篇文章
