- 論壇徽章:
- 0
|
正好前些天也把EXT2文件系統(tǒng)看完了,大神談不上,不過可以嘗試回答你的問題,ext2_group_desc是塊組描述符,每個sb中都包含了若干個塊組描述符,所以每個sb中都包含有塊組描述符的信息,具體請看:
super_block-》ext2_sb-》s_group_desc,其中s_group_desc就是存放在磁盤前幾個block中的塊組描述符數(shù)組,所以通過super block可以找到塊組,但是從塊組描述符中確實找不到super block的信息,而且也沒有這個必要吧。
第二個問題,我以下面的例子來回答,
gdp = (struct ext2_group_desc *) bh->b_data;//找到了inode對應的塊組描述符保存在磁盤上的block的buffer,
/*
* Figure out the offset within the block group inode table
*/
offset = ((inode->i_ino - 1) % EXT2_INODES_PER_GROUP(inode->i_sb)) *EXT2_INODE_SIZE(inode->i_sb); //計算該inode在塊組內的offset(單位byte)。
block = le32_to_cpu(gdp[desc].bg_inode_table) +(offset >> EXT2_BLOCK_SIZE_BITS(inode->i_sb)); //計算該inode所在塊組中的block位置
if (!(bh = bread (inode->i_dev, block, inode->i_sb->s_blocksize))) { //讀出該block
ext2_error (inode->i_sb, "ext2_write_inode",
"unable to read inode block - "
"inode=%lu, block=%lu", inode->i_ino, block);
return -EIO;
}
offset &= EXT2_BLOCK_SIZE(inode->i_sb) - 1; //計算出該inode在一個block內的offset。
raw_inode = (struct ext2_inode *) (bh->b_data + offset);//讀出該inode在磁盤上的對應物 raw_inode。
從上面的流程,應該可以看出bg_inode_table的作用吧,就是在塊組中用來查找raw inode的,bg_inode_table本身的含義是塊組中第一個inode所對應的block位置。
也許有些地方用詞不是太準確,請見諒。 |
|