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”

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

  • 相关阅读:
    關于招聘新人
    JS在线打字练习 PHP
    useragent 分析 PHP
    webSql工具 PHP
    《网站开发人员应该知道的61件事》[解读] PHP
    HTMLCSS速查 PHP
    Flash文字转图片 PHP
    Flash简易文件上传 PHP
    Google 字体 API PHP
    Google 二维条码 API PHP
  • 原文地址:https://www.cnblogs.com/sduzh/p/7062119.html
Copyright © 2011-2022 走看看