に基づく @ derobertの答え、私はプログラム(書いた主旨からの入力ストリームを解析します)dd
とのextパーティションの開始のようになっていることを何かのために各セクタをスキャンします。
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
して結果を分析することをお勧めします。疑わしいスーパーブロックの開始をファイル(私の非公式テストによると、少なくとも最初の6セクター)にダンプすることができ、それdumpe2fs
がスーパーブロックである場合、他のスーパーブロックの相対的な位置を(特に)通知します。