zoukankan      html  css  js  c++  java
  • ext2文件系统学习(二)—— 目录磁盘结构

    创建镜像、mount等操作和上一篇一样,测试目录结构如下:

    一些文件系统信息如下:

    • Block size:             1024
    • Inodes per group:  128
    • Inode size:             128
    • Block bitmap at  6
    • Inode bitmap at 7
    • Inode table at 8-23 

     下面看看文件系统根目录的结构,ext2的根目录的索引节点号是2,根据上面的信息可以计算出根目录的索引节点地址是0x002080。如果是用vim打开的镜像文件,可以通过以下命令计算地址:

    :echo printf("%x", 8*1024+128)

    文件内容如下:

    对照ext2_inode结构定义:

    • i_mode: 0x41ed 对照这里可知文件格式为EXT2_S_IFDIR
    • i_uid: 0 
    • i_size: 0x000400,也就是1K (可以通过ls -ld /tmp/ext2验证)
    • i_block: 0x000018,说明该目录只占用了一个block,地址为0x18 * 1024=0x6000,这里也就是根目录的内容

    0x6000地址处内容如下:

    ext2的目录是一个特殊的文件,文件内容是多个ext2_dir_entry_2结构的目录项,每个目录项是文件名和索引节点的集合。

    对照ext2_dir_entry_2的结构,第一个目录项信息如下:

    • inode : 2 
    • rec_len: 0x000C
    • name_len: 0x01 
    • file_type: 0x02,表示目录
    • name:  0x2E, 也就是“."

    因为上一个目录项rec_len是0x0C,所以下一个目录项地址为0x600C,对应目录项信息如下:

    • inode: 2
    • rec_len: 0x000C
    • name_len: 0x02
    • file_type: 0x02,表示目录
    • name: 0x2E,0x2E,也就是“..”

    下一个目录项地址为上一个目录项地址加上上一个目录项的rec_len,也就是0x600C + 0x0C = 0x6018,信息如下:

    • inode: 0x0B,11
    • rec_len: 0x14,20
    • name_len: 0x0A,10
    • file_type: 0x02, 2,表示目录
    • name: 0x6C,0x6F, ..., 也就是“lost+found”

    以此类推就可以找到所有根目录下的目录项

  • 相关阅读:
    通过构造函数检查生成对象个数
    动手动脑二
    产生随机数的几种方法
    素数输出
    递归实现回文串
    java的方法重载
    统计单词频率
    四则运算和随机验证码
    微信小程序--家庭记账本开发--04
    微信小程序--家庭记账本开发--03
  • 原文地址:https://www.cnblogs.com/sduzh/p/7062119.html
Copyright © 2011-2022 走看看