पता करें कि कौन सी फाइलें ext4 फाइल सिस्टम पर खराब ब्लॉक से प्रभावित हैं


13

मेरे पास एक ext4 फाइल सिस्टम है जिसने हाल ही में कुछ खराब क्षेत्रों को विकसित किया है। रनिंग fsck.ext4 -cखराब ब्लॉकों को ढूंढता है और याद करता है। मैं कैसे पता लगा सकता हूं कि कौन सी फाइलें (यदि कोई हैं) में इन खराब ब्लॉकों को शामिल किया गया है ताकि मैं उन्हें बैकअप से पुनर्स्थापित कर सकूं?

linux  ext4 

जब मैं अंतःक्रियात्मक रूप से इसे fsck के साथ ठीक कर रहा था, तो उसने दिखाया कि फाइलों में क्या समस्या थी; लेकिन, अगर बहुत सारे हैं, तो बेहतर है कि @ नीथॉक्स ने क्या जवाब दिया।
कुंभ राशि

जवाबों:


11

के संयोजन के साथ dumpe2fsऔर debugfs, जो e2fsprogsपैकेज में शामिल हैं fsck.ext*
आपको अगले एक के तर्क के रूप में एक कमांड के आउटपुट का उपयोग करना होगा।
ये उपकरण फाइलसिस्टम ब्लॉक आकार का स्वतः पता लगाते हैं, इसलिए यह सीधे badblocksआह्वान की तुलना में सुसंगत और सुरक्षित है ।

फ़ाइल सिस्टम के पंजीकृत ख़राब ब्लॉकों को प्रिंट करता है:

# dumpe2fs -b DEVNAME

प्रिंट इनकोड जो दिए गए ब्लॉक सूची का उपयोग करते हैं:

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

दिए गए इनकोड सूची में पथनामों को प्रिंट करता है:

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

सिर्फ यह बताने के लिए कि बहुत बड़े फाइल सिस्टम पर डिबगफेट्स, कुछ दिखाने से पहले एक लंबा समय ले सकते हैं
कुंभ राशि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.