本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍ext4文件系统中出现“Structure needs clean”错误信息的解决方案。
问题现象
挂载设备后,读取设备上的文件出现“Structure needs clean”错误信息。
原因分析
出现这类错误一般表示磁盘上的文件系统元数据信息出现损坏,需要对磁盘文件系统进行修复。
解决方法
卸载文件系统
首先需要卸载磁盘对应的挂载点,这里以磁盘设备/dev/vdd1
为例。执行命令df -Th
查看各挂载点信息,输出信息如下。
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 16G 0 16G 0% /dev
tmpfs tmpfs 16G 0 16G 0% /dev/shm
tmpfs tmpfs 16G 552K 16G 1% /run
/dev/vda3 ext4 99G 15G 80G 16% /
tmpfs tmpfs 16G 4.0K 16G 1% /tmp
/dev/vda2 vfat 200M 5.8M 195M 3% /boot/efi
tmpfs tmpfs 3.1G 0 3.1G 0% /run/user/0
/dev/vdd1 ext4 98G 24K 93G 1% /mnt
可以看到/dev/vdd1
当前正挂载到/mnt
。执行下面命令进行卸载。
sudo umount /mnt
最后,再次执行df -Th
确认设备已经被卸载。
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 16G 0 16G 0% /dev
tmpfs tmpfs 16G 0 16G 0% /dev/shm
tmpfs tmpfs 16G 552K 16G 1% /run
/dev/vda3 ext4 99G 15G 80G 16% /
tmpfs tmpfs 16G 4.0K 16G 1% /tmp
/dev/vda2 vfat 200M 5.8M 195M 3% /boot/efi
tmpfs tmpfs 3.1G 0 3.1G 0% /run/user/0
查看磁盘上文件系统状态
检查磁盘上的文件系统状态可以通过dumpe2fs
命令完成。首先确认系统中是否安装了该命令。
dumpe2fs -V
如果输出对应的版本号,则说明已经安装;否则,通过下面的命令安装e2fsprogs包。
sudo yum -y install e2fsprogs
通过dumpe2fs
命令可以查看磁盘上文件系统状态,这里以/dev/vdd1
为例。
sudo dumpe2fs /dev/vdd1
输出结果如下:
Filesystem volume name: <none>
......
Filesystem state: clean with errors
Errors behavior: Continue
Filesystem OS type: Linux
......
FS Error count: 9
First error time: Thu Dec 26 12:58:52 2024
First error function: ext4_ext_check_inode
First error line #: 520
First error inode #: 13
First error err: EFSCORRUPTED
Last error time: Thu Dec 26 15:35:37 2024
Last error function: ext4_ext_check_inode
Last error line #: 520
Last error inode #: 13
Last error err: EFSCORRUPTED
Journal features: journal_64bit
Total journal size: 256M
Total journal blocks: 65536
Max transaction length: 65536
Fast commit length: 0
从上述信息中,Filesystem state: clean with errors
表明文件系统处于有错误的状态。同时,First error function: ext4_ext_check_inode
表明了第一次在内核ext4_ext_check_inode
中发生了错误。
修复磁盘文件系统错误
修复磁盘文件系统可能会造成数据丢失,请谨慎进行此项操作!
fsck.ext4
是 Linux 系统中用于检查和修复EXT4文件系统的工具。它的主要功能是检查文件系统的完整性,并在发现错误时尝试修复这些错误。在检查过程中,fsck.ext4
会识别不同类型的错误,比如:
数据块的丢失:例如,某个
inode
被标记为使用,但其数据块却不存在。多重分配:同一个数据块被多个
inode
分配。丢失或损坏的超级块:文件系统的超级块可能被损坏。
一旦 fsck.ext4
识别出错误,它会尝试自动修复这些错误。修复机制可能包括:
修复超级块信息,创建新的超级块拷贝。
释放未使用的或重复分配的数据块。
更新
inode
的状态信息,确保它们与数据块的实际使用情况相符。修复文件系统的链接,如目录项的错误。
下面的操作会修复磁盘上的文件系统错误,但是可能会造成数据丢失,请谨慎操作!
执行下面的命令修复磁盘上的文件系统,以/dev/vdd1
为例。
sudo fsck.ext4 /dev/vdd1
此时fsck.ext4
命令会检查磁盘上的错误,并询问是否对此错误进行修复。
Pass 1: Checking inodes, blocks, and sizes
Inode 13 has corrupt extent header. Clear inode<y>? yes
Inode 13, i_blocks is 8, should be 0. Fix<y>? yes
Pass 2: Checking directory structure
Entry 'testfile.txt' in / (2) has deleted/unused inode 13. Clear<y>? yes
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: -34816
Fix<y>? yes
Free blocks count wrong for group #1 (31735, counted=31736).
Fix<y>? yes
Free blocks count wrong (12822641, counted=12822642).
Fix<y>? yes
Inode bitmap differences: -13
Fix<y>? yes
Free inodes count wrong for group #0 (8180, counted=8181).
Fix<y>? yes
Free inodes count wrong (3276788, counted=3276789).
Fix<y>? yes
/dev/vdd1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/vdd1: 11/3276800 files (0.0% non-contiguous), 284558/13107200 blocks
对于所有错误都输入y
表示修复该错误。或者直接通过下面命令修复所有错误。
fsck.ext4 -y /dev/vdd1
这时候再通过dumpe2fs
命令检查磁盘状态则显示文件系统状态为clean
,而非之前的错误状态。
...
Filesystem state: clean
...