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”

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

时间: 2024-10-12 19:28:18

ext2文件系统学习(二)—— 目录磁盘结构的相关文章

linux ext2 文件系统学习

Linux  ext2文件系统理解 硬盘组成: 硬盘由多个圆形硬盘片组成.按照硬盘片能够容纳的数据量分为单盘和多盘.硬盘的数据读取主要靠机械手臂上的磁头,在机械手臂上有多个磁头.机械手臂不动硬盘旋转一周划过的路径就是磁道.由于在一块硬盘上有多个硬盘片重叠放置,所以在硬盘旋转的时候在不同硬盘片上画出了多个相同的磁道,这些相同的磁道组成了柱面.柱面是分区的最小单位.由圆形向外画直线又可以将磁道划分为扇区,扇区是数据存储的最小单位,一个扇区的大小约为512字节. 磁盘容量 = 柱面 * 磁头 * 扇区

ext2文件系统学习(一)

源码分析网上太多了,不写了,记录简单的实践步骤: 1. 创建ext2文件镜像并映射 cd /tmp dd if=/dev/zero of=ext2-1M.img bs=1024 count=1024 mkfs.ext2 ext2-1M.img mkdir ext2 sudo mount -o loop ext2-1M.img ext2 2. 在ext2文件系统内创建一个普通文件,方便测试 cd ext2 touch test echo "test content" > test

JFinal Web开发学习(二)目录、架构、package设计

package分类 config是JFinal的项目配置 controller是控制器 handler可以设置全局处理器,例如判断用户请求中是否直接请求 FreeMarker的模板文件ftl或者html的后缀,重定向到404 interceptor拦截器,例如后台admin的每项操作拦截判断admin是否有权限或者是否已经登录 model.base用于JFinal的Generator生成器自动生成数据库映射基础模型类 model用于继承基础模型类的dao操作 routes用于设置单独路由配置,例

3-1复习最短路径算法,3-2学习二叉数结构

第7章,神奇的树. 第一节,树的特点. 第二节,二叉树. 第三节,优先队列--堆(特殊的完全二叉树) 最小堆:All node-father smaller than node-sons 最大堆:相反. 原文地址:https://www.cnblogs.com/chentianwei/p/8492545.html

Linux - EXT2文件系统

文件系统特性 举例来说,windows 98 以前的微软操作系统主要利用的文件系统是 FAT (或 FAT16),windows 2000 以后的版本有所谓的 NTFS 文件系统,至于 Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)这一个.此外,在默认的情况下,windows 操作系统是不会认识 Linux 的 Ext2 的. 那么文件系统是如何运行的呢?这与操作系统的文件数据有关.较新的操作系统的文件数据除了文件

EXT2文件系统定位

20125126陈时军 EXT2文件系统: Linux 中最普遍使用的文件系统是 Ext2,但 Linux 也能够支持 FAT.VFAT.FAT32.MINIX 等不同类型的文件系统.磁盘在经过分区之后,单个的物理磁盘就被划分为多个逻辑分区,每个分区上可存在一个文件系统.我们知道,块设备实际是可以包含文件系统的设备,不管块设备的具体构造如何,Linux 文件系统均将它们当作线性块的集合而访问.每个块设备驱动程序的任务,就是将逻辑块的请求转化为对应块设备可以理解的命令.类似地,对文件系统来说,不管

Linux系统的Ext2文件系统

下面我们正是你介绍Ext2文件系统 Ext2文件系统使用以inode为基础的文件系统. 文件系统一开始将inode与block规划好了,除非重新格式化,否则inode与block固定后就不再变动,但是当inode与block数量过多时,就不易于管理.因此Ext2在格式化的时候基本上是区分为多个块组(block group),每个块组都有独立的/inode/block/superblock系统.Ext2格式化后如图 在整体的规划中,文件系统最前面有一个启动扇区(boot sector),这个启动扇

Linux磁盘管理——Ext2文件系统

前言 通常而言,对于一块新磁盘我们不是直接使用,而是先分区,分区完毕后格式化,格式化后OS才能使用这个文件系统.分区可能会涉及到MBR和GPT问题.至于格式化和文件系统又有什么关系? 这里的格式化指的是高级格式化,由于每种OS所设置的文件属性/权限并不相同, 为了能够操作这些文件,就需要对partion进行格式化,以满足OS能够利用的“文件系统格式(filesystem)”. 上面说对partion进行格式化,这种说法不严谨. 对于早期技术而言,可以认为Partion与FS是1:1的关系,这两种

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con