Ext4 dosya sistemindeki bozuk bloklardan hangi dosyaların etkilendiğini bulun


13

Son zamanlarda bazı kötü sektörler geliştiren bir ext4 dosya sistemim var. Koşu fsck.ext4 -ckötü blokları bulur ve hatırlar. Yedeklerden geri yükleyebilmem için hangi dosyaların (varsa) bu bozuk blokları içerdiğini nasıl bulabilirim?

linux  ext4 

Ben fsck ile etkileşimli sabitleme yaparken, hangi dosyaların sorunları olduğunu gösterdi; ancak, çok fazla varsa, @Nethox'un cevapladığı şey daha iyidir.
Kova Gücü

Yanıtlar:


11

Birlikte pakete dahil dumpe2fsve ve bir kombinasyonu ile . Komutun çıktısını bir sonrakinin argümanı olarak kullanmalısınız. Bu araçlar dosya sistemi blok boyutunu otomatik olarak algılar, bu nedenle doğrudan çağırma işleminden tutarlı ve daha güvenlidir .debugfse2fsprogsfsck.ext*

badblocks

Dosya sisteminin kayıtlı bozuk bloklarını yazdırır:

# dumpe2fs -b DEVNAME

Verilen blok listesini kullanan inode'ları yazdırır:

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

Yol adlarını verilen inode listesine yazdırır:

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

debugfsayrıca etkileşimli bir kabuk ve -f cmd_fileseçenek var, ancak bu durum için çok güçlü veya kullanışlı değiller.
-R seçeneği aşağıdaki gibi daha otomatik komut dosyalarına izin verir:

#!/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"

çok büyük bir dosya sistemindeki hata ayıklamalarının bir şey göstermeden önce uzun zaman alabileceğini belirtmek için
Aquarius Power
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.