本文介紹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
...