Dayanarak @ derobert cevabı , ben bir program (yazdığı özü bir giriş akışı ayrıştırmak olacak) dd
bir şey için her sektör ve tarama dair bir dahili bölümünün başlangıç gibi görünüyor.
En azından dd
sabit diskinizden okuyabileceğiniz kadar hızlı çalışır . Kısaltılmış bir sürüm aşağıdadır.
Blok boyutunu iyileştirmek veya aramak için bir bölge seçmek sudo dd if=/dev/xxx | ext2scan
için dd
komutu değiştirmek isteyeceksiniz, ancak en basit kullanım sadece .
#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++;
}
}
Not: sadece bölümlerin başlangıcını değil, aynı zamanda bunların içindeki süper blokları da bulacaktır .
Her iki durumda da, dumpe2fs
sonuçları analiz etmek için kullanmanızı tavsiye ederim . Şüpheli süper bloğun başlangıcını bir dosyaya (gayri resmi testime göre en azından ilk altı sektör) dökebilir ve eğer bir süper blok ise, o dumpe2fs
zaman (diğer şeylerin yanı sıra) diğer süper blokların göreli konumlarını söyler .