このトピックでは、Ext4 ファイルシステムで「Structure needs cleaning」エラーメッセージが表示される問題の解決方法について説明します。
問題の説明
ディスクデバイスをマウントした後、デバイス上の Ext4 ファイルシステムからファイルを読み取るときに「Structure needs cleaning」エラーメッセージが表示されます。
原因
ほとんどの場合、上記の事象は、ディスクデバイス上の Ext4 ファイルシステムのメタデータが破損していることが原因で発生します。この場合、問題を解決するには、Ext4 ファイルシステムを修復する必要があります。
解決策
問題のある 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 /mntdf -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ディスクデバイス上の Ext4 ファイルシステムの状態を確認します。
dumpe2fs コマンドを実行して、ディスクデバイス上の Ext4 ファイルシステムの状態を確認できます。 dumpe2fs コマンドを実行する前に、次のコマンドを実行して dumpe2fs がインストールされているかどうかを確認します。
dumpe2fs -Vコマンド出力に dumpe2fs のバージョン番号が表示されている場合は、dumpe2fs がインストールされています。そうでない場合は、次のコマンドを実行して e2fsprogs パッケージをインストールします。
sudo yum -y install e2fsprogsdumpe2fs コマンドを実行して、ディスクデバイス上の 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() カーネル関数で発生したことを示しています。
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
...