จากคำตอบของ @ derobertฉันได้เขียนโปรแกรม ( ส่วนสำคัญ ) ที่จะแยกการสตรีมอินพุตจากdd
และสแกนแต่ละเซกเตอร์เพื่อหาสิ่งที่ดูเหมือนจุดเริ่มต้นของพาร์ติชันเสริม
มันจะทำงานได้อย่างน้อยเร็วเท่าที่dd
อ่านจากฮาร์ดดิสก์ของคุณ รุ่นย่ออยู่ด้านล่าง
การใช้งานที่ง่ายที่สุดคือเพียงแค่sudo dd if=/dev/xxx | ext2scan
คุณอาจต้องการแก้ไขdd
คำสั่งเพื่อปรับปรุงขนาดบล็อกหรือเลือกภูมิภาคเพื่อค้นหา
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main() {
unsigned char const MAGIC[2] = {0x53, 0xef};
unsigned char const ZEROS[512] = {0};
long long int sector = 0;
char buf[4][512];
int empty1, empty2;
while (read(STDIN_FILENO, buf[sector&3], 512) > 0) {
if (!memcmp(buf[sector&3] + 0x38, MAGIC, 2)) {
printf("Found a possible ext2 partition at sector %lld", sector-2);
empty1 = !memcmp(buf[(sector-2)&3], ZEROS, 512);
empty2 = !memcmp(buf[(sector-1)&3], ZEROS, 512);
if (empty1 && empty2) printf(" (first two sectors are empty :)\n");
}
sector++;
}
}
หมายเหตุ: มันจะค้นหาไม่เพียงแค่จุดเริ่มต้นของพาร์ติชัน แต่ยังมีsuperblockภายใน
ไม่ว่าในกรณีใดฉันจะแนะนำให้ใช้dumpe2fs
ในการวิเคราะห์ผลลัพธ์ คุณสามารถถ่ายโอนจุดเริ่มต้นของ superblock ที่น่าสงสัยไปยังไฟล์ (อย่างน้อยหกภาคแรกตามการทดสอบอย่างไม่เป็นทางการของฉัน) และถ้ามันเป็น superblock นั้นdumpe2fs
จะเป็นการบอกตำแหน่งที่เกี่ยวข้องของ superblock อื่น ๆ .