โดยปกติเมื่อผู้แก้ไขบันทึกไฟล์พวกเขาจะลบหรือตัดทอนเป็น 0 ซึ่งจะเป็นการเพิ่มพื้นที่ว่างแล้วจึงเขียนซึ่งจะจัดสรรพื้นที่ใหม่ ซึ่งส่งผลให้ระบบไฟล์วางข้อมูลในตำแหน่งทางกายภาพที่แตกต่างอย่างสิ้นเชิง ดังนั้นความคิดของคุณอาจไม่ทำงาน
คุณสามารถรับตำแหน่งทางกายภาพของไฟล์โดยใช้filefragหรือhdparm --fibmapจากนั้นใช้ddเพื่ออ่านตำแหน่งทางกายภาพนั้นโดยตรง ฉันได้อธิบายกระบวนการนี้ในบริบทอื่นที่นี่: /unix//a/85880/30851
ในกรณีของคุณมีโอกาสมากขึ้นที่คุณต้องการแนวทางทั่วไปในการค้นหาข้อมูลที่เป็นข้อความ ... สิ่งที่ต้องการ:
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings จะค้นหาข้อมูล ASCII ที่ต่อเนื่อง (รองรับการเข้ารหัสอื่น ๆ บางอย่างไม่แน่ใจเกี่ยวกับ UTF-8 หากเป็นรหัสหรือภาษาอังกฤษคุณไม่จำเป็นต้องใช้) และมันจะพิมพ์ออฟเซ็ตที่พบ
text snippetควรเป็นตัวอย่างข้อความที่ไม่ซ้ำใครที่คุณจำได้ว่าอยู่ในส่วนของไฟล์ที่คุณกำลังมองหา [ในบรรทัดเดียว] (หากคุณไม่ทราบอย่างแน่นอนคุณสามารถ grep ด้วยนิพจน์ทั่วไปแทน)
-n 12คือความยาวต่ำสุดที่stringsจะมองหา ควรจะมีความยาวของคุณ12 text snippetพารามิเตอร์นี้เป็นทางเลือกหากระบุไว้อาจช่วยstrings | grepให้ทำงานได้เร็วขึ้นเล็กน้อย
จะใช้เวลานานในการอ่านพาร์ติชันทั้งหมด แต่ถ้าประสบความสำเร็จคุณจะมีออฟเซ็ตที่คุณสามารถป้อนddเพื่อคว้าพื้นที่ทั่วไปแล้วลบสิ่งที่ไม่ได้เป็นของ
ฉันไม่ได้ทำสิ่งใดในสารบบนั้น
หากไดเรกทอรีของคุณไม่ได้เป็นจุดเชื่อมต่อ ... ระบบไฟล์ส่วนใหญ่ไม่ได้จองพื้นที่ "ต่อไดเรกทอรี" ดังนั้น ... การเขียนใด ๆ และทั้งหมดในระบบไฟล์ทั้งหมดอาจเขียนทับบิตที่คุณกำลังมองหา ในสถานการณ์การกู้คืนข้อมูลคุณมักจะเปลี่ยนสิ่งทั้งหมดเป็นโหมดอ่านอย่างเดียว
stringsจะค้นหาบางส่วนของไฟล์เว้นแต่ว่าคุณโชคดีมาก