了解Ext-2文件系统:第2章

根据最后的讨论(第1章),我们将尝试读取组描述符。

首先,我们将尝试了解什么是组描述符。

众所周知,超级块和组描述符表在每个块组中都是重复的。

组描述符表是组描述符的数组

每个块组都有自己的组描述符。 并按顺序存储在组描述符表中。

换句话说,每个块组都具有所有组描述符,因为描述符表被复制到每个块组中。

这意味着,如果我们查看块组3,则可以在描述符表的3位置找到它的组描述符。

在本文中,我们将从表中检索第一个组描述符结构。 因此,毫无疑问,它将代表第一个街区组。

让我们看看单个组描述符可以包含哪些信息:

bg_block_bitmap:块位图的块号

bg_inode_bitmap:索引节点位图的块数

bg_inode_table:第一个inode表块的块号

bg_free_blocks_count:组中的可用块数

bg_free_inodes_count:组中空闲索引节点的数量

bg_used_dirs_count:组中的目录数

bg_pad:与单词对齐

bg_reserved:空出以填充24个字节

组描述符在Linux内核中表示为“ ext2_group_desc”结构。

上述字段属于同一结构。

从上面的信息可以看出,它将为我们提供有关块组的所有信息。

让我们看看如何编写代码以检索组描述符结构。

第一个块是引导块:1024 B

后来居住超级街区

我们假设块大小为4096。

以后可以找到4096 B组描述符表。

因此,我们将打开任何ext2分区并查找4096个字节,读取第一个组描述符。

 
    #include<linux/ext2_fs.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<stdio.h>
    #include<unistd.h>
    #include<fcntl.h>
    #include<stdlib.h>
    #include<string.h> 
    int main()
    {
        char *buff = (char *)malloc(sizeof(struct ext2_group_desc)); 
        struct ext2_group_desc * gdesc = (struct ext2_group_desc *)malloc(sizeof(struct ext2_group_desc)); 
        //open any partition for testing,must be ext2/ext3.
        int fd = open("/dev/hda3",O_RDONLY); 
        //skip the boot block and super block
        lseek(fd,4096,SEEK_CUR); 
        //read the raw data from disk to buff
        read(fd,buff,sizeof(struct ext2_group_desc)); 
        //copy buffer to gdesc, you can use casting or union for this.
        memcpy((void *)gdesc,(void *)buff,sizeof(struct ext2_group_desc)); 
        //At this position you can be assured that you read group descriptor successfully.            
        close(fd);     
        return 0;
    }  

From: https://bytes.com/topic/unix/insights/773180-understanding-ext-2-file-system-chapter-2-a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值