全部產品
Search
文件中心

Alibaba Cloud Linux:ext4檔案系統“Structure needs cleaning”問題解決方案

更新時間:Jan 18, 2025

本文介紹ext4檔案系統中出現“Structure needs clean”錯誤資訊的解決方案。

問題現象

掛載裝置後,讀取裝置上的檔案出現“Structure needs clean”錯誤資訊。

原因分析

出現這類錯誤一般表示磁碟上的檔案系統中繼資料資訊出現損壞,需要對磁碟檔案系統進行修複。

解決方案

  1. 卸載檔案系統

首先需要卸載磁碟對應的掛載點,這裡以磁碟裝置/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
  1. 查看磁碟上檔案系統狀態

檢查磁碟上的檔案系統狀態可以通過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中發生了錯誤。

  1. 修複磁碟檔案系統錯誤

警告

修複磁碟檔案系統可能會造成資料丟失,請謹慎進行此項操作!

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
...