resize2fs 是什么
resize2fs 用于扩展或缩小 ext2/ext3/ext4 文件系统。它只改文件系统这一层,不改分区表也不改 LVM 逻辑卷,所以扩容类操作永远是「先让底层块设备变大,再让文件系统跟上」。ext4 支持在线扩容(挂载状态直接执行即可),但缩小必须离线,且必须先做一次完整的 e2fsck 检查。
基本信息
| 用途 | 调整 ext 系列文件系统的大小,不涉及分区表与逻辑卷 |
|---|---|
| 语法 | resize2fs [选项] 设备 [大小];大小可带 K/M/G/T 等后缀 |
| 所属软件包 | e2fsprogs |
| 关键限制 | 扩容可在线;缩小必须卸载并先 e2fsck -f,且目标不小于已用空间 |
典型使用场景
- LVM 扩容收尾:lvextend 之后让文件系统用上新空间,这是最常见的一条链路
- 云盘扩容收尾:控制台扩容云盘后,依次做分区扩容、pvresize、lvextend、resize2fs
- 缩容腾空间:某个卷分配过大需要回收,离线缩小文件系统再缩逻辑卷
- 扩容失败排查:resize2fs 报 The filesystem is already N blocks long,说明底层没变大
- 装机后核对:新盘格式化后确认文件系统实际大小与设计一致
扩容(可在挂载状态执行)
扩容(可在挂载状态执行)
lvextend -L +20G /dev/vg0/data # 1) 先让逻辑卷变大
resize2fs /dev/vg0/data # 2) 让文件系统跟上(不带大小=用满)
df -h /data # 3) 核对容量确实变了
tune2fs -l /dev/vg0/data | grep -E 'Block count|Block size' # 想看块级数字用这个缩容:必须离线
缩容:必须离线
umount /data # 1) 卸载,确认没有进程占用
lsof +L1 /data 2>/dev/null | head # 2) 确认没有残留句柄
e2fsck -f /dev/vg0/data # 3) 先完整检查
resize2fs /dev/vg0/data 50G # 4) 缩文件系统到 50G
lvreduce -L 50G /dev/vg0/data # 5) 再缩逻辑卷(不小于文件系统大小)
mount /data && df -h /data # 6) 挂载核对常见扩容链路对照
| 底层变化 | 对应操作 | 文件系统命令 |
|---|---|---|
| 云盘在控制台变大 | growpart /dev/vda 1 扩分区,pvresize 扩 PV | resize2fs(ext4) |
| LVM 逻辑卷变大 | lvextend -L +20G /dev/vg0/data | resize2fs(ext4) |
| 分区直接变大(无 LVM) | parted/fdisk 重建分区后 partprobe | resize2fs(ext4) |
| XFS 文件系统 | 底层同样先扩 | xfs_growfs 挂载点(XFS 不能缩小) |
XFS 不用 resize2fs:它只能扩不能缩,而且命令要传挂载点而不是设备(xfs_growfs /data)。先 blkid 或 df -T 确认文件系统类型,再选命令。
缩容是全流程中最危险的一步。顺序必须是「e2fsck 检查、缩文件系统、缩逻辑卷」,任何一步颠倒都可能把文件系统尾部截断,数据无法恢复;操作前先确认有可用备份。