উপর ভিত্তি করে @ 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
ফলাফলগুলি বিশ্লেষণ করতে ব্যবহার করার পরামর্শ দেব । আপনি সন্দেহজনক সুপারব্লকের শুরুটি কোনও ফাইলের কাছে ফেলে দিতে পারেন (আমার অনানুষ্ঠানিক পরীক্ষা অনুযায়ী কমপক্ষে প্রথম ছয়টি সেক্টর) এবং যদি এটি একটি সুপারব্লক হয় তবে dumpe2fs
আপনাকে অন্যান্য সুপারব্লকগুলির আপেক্ষিক অবস্থানগুলি (অন্যান্য বিষয়গুলির মধ্যে) বলবে ।