ค้นหาไฟล์ที่ได้รับผลกระทบจากบล็อกเสียบนระบบไฟล์ ext4


13

ฉันมีระบบไฟล์ ext4 ที่เพิ่งพัฒนาเซกเตอร์เสีย การวิ่งfsck.ext4 -cค้นหาและจดจำบล็อกที่ไม่ดี ฉันจะค้นหาไฟล์ใด (ถ้ามี) รวมบล็อกที่ไม่ดีเหล่านี้เพื่อให้ฉันสามารถกู้คืนได้จากการสำรองข้อมูล

linux  ext4 

ขณะที่ฉันกำลังแก้ไขด้วย fsck แบบโต้ตอบแสดงว่าไฟล์ใดมีปัญหา แต่ถ้ามีจำนวนมากเกินไปสิ่งที่ดีที่สุดคือ @Nethox
กุมภ์อำนาจ

คำตอบ:


11

ด้วยการรวมกันของdumpe2fsและdebugfsซึ่งจะรวมอยู่ในแพคเกจพร้อมe2fsprogs คุณต้องใช้เอาต์พุตของคำสั่งเป็นอาร์กิวเมนต์ของคำสั่งถัดไป เครื่องมือเหล่านี้ตรวจจับขนาดบล็อกของระบบไฟล์โดยอัตโนมัติดังนั้นจึงมีความสอดคล้องและปลอดภัยกว่าการเรียกใช้โดยตรงfsck.ext*

badblocks

พิมพ์บล็อกที่ไม่ดีที่ลงทะเบียนของระบบไฟล์:

# dumpe2fs -b DEVNAME

พิมพ์ inodes ที่ใช้รายการบล็อกที่กำหนด:

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

พิมพ์ชื่อพา ธ ไปยังรายการ inode ที่กำหนด:

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