すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:Ext4 ファイルシステムで「Structure needs cleaning」エラーメッセージが表示された場合の対処方法

最終更新日:May 16, 2025

このトピックでは、Ext4 ファイルシステムで「Structure needs cleaning」エラーメッセージが表示される問題の解決方法について説明します。

問題の説明

ディスクデバイスをマウントした後、デバイス上の Ext4 ファイルシステムからファイルを読み取るときに「Structure needs cleaning」エラーメッセージが表示されます。

原因

ほとんどの場合、上記の事象は、ディスクデバイス上の Ext4 ファイルシステムのメタデータが破損していることが原因で発生します。この場合、問題を解決するには、Ext4 ファイルシステムを修復する必要があります。

解決策

  1. 問題のある Ext4 ファイルシステムをアンマウントします。

対応するディスクデバイスをアンマウントします。この例では、/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 にマウントされていることを示しています。次のコマンドを実行して、/dev/vdd1 パーティションを /mnt からアンマウントします。

 sudo umount /mnt

df -Th コマンドを実行して、/dev/vdd1 パーティションがアンマウントされているかどうかを確認します。

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. ディスクデバイス上の Ext4 ファイルシステムの状態を確認します。

dumpe2fs コマンドを実行して、ディスクデバイス上の Ext4 ファイルシステムの状態を確認できます。 dumpe2fs コマンドを実行する前に、次のコマンドを実行して dumpe2fs がインストールされているかどうかを確認します。

dumpe2fs -V

コマンド出力に dumpe2fs のバージョン番号が表示されている場合は、dumpe2fs がインストールされています。そうでない場合は、次のコマンドを実行して e2fsprogs パッケージをインストールします。

sudo yum -y install e2fsprogs

dumpe2fs コマンドを実行して、ディスクデバイス上の Ext4 ファイルシステムの状態を確認します。この例では、/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 は、Ext4 ファイルシステムでエラーが発生したことを示しています。コマンド出力の First error function: ext4_ext_check_inode は、最初のエラーが ext4_ext_check_inode() カーネル関数で発生したことを示しています。

  1. Ext4 ファイルシステムを修復します。

警告

Ext4 ファイルシステムの修復は、データ損失につながる可能性があります。注意して進めてください。

fsck.ext4 は、Ext4 ファイルシステムのチェックと修復に使用される Linux のツールです。 fsck.ext4 は、Ext4 ファイルシステムの整合性をチェックし、ファイルシステムのエラーを特定して修正します。fsck.ext4 は、次のようなさまざまな種類のエラーを特定できます。

  • 消失データブロック: たとえば、inode は使用中としてマークされていますが、対応するデータブロックが存在しません。

  • 重複割り当てデータブロック: 同じデータブロックが複数の inode に割り当てられています。

  • 消失または破損したスーパーブロック: ファイルシステムのスーパーブロックが破損している可能性があります。

fsck.ext4 がエラーを特定すると、fsck.ext4 はエラーの修正を試みます。修正操作には、次の操作が含まれる場合があります。

  • スーパーブロック情報の復元と新しいスーパーブロックコピーの作成。

  • 未使用または重複割り当てされたデータブロックの解放。

  • inode ステータス情報を更新して、inode がデータブロックの実際の使用状況と一致するようにします。

  • 間違ったディレクトリエントリなど、ファイルシステムリンクの修復。

重要

次の操作により、ディスクデバイス上の Ext4 ファイルシステムのエラーを修正できますが、データ損失が発生する可能性があります。注意して進めてください。

次のコマンドを実行して、ディスクデバイス上の Ext4 ファイルシステムを修復します。この例では、/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 コマンドを実行して、ディスクデバイス上の Ext4 ファイルシステムの状態を確認します。コマンド出力では、Filesystem state パラメーターの値は、clean with errors ではなく clean になっています。

...
Filesystem state:         clean
...