どのファイルがext4ファイルシステムの不良ブロックの影響を受けるかを見つける


13

最近、いくつかの不良セクターを開発したext4ファイルシステムがあります。実行するfsck.ext4 -cと、不良ブロックが検出され、記憶されます。バックアップから復元できるように、これらの不良ブロックが含まれているファイル(ある場合)を見つけるにはどうすればよいですか?

linux  ext4 

fsckを使用してインタラクティブに修正している間、どのファイルに問題があるかが示されました。しかし、多すぎる場合は、@ Nethoxが答えた方が良いです。
アクエリアスパワー

回答:


11

組み合わせとdumpe2fsし、debugfs中に含まれており、e2fsprogs一緒にパッケージfsck.ext*
コマンドの出力を次のコマンドの引数として使用する必要があります。
これらのツールはファイルシステムのブロックサイズを自動検出するため、直接badblocks呼び出しよりも一貫性があり安全です。

ファイルシステムの登録済み不良ブロックを出力します。

# dumpe2fs -b DEVNAME

指定されたブロックリストを使用するiノードを出力します。

# debugfs -R "icheck BLOCK ..." DEVNAME

指定されたiノードリストへのパス名を出力します。

# debugfs -R "ncheck INODE ..." DEVNAME

debugfsインタラクティブシェルと-f cmd_fileオプションもありますが、この場合にはあまり強力でも有用でもありません。
-Rオプションは、次のような自動化されたスクリプトを許可します。

#!/bin/sh
# Finds files affected by bad blocks on ext* filesystems.
# Valid only for ext* filesystems with bad blocks registered with
# fsck -c [-c] [-k] or -l|-L options.
# Can be extremely slow on damaged storage (not just a corrupt filesystem).

DEVNAME="$1"
[ -b "$DEVNAME" ] || exit 1

BADBLOCKS="$(dumpe2fs -b "$DEVNAME" | tr '\n' ' ')"
[ -n "$BADBLOCKS" ] || exit 0

INODES="$(debugfs -R "icheck $BADBLOCKS" "$DEVNAME" | awk -F'\t' '
    NR > 1 { bad_inodes[$2]++; }
    END {
        for (inode in bad_inodes) {
            if (inode == "<block not found>") {
                printf("%d unallocated bad blocks\n", bad_inodes[inode]) > "/dev/stderr";
                continue;
            }
            printf inode OFS;
        }
    }
')"
[ -n "$INODES" ] || exit 0

debugfs -R "ncheck -c $INODES" "$DEVNAME"

ただdebugfsのは、非常に大規模なファイルシステムに、何かを表示する前に長い時間がかかる場合がありますことを指摘する
アクエリアスパワー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.