Sur la base de la réponse de @ derobert , j'ai écrit un programme ( gist ) qui analysera un flux d'entrée à partir de ddet analysera chaque secteur pour quelque chose qui ressemble au début d'une partition ext.
Cela fonctionnera au moins aussi vite que ddpeut lire à partir de votre disque dur. Une version abrégée est ci-dessous.
L'utilisation la plus simple est juste sudo dd if=/dev/xxx | ext2scan, bien que vous souhaitiez probablement modifier la ddcommande pour améliorer la taille du bloc ou choisir une région à rechercher.
#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++;
}
}
Remarque: il trouvera non seulement le début des partitions, mais également des superblocs à l' intérieur.
Dans les deux cas, je recommanderais d'utiliser dumpe2fspour analyser les résultats. Vous pouvez sauvegarder le début du superbloc suspect dans un fichier (au moins les six premiers secteurs, selon mon test informel), et s'il s'agit d'un superbloc, dumpe2fsvous dira (entre autres) l'emplacement relatif des autres superblocs .