一种常见场景:使用 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的作用是拆除原有隔断,让文件系统真正用上多出的面积。不执行该命令,新增存储空间虽然物理存在,但系统无法读写调用。
扩容前查看可用空间
执行扩容操作前,建议先分别核对文件系统与分区当前容量,以此确认分区已完成扩容,仅文件系统还需调整大小。
第一步,查看文件系统容量:
df -h /复制
示例输出如下:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 18G 1.5G 93% /复制
接下来,查看分区实际大小:
lsblk /dev/sda复制
示例输出如下:
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 文件系统,使其占用扩容后分区内的全部可用空间。
你也可以在执行操作前先确认文件系统类型:
df -Th /复制
示例输出如下:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 20G 18G 1.5G 93% /复制
如果文件系统类型为 ext4,你就可以使用 resize2fs 对其扩容。
若是刚在云服务器上扩容磁盘,操作系统可能还未识别到更新后的磁盘容量,此时请执行这条命令:
echo 1 > /sys/class/block/sda/device/rescan复制
扩容文件系统以占用新增空间
确认分区已完成扩容后,下一步就是扩展 ext4 文件系统,让它能够使用多出的存储空间。
对目标分区执行 resize2fs 命令:
sudo resize2fs /dev/sda1复制
示例输出如下:
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 文件系统支持在线扩容,多数情况下分区挂载、正在使用时也能完成扩容操作。
扩容结束后,核对一下新的磁盘容量:
df -h /dev/sda1复制
示例输出如下:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 18G 30G 38% /复制
此时文件系统容量已与分区总容量保持一致。本例中分区扩容至 50GB,文件系统现在可以完整占用全部空间。
如果你想快速对比扩容前后变化,可以分别在执行 resize2fs 前后查看df -h的输出。文件系统容量应当增大至与lsblk展示的分区容量相等。若符合该结果,则代表扩容操作成功,新增空间可正常投入使用。
离线扩容未挂载文件系统
扩容已挂载的根文件系统时,resize2fs 一般可在线完成操作,无需停机。但针对未挂载的分区,建议先执行文件系统检测。
首先卸载该分区:
sudo umount /dev/sdb1复制
接下来使用 e2fsck 执行文件系统检查:
sudo e2fsck -f /dev/sdb1复制
示例输出如下:
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:
sudo resize2fs /dev/sdb1复制
示例输出如下:
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/sdb1 is now 5242880 (4k) blocks long.复制
扩容完成后,重新挂载分区并校验新容量:
sudo mount /dev/sdb1 /mnt/data
df -h /dev/sdb1复制
执行df -h后输出的结果应当能看到扩容后的文件系统容量。
你常会遇到这样一条报错:
Please run e2fsck -f /dev/sdXN first复制
该报错仅表示:resize2fs 要求先检查文件系统再执行修改操作。你需要先对已卸载分区执行 e2fsck -f,之后再重新运行 resize2fs。
通用操作准则:
离线扩容前花一分钟执行 e2fsck,能提前发现文件系统异常,保障扩容流程平稳完成。
扩容 LVM 逻辑卷上的文件系统
如果你的文件系统部署在 LVM 逻辑卷而非普通磁盘分区上,需要先扩容逻辑卷,再调整文件系统大小。
如需为逻辑卷扩容 10GB,执行以下命令:
sudo lvextend -L +10G /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv复制
下面说明 lvextend 参数的含义:
示例输出如下:
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 文件系统,以使用新增的空闲空间。
你可以通过以下命令校验扩容结果:
df -h
Or
lsblk复制
两条命令都能查看扩容后的文件系统总容量。
如果你不想指定具体扩容大小,而是直接占用卷组里所有剩余空闲空间,可以使用这条命令:
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv复制
这里的 -l +100%FREE 表示让 LVM 将卷组中所有剩余空闲块分配给该逻辑卷。
在多数新版 Linux 发行版中,你甚至可以将两步操作合并为一条命令执行:
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 删除。