ย้อนกลับการค้นหา inode / file จาก offset ในอุปกรณ์ raw บน linux และ ext3 / 4?


6

ใน linux กำหนดออฟเซ็ตเป็นอุปกรณ์ดิสก์ดิบเป็นไปได้ไหมที่จะแมปกลับไปยังพาร์ติชัน + inode?

ตัวอย่างเช่นสมมติว่าฉันรู้ว่าสตริง "xyz" มีอยู่ที่ไบต์ชดเชย 1000000 ใน / dev / sda: (เช่น xxd -l 100 -s 1000000 / dev / sda แสดงการถ่ายโอนข้อมูลที่เริ่มต้นด้วย "xyz")

1) ฉันจะทราบได้อย่างไรว่าพาร์ทิชัน (ถ้ามี) ออฟเซ็ต 1000000 นั้นตั้งอยู่ที่ใด (ฉันคิดว่านี่เป็นเรื่องง่าย แต่กำลังรวมอยู่ด้วยเพื่อความสมบูรณ์)

2) สมมติว่าอ็อฟเซ็ตตั้งอยู่ในพาร์ติชันฉันจะไปหาไอโหนดใดที่มันเป็นของ (หรือพิจารณาว่ามันเป็นส่วนหนึ่งของพื้นที่ว่าง) สันนิษฐานว่าเป็นเฉพาะระบบไฟล์ในกรณีใดบ้างที่รู้วิธีการทำเช่นนี้สำหรับ ext4 และ ext3?


1
เป็นไปได้อย่างแน่นอนและไม่กี่ปีที่ผ่านมาฉันเห็น HOWTO ที่ไหนสักแห่งในอินเทอร์เน็ต เคล็ดลับเกี่ยวข้องกับคณิตศาสตร์บางอย่างเกี่ยวกับพารามิเตอร์ที่แตกต่างกันของระบบไฟล์และตารางพาร์ทิชัน ลองค้นหาดู สิ่งนี้อาจมีประโยชน์: unix.stackexchange.com/questions/37119/...
Serge

คำตอบ:


12

ฉันต้องทำสิ่งที่คล้ายกันดังนั้นฉันคิดว่าฉันจะแบ่งปันวิธีแก้ปัญหาของฉัน

คุณสามารถดูได้ว่าพาร์ทิชันใดที่ออฟเซ็ตของไดรฟ์ไบต์เป็นของโดยการตรวจสอบองค์ประกอบ 'ออฟเซ็ต' และ 'ขนาด' ของ udisks - แสดงเอาต์พุต -show-info เช่น.

user@host:~$ sudo udisks --show-info /dev/sda1 | grep -i 'offset'
    offset:                    1048576
    alignment offset:          0

ลบออฟเซ็ตนี้จากดิสก์ออฟเซ็ตเพื่อรับไบต์ออฟเซ็ตในพาร์ติชัน ดังนั้นดิสก์ออฟเซ็ต (10,000000) ใน / dev / sda คือพาร์ติชั่นออฟเซ็ต (10,000000 - 1048576) = 8951424 in / dev / sda1

คุณสามารถค้นหาว่าบล็อกขนาดใหญ่อยู่ในพาร์ติชันโดยใช้คำสั่งต่อไปนี้:

user@host:~$ sudo tune2fs -l /dev/sda1  | grep -i 'block size'
Block size:               4096

แบ่งพาร์ติชั่นไบต์ออฟเซ็ตด้วยขนาดบล็อกเพื่อกำหนดบล็อกออฟเซ็ตในกรณีนี้ 8951424/4096 = 2185

เรียกใช้คำสั่งต่อไปนี้เพื่อค้นหาว่า inode ใดครอบครองบล็อกนั้น:

user@host:~$ sudo debugfs -R "icheck 2185" /dev/sda1
debugfs 1.41.11 (14-Mar-2010)
Block   Inode number
2185    123456 

จากนั้นคำสั่งต่อไปนี้เพื่อค้นหาว่าชื่อไฟล์มีไว้สำหรับ inode นั้น:

user@host:~$ sudo debugfs -R "ncheck 123456" /dev/sda1
debugfs 1.41.11 (14-Mar-2010)
Inode   Pathname
123456  /tmp/some-filename.txt

มีคำอธิบายเพิ่มเติมเกี่ยวกับวิธีการที่ http://www.randomnoun.com/wp/2013/09/12/determining-the-file-at-a-specific-vmdk-offset

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.