Во время новой установки я случайно отформатировал диск с данными. Я пробовал использовать некоторые инструменты: в первую очередь testdisk, но не добился хороших результатов. (см. мою неудачную запись на суперпользователе).
Итак, я решил прочитать несколько документов о структуре файловой системы ext2 и смог получить некоторые результаты:
Удаленный раздел имеет такое дерево каталогов:
dev
|-scripts
|-projects
|-services
|-...
Medias
|-downloads
|-Musique
|-...
backup
...
Итак, исходя из формата записи каталога ext2:
Directory Entry
Starting_Byte Ending_Byte Size_in_Bytes Field_Description
0 3 4 Inode
4 5 2 Total size of this entry (Including all subfields)
6 6 1 Name Length least-significant 8 bits
7 7 1 Type indicator (only if the feature bit for "directory entries have file type byte" is set, else this is the most-significant 8 bits of the Name Length)
8 8+N-1 N Name characters
Я попытался найти данные, соответствующие этой структуре.
Я использовал этот скрипт:
var bindexOf = require('buffer-indexof');
var currentOffset=0;
var deviceReadStream = fs.createReadStream("/dev/sdb");
deviceReadStream.on('error',function(err){
console.log(err);
});
deviceReadStream.on('data',function(data){
var dirs = ["dev","scripts","services","projects","Medias","downloads","Musique","backup"];
dirs.forEach(function(dir){
dirOctetFormat = new Buffer(2);
dirOctetFormat.writeUInt8(dir.length,0);
dirOctetFormat.writeUInt8(2,1);// type is directory
dirOctetFormat= Buffer.concat( [dirOctetFormat, new Buffer(dir)]);
var offset = bindexOf( data, dirOctetFormat );
if( offset >= 0 ){
console.log( dir + " entry found at offset " + (currentOffset + offset) );
}
});
currentOffset += data.length;
});
}
Я нашел данные, которые, похоже, являются записью в каталоге dev:
===== Current offset: 233590226944 - 217.5478515625Gio ======
scripts entry found at offset 233590227030
services entry found at offset 233590227014
projects entry found at offset 233590228106
Если это так, я получил номера inode его дочерних каталогов: скрипты, проекты, службы, ...
Но я не знаю, что с этим делать! Я попытался определить расположение этих inodes на основе этого руководства, но так как я не смог чтобы найти суперблок удаленной файловой системы, мне просто нужно предположить размер блока, количество блоков, ... и это кажется мне немного нечетким, чтобы надеяться на получение результата.
Итак, не могли бы вы иметь несколько интервалов для всех значений, необходимых для получения смещения inode, и более формальную формулу для получения этого смещения?