Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #69, АВГУСТ 2006 г.

искусственное дыхание

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #069, стр. 069-054-6


Структура inode в USF2

struct ufs2_dinode {

/* 0x00 */ u_int16_t di_mode; /* 0: IFMT, permissions; see below. */

/* 0x02 */ int16_t di_nlink; /* 2: File link count. */

/* 0x04 */ u_int32_t di_uid; /* 4: File owner. */

/* 0x08 */ u_int32_t di_gid; /* 8: File group. */

/* 0x0C */ u_int32_t di_blksize; /* 12: Inode blocksize. */

/* 0x10 */ u_int64_t di_size; /* 16: File byte count. */

/* 0x18 */ u_int64_t di_blocks; /* 24: Bytes actually held. */

/* 0x20 */ ufs_time_t di_atime; /* 32: Last access time. */

/* 0x28 */ ufs_time_t di_mtime; /* 40: Last modified time. */

/* 0x30 */ ufs_time_t di_ctime; /* 48: Last inode change time. */

/* 0x38 */ ufs_time_t di_birthtime; /* 56: Inode creation time. */

/* 0x40 */ int32_t di_mtimensec; /* 64: Last modified time. */

/* 0x44 */ int32_t di_atimensec; /* 68: Last access time. */

/* 0x48 */ int32_t di_ctimensec; /* 72: Last inode change time. */

/* 0x4C */ int32_t di_birthnsec; /* 76: Inode creation time. */

/* 0x50 */ int32_t di_gen; /* 80: Generation number. */

/* 0x54 */ u_int32_t di_kernflags; /* 84: Kernel flags. */

/* 0x58 */ u_int32_t di_flags; /* 88: Status flags (chflags). */

/* 0x5C */ int32_t di_extsize; /* 92: External attributes block. */

/* 0x60 */ ufs2_daddr_tdi_extb[NXADDR];/* 96: External attributes block. */

/* 0x70 */ ufs2_daddr_tdi_db[NDADDR]; /* 112: Direct disk blocks. */

/* 0xD0 */ ufs2_daddr_tdi_ib[NIADDR]; /* 208: Indirect disk blocks. */

/* 0xE8 */ int64_t di_spare[3]; /* 232: Reserved; currently unused */

};

Имена файлов хранятся в директориях. В inode их нет. С точки зрения UFS, директории являются обыкновенными файлами (ну, не совсем обыкновенными) и могут храниться в любом месте, принадлежащем группе цилиндров. Файловая система UFS поддерживает несколько типов хеширования директорий, однако на структуре хранения имен это никак не отражается. Имена хранятся в блоках, называемых DIRBLKSIZ в структурах типа direct, выровненных по 4-байтовой границе.

Структура direct определена в файле /src/ufs/ufs/dir.h и содержит: номер inode, описывающий данный файл, тип файла, его имя, а так же длину самой структуры direct, используемую для нахождения следующего direct'а в блоке.

Структура direct, отвечающая за хранение имен файлов и директорий

struct direct {

/* 0x00 */ u_int32_t d_ino; /* inode number of entry */

/* 0x04 */ u_int16_t d_reclen; /* length of this record */

/* 0x06 */ u_int8_t d_type; /* file type, see below */

/* 0x07 */ u_int8_t d_namlen; /* length of string in d_name */

/* 0x08 */ char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */

};

[что происходит при удалении файла.]

При удалении файла на UFS-разделе происходит следующее (события перечислены в порядке расположения соответствующих структур в разделе и могут не совпадать с порядком их возникновения):

1 В суперблоке обновляется поле fs_time (время последнего доступа к разделу).

2 В суперблоке обновляется структура fs_cstotal (количество свободных inode и блоков данных в разделе).

Назад на стр. 069-054-5  Содержание  Вперед на стр. 069-054-7