Восстановление информации своими руками


Листинг1 формат супер-блока (второстепенные поля опущены)


За концом супеблока, на некотором отдалении от него, находится первая группа цилиндров. В начале каждой группы расположена служебная структура cg (далее по тексту — описатель группы цилиндров, термин мой — КК), содержащая магическую последовательность 55h 02h 09h по которую все уцелевшие группы можно найти даже при полностью испорченном супеблоке (штатным образом, стартовые адреса всех последующих групп вычисляются путем умножения номера группы на ее размер, содержащийся в поле fs_cgsize).

Другие важные параметры:

 

q       cg_cgx — порядковой номер группы, отсчитываемый от нуля;

q       cg_old_niblk — кол-во inode в данной группе;

q       cg_ndblk — кол-во блоков данных в данной группе;

q       csum — кол-во свободных inode и блоков данных в данной группе;

q       cg_iusedoff — смещение карты занятых inod'e, отсчитываемое от начала данной группы и измеряемое в байтах;

q       cg_freeoff — смещение карты свободного пространства (байты от начла группы);

 

Структура cg определена в файле /src/ufs/ffs/fs.h и выглядит следующим образом:

#define CG_MAGIC     0x090255

#define MAXFRAG      8

struct cg {

/* 0x00 */ int32_t  cg_firstfield;       /* historic cyl groups linked list */

/* 0x04 */ int32_t  cg_magic;                   /* magic number */

/* 0x08 */ int32_t  cg_old_time;         /* time last written */

/* 0x0С */ int32_t  cg_cgx;              /* we are the cgx'th cylinder group */

/* 0x10 */ int16_t  cg_old_ncyl;         /* number of cyl's this cg */

/* 0x12 */ int16_t  cg_old_niblk;        /* number of inode blocks this cg */

/* 0x14 */ int32_t  cg_ndblk;                   /* number of data blocks this cg */

/* 0x18 */ struct  csum cg_cs;           /* cylinder summary information */

/* 0x28 */ int32_t  cg_rotor;                   /* position of last used block */




Начало  Назад  Вперед