Sur la base de la réponse de @ derobert , j'ai écrit un programme ( gist ) qui analysera un flux d'entrée à partir de dd
et analysera chaque secteur pour quelque chose qui ressemble au début d'une partition ext.
Cela fonctionnera au moins aussi vite que dd
peut 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 dd
commande 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 dumpe2fs
pour 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, dumpe2fs
vous dira (entre autres) l'emplacement relatif des autres superblocs .