Ext4 resize常见错误处理

Ext4是一种广泛使用的文件系统,它支持在线和离线扩容,以及离线缩容以适应存储需求的变化。然而,在扩展Ext4文件系统的过程中,用户可能会遇到一些常见的错误和问题。本文将以磁盘/dev/vdb为例介绍如何识别和处理这些错误,以确保文件系统的扩容操作顺利进行。

resize2fs: Bad magic number in super-block while trying to open /dev/vdb

问题现象

执行resize2fs命令。

sudo resize2fs /dev/vdb

返回如下错误:

resize2fs: Bad magic number in super-block while trying to open /dev/vdb
Couldn't find valid filesystem superblock.

问题原因

该错误表示指定扩容的设备,如示例中的/dev/vdb,不是Ext4文件系统格式。

解决方案

检查设备的文件系统,确保为Ext4文件系统类型。

lsblk --fs /dev/vdb

resize2fs: Device or resource busy while trying to open /dev/vdb

问题现象

执行resize2fs命令。

sudo resize2fs /dev/vdb

返回如下错误:

resize2fs: Device or resource busy while trying to open /dev/vdb
Couldn't find valid filesystem superblock.

问题原因

该错误一般发生在待扩容的文件系统对应设备是分区的场景。如用户直接针对/dev/vdb执行resize2fs扩容,但文件系统实际位于分区/dev/vdb1,将报上述错误。

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  100G  0 disk
└─vdb1 253:17   0   50G  0 part

解决方案

  1. 扩容分区。

sudo growpart /dev/vdb 1

成功则返回信息如下:

CHANGED: partition=1 start=2048 old: size=104855552 end=104857599 new: size=209713119 end=209715166
  1. 扩容文件系统。

sudo resize2fs /dev/vdb1

成功则返回信息如下:

resize2fs 1.46.0 (29-Jan-2020)
Filesystem at /dev/vdb1 is mounted on /mnt/test; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 13
The filesystem on /dev/vdb1 is now 26214139 (4k) blocks long.

The filesystem is already 13106944 (4k) blocks long. Nothing to do!

问题现象

执行resize2fs命令。

sudo resize2fs /dev/vdb1

返回如下错误:

The filesystem is already 13106944 (4k) blocks long.  Nothing to do!

问题原因

该错误一般发生在待扩容的文件系统对应设备是分区的场景。如用户直接针对/dev/vdb1执行resize2fs扩容,将报上述错误。

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  100G  0 disk
└─vdb1 253:17   0   50G  0 part

解决方案

  1. 扩容分区。

sudo growpart /dev/vdb 1

成功则返回信息如下:

CHANGED: partition=1 start=2048 old: size=104855552 end=104857599 new: size=209713119 end=209715166
  1. 扩容文件系统。

sudo resize2fs /dev/vdb1

成功则返回信息如下:

resize2fs 1.46.0 (29-Jan-2020)
Filesystem at /dev/vdb1 is mounted on /mnt/test; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 13
The filesystem on /dev/vdb1 is now 26214139 (4k) blocks long.

resize2fs: On-line shrinking not supported

问题现象

执行resize2fs命令。

sudo resize2fs /dev/vdb

返回如下错误:

Filesystem at /dev/vdb is mounted on /mnt/test; on-line resizing required
resize2fs: On-line shrinking not supported

问题原因

该错误表示Ext4仅支持离线缩容,不支持在线缩容。

解决方案

  1. 确认设备是否已经挂载。

mount | grep /dev/vdb
  1. 卸载文件系统。

sudo umount /mnt/test
  1. 再次执行resize2fs命令。

sudo resize2fs /dev/vdb 50G

成功则返回信息如下:

Resizing the filesystem on /dev/vdb to 13107200 (4k) blocks.
The filesystem on /dev/vdb is now 13107200 (4k) blocks long.

resize2fs: Permission denied to resize filesystem

问题现象

执行resize2fs命令。

 resize2fs /dev/vdb

返回如下错误:

resize2fs: Permission denied to resize filesystem

问题原因

该错误一般表示执行resize2fs操作需要CAP_SYS_RESOURCE权限,或者文件系统存在错误。

解决方案

  1. 使用sudo提升权限。

sudo resize2fs /dev/vdb
  1. 如果问题依旧存在,则检查文件系统是否存在错误。

dmesg | grep "EXT4-fs"
  1. 如确认文件系统存在错误,卸载文件系统,执行fsck

sudo umount /mnt/test
sudo fsck -y /dev/vdb
  1. 再次执行resize2fs命令进行离线扩容。

sudo resize2fs /dev/vdb