@ 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आपको (अन्य बातों के अलावा) अन्य सुपरब्लॉक के सापेक्ष स्थान बताएगा। ।