Superblock紀錄檔案系統諸多重要資訊,從實體volume的名稱、大小、index資料等等。
Superblock紀錄檔案系統諸多重要資訊,從實體volume的名稱、大小、index資料等等。Superblock的資料結構如下示:
typedef struct disk_super_block
{
char name[OS_NAME_LENGTH];
int32 magic1;
int32 fs_byte_order;
uint32 block_size;
uint32 block_shift;
off_t num_blocks;
off_t used_blocks;
int32 inode_size;
int32 magic2;
int32 blocks_per_ag;
int32 ag_shift;
int32 num_ags;
int32 flags;
block_run log_blocks;
off_t log_start;
off_t log_end;
int32 magic3;
inode_addr root_dir;
inode_addr indices;
int32 pad[8];
} disk_super_block;
其中的magic number的作用是作為資料結構驗證點,當檔案系統被mount時,系統會去驗證magic number是否正確,以判斷檔案系統是否有毀損。
block_size欄位用以定義block的大小,而block_shift是記錄位移的量,以取得正確位址。num_blocks與used_blocks這兩個欄位用來記錄vloume中有效的block數量,以及有多少block在使用中。inode_size定義i-node的大小,blocks_per_ag欄位是用來記錄在每個allocation group中bitmap block的數量,而ag_shift則是定義blocks_per_ag的位移值。num_ags欄位記錄的是allocation group的數量,flages是用來記錄superblock的狀態。在superblock中也需要定義journal所使用的block範圍,而這些資訊就記錄在log_start與log_end中,分別代表journal block的起始與結束位址。最後root_dir與indices這兩個欄位,跟目錄與index的位址。