এক্সট 4 ফাইল সিস্টেমে কোন ফাইলগুলি খারাপ ব্লকগুলি দ্বারা প্রভাবিত হয়েছে তা সন্ধান করুন


13

আমার কাছে একটি ext4 ফাইল সিস্টেম রয়েছে যা সম্প্রতি কিছু খারাপ সেক্টর বিকাশ করেছে। চলমান fsck.ext4 -cখারাপ ব্লকগুলি সন্ধান করে এবং মনে রাখে। আমি কীভাবে খুঁজে পেতে পারি যে কোন ফাইলগুলিতে (যদি থাকে) এই খারাপ ব্লকগুলি অন্তর্ভুক্ত রয়েছে যাতে আমি ব্যাকআপগুলি থেকে সেগুলি পুনরুদ্ধার করতে পারি?

linux  ext4 

আমি fsck দিয়ে ইন্টারেক্টিভভাবে এটি সংশোধন করার সময় এটি দেখিয়েছিল যে ফাইলগুলিতে কোন সমস্যা আছে; তবে, যদি খুব বেশি হয় তবে @ নেথক্স উত্তরটি দিয়েছিল better
কুম্ভ শক্তি

উত্তর:


11

dumpe2fsএবং এর সংমিশ্রণ সহ debugfs, যা e2fsprogsপ্যাকেজের পাশাপাশি অন্তর্ভুক্ত রয়েছে fsck.ext*
আপনাকে অবশ্যই পরবর্তী আদেশটির আর্গুমেন্ট হিসাবে একটি কমান্ডের আউটপুট ব্যবহার করতে হবে।
এই সরঞ্জামগুলি ফাইল সিস্টেমের ব্লক আকারটি স্বতঃ-সনাক্ত করে, তাই এটি সরাসরি badblocksঅনুরোধের চেয়ে সামঞ্জস্যপূর্ণ এবং নিরাপদ ।

ফাইল সিস্টেমের নিবন্ধিত খারাপ ব্লকগুলি মুদ্রণ করে:

# dumpe2fs -b DEVNAME

প্রদত্ত ব্লক তালিকাটি ব্যবহার করে এমন ইনোডগুলি মুদ্রণ করে:

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

প্রদত্ত ইনোড তালিকায় পাথের নামগুলি মুদ্রণ করে:

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

debugfsএছাড়াও একটি ইন্টারেক্টিভ শেল এবং -f cmd_fileবিকল্প রয়েছে, তবে তারা এই ক্ষেত্রে খুব শক্তিশালী বা দরকারী নয়।
-আর বিকল্পটি এর চেয়ে আরও বেশি স্বয়ংক্রিয় স্ক্রিপ্টগুলির অনুমতি দেয়:

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

কেবল এটি উল্লেখ করতে যে খুব বড় ফাইল সিস্টেমে ডিবাগগুলি কিছু দেখানোর আগে অনেক সময় নিতে পারে
কুম্ভ শক্তি পাওয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.