के संयोजन के साथ 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"