Berdasarkan jawaban @ derobert , saya menulis sebuah program ( inti ) yang akan mem-parsing aliran input dari dd
dan memindai setiap sektor untuk sesuatu yang tampak seperti awal partisi ext.
Ini akan berfungsi setidaknya secepat yang dd
bisa dibaca dari hard disk Anda. Versi singkatnya ada di bawah.
Penggunaan paling sederhana adalah adil sudo dd if=/dev/xxx | ext2scan
, meskipun Anda mungkin ingin memodifikasi dd
perintah untuk meningkatkan ukuran blok atau memilih wilayah untuk dicari.
#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++;
}
}
Catatan: ia tidak hanya akan menemukan awal partisi, tetapi juga superblok di dalamnya.
Dalam kedua kasus, saya akan merekomendasikan menggunakan dumpe2fs
untuk menganalisis hasilnya. Anda dapat membuang awal superblok yang dicurigai ke file (setidaknya enam sektor pertama, menurut tes informal saya), dan jika itu adalah superblok, maka dumpe2fs
akan memberi tahu Anda (antara lain) lokasi relatif dari superblok lainnya. .