首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >分享Linux系统中ext4分区与文件系统扩容方法步骤

分享Linux系统中ext4分区与文件系统扩容方法步骤

原创
作者头像
IDC科技
发布2026-07-16 11:53:45
发布2026-07-16 11:53:45
240
举报
文章被收录于专栏:IDC杂谈IDC杂谈

一种常见场景:使用 fdisk 或 parted 扩容分区后,执行 df -h 却发现磁盘容量没有变化。这是因为操作仅扩大了分区边界,文件系统本身仍需单独扩容。resize2fs 工具专门用于扩容 ext4 文件系统,使其占满分区新增的空闲空间。

接下来将讲解 resize2fs 的作用、分区扩容后如何扩展 ext4 文件系统,以及在 Linux 系统中校验扩容结果的操作方法。

本次测试环境使用雨云Linux服务器,Debian 12环境,配置为Intel处理器(1核心)、1GB内存、SSD硬盘。如需选购填写雨云优惠码:coupon ,首次5折。

resize2fs 工具存在的意义

当你使用fdisk,parted,growpart工具,或是云服务商提供的磁盘扩容功能调整分区大小时,仅仅是分区本身的空间被扩大了。分区内部的文件系统属于独立层级,仍会沿用扩容前的容量识别标准。

出现这种现象的原因是:ext4文件系统会将自身容量信息存放在超级块等文件系统元数据中,无法自动识别下层分区容量已扩容。

这时就需要用到resize2fs,该工具会更新文件系统元数据,让 ext4 能够识别并使用分区新增的空闲空间;执行完成后,文件系统容量会与扩容后的分区保持一致。

如果省略这一步,新增的磁盘空间会处于闲置未使用状态。即便分区物理容量已经变大,df -h等命令依旧只会显示扩容前的文件系统大小,根源就是 ext4 文件系统本身未完成扩容。

可以这样通俗理解:扩容分区相当于把房间墙体向外拓宽,而 resize2fs的作用是拆除原有隔断,让文件系统真正用上多出的面积。不执行该命令,新增存储空间虽然物理存在,但系统无法读写调用。

扩容前查看可用空间

执行扩容操作前,建议先分别核对文件系统与分区当前容量,以此确认分区已完成扩容,仅文件系统还需调整大小。

第一步,查看文件系统容量:

代码语言:javascript
复制
df -h /

复制

示例输出如下:

代码语言:javascript
复制
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        20G   18G  1.5G  93% /

复制

接下来,查看分区实际大小:

代码语言:javascript
复制
lsblk /dev/sda

复制

示例输出如下:

代码语言:javascript
复制
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk
└─sda1   8:1    0   50G  0 part /

复制

本例中,分区(/dev/sda1)容量已经是 50GB,但文件系统仍仅占用 20GB。分区上多出的 30GB 空间虽然存在,却还无法被文件系统使用。

这种场景就需要用到 resize2fs 工具。它会扩容 ext4 文件系统,使其占用扩容后分区内的全部可用空间。

你也可以在执行操作前先确认文件系统类型:

代码语言:javascript
复制
df -Th /

复制

示例输出如下:

代码语言:javascript
复制
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda1      ext4   20G   18G  1.5G  93% /

复制

如果文件系统类型为 ext4,你就可以使用 resize2fs 对其扩容。

若是刚在云服务器上扩容磁盘,操作系统可能还未识别到更新后的磁盘容量,此时请执行这条命令:

代码语言:javascript
复制
echo 1 > /sys/class/block/sda/device/rescan

复制

扩容文件系统以占用新增空间

确认分区已完成扩容后,下一步就是扩展 ext4 文件系统,让它能够使用多出的存储空间。

对目标分区执行 resize2fs 命令:

代码语言:javascript
复制
sudo resize2fs /dev/sda1

复制

示例输出如下:

代码语言:javascript
复制
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/sda1 is mounted at /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 7
The filesystem on /dev/sda1 is now 13107200 (4k) blocks long.

复制

关键看最后一行输出,该行会确认文件系统扩容成功。ext4 文件系统支持在线扩容,多数情况下分区挂载、正在使用时也能完成扩容操作。

扩容结束后,核对一下新的磁盘容量:

代码语言:javascript
复制
df -h /dev/sda1

复制

示例输出如下:

代码语言:javascript
复制
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   18G   30G  38% /

复制

此时文件系统容量已与分区总容量保持一致。本例中分区扩容至 50GB,文件系统现在可以完整占用全部空间。

如果你想快速对比扩容前后变化,可以分别在执行 resize2fs 前后查看df -h的输出。文件系统容量应当增大至与lsblk展示的分区容量相等。若符合该结果,则代表扩容操作成功,新增空间可正常投入使用。

离线扩容未挂载文件系统

扩容已挂载的根文件系统时,resize2fs 一般可在线完成操作,无需停机。但针对未挂载的分区,建议先执行文件系统检测。

首先卸载该分区:

代码语言:javascript
复制
sudo umount /dev/sdb1

复制

接下来使用 e2fsck 执行文件系统检查:

代码语言:javascript
复制
sudo e2fsck -f /dev/sdb1

复制

示例输出如下:

代码语言:javascript
复制
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 11/655360 files (0.0% non-contiguous), 66783/2621440 blocks

复制

e2fsck 会检测文件系统是否存在数据不一致问题,确保扩容前文件系统状态完好。如果完整跑完五轮检测且无报错,就代表该文件系统可以执行扩容操作。

接下来执行 resize2fs:

代码语言:javascript
复制
sudo resize2fs /dev/sdb1

复制

示例输出如下:

代码语言:javascript
复制
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/sdb1 is now 5242880 (4k) blocks long.

复制

扩容完成后,重新挂载分区并校验新容量:

代码语言:javascript
复制
sudo mount /dev/sdb1 /mnt/data
df -h /dev/sdb1

复制

执行df -h后输出的结果应当能看到扩容后的文件系统容量。

你常会遇到这样一条报错:

代码语言:javascript
复制
Please run e2fsck -f /dev/sdXN first

复制

该报错仅表示:resize2fs 要求先检查文件系统再执行修改操作。你需要先对已卸载分区执行 e2fsck -f,之后再重新运行 resize2fs。

通用操作准则:

  1. 已挂载的 ext4 文件系统:resize2fs 大多支持在线扩容,无需卸载;
  2. 未挂载的 ext4 文件系统:先执行 e2fsck -f 校验,再运行 resize2fs;
  3. 扩容完成后务必使用 df -h 核对扩容结果。

离线扩容前花一分钟执行 e2fsck,能提前发现文件系统异常,保障扩容流程平稳完成。

扩容 LVM 逻辑卷上的文件系统

如果你的文件系统部署在 LVM 逻辑卷而非普通磁盘分区上,需要先扩容逻辑卷,再调整文件系统大小。

如需为逻辑卷扩容 10GB,执行以下命令:

代码语言:javascript
复制
sudo lvextend -L +10G /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

复制

下面说明 lvextend 参数的含义:

  • -L +10G:在逻辑卷现有容量基础上增加 10GB 空间
  • /dev/mapper/ubuntu--vg-ubuntu--lv:你需要扩容的逻辑卷路径

示例输出如下:

代码语言:javascript
复制
Size of logical volume ubuntu-vg/ubuntu-lv changed from 20.00 GiB to 30.00 GiB.
Logical volume ubuntu-vg/ubuntu-lv successfully resized.

resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is now 7864320 (4k) blocks long.

复制

在本示例中,逻辑卷从 20GB 扩容至 30GB,随后 resize2fs 会立刻扩展 ext4 文件系统,以使用新增的空闲空间。

你可以通过以下命令校验扩容结果:

代码语言:javascript
复制
df -h
Or
lsblk

复制

两条命令都能查看扩容后的文件系统总容量。

如果你不想指定具体扩容大小,而是直接占用卷组里所有剩余空闲空间,可以使用这条命令:

代码语言:javascript
复制
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

复制

这里的 -l +100%FREE 表示让 LVM 将卷组中所有剩余空闲块分配给该逻辑卷。

在多数新版 Linux 发行版中,你甚至可以将两步操作合并为一条命令执行:

代码语言:javascript
复制
sudo lvextend -r -L +10G /dev/mapper/ubuntu--vg-ubuntu--lv

复制

-r 参数会在扩容逻辑卷后自动调用对应文件系统扩容工具,操作更高效,也能减少人为失误。对于部署在 LVM 上的 ext4 文件系统,这通常是最简便的操作方式。

总结

至此你就能明白,为什么调整分区大小和执行 resize2fs 扩容文件系统是两个独立步骤。分区与文件系统分属不同层级,二者需要分别同步空间变更信息。

若是已挂载的根分区,可直接用 resize2fs 在线扩容;若分区处于未挂载状态,则要先执行e2fsck -f检测修复。

当然,正式业务服务器操作前,先在测试磁盘或云主机快照上演练一遍。先在服务商后台给磁盘扩容 5G,再完整执行整套流程:lsblk、resize2fs、df -h。

你有没有遇到过磁盘识别容量正常,但 df 命令仍显示原有大小的情况?欢迎在下方留言,说说当时是哪条命令或哪一步出现了这个问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档