@ Derobert के उत्तर के आधार पर , मैंने एक प्रोग्राम ( gist ) लिखा, जो एक इनपुट स्ट्रीम को पार्स करेगा 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++;
}
}
नोट: यह न केवल विभाजन की शुरुआत पाएंगे, बल्कि उनके भीतर सुपरब्लॉक भी होंगे ।
या तो मामले में, मैं dumpe2fs
परिणामों का विश्लेषण करने के लिए उपयोग करने की सलाह दूंगा। आप किसी फ़ाइल पर संदिग्ध सुपरब्लॉक की शुरुआत (मेरे अनौपचारिक परीक्षण के अनुसार कम से कम पहले छह सेक्टर) कर सकते हैं, और यदि यह सुपरब्लॉक है, तो dumpe2fs
आपको (अन्य बातों के अलावा) अन्य सुपरब्लॉक के सापेक्ष स्थान बताएगा। ।