当前位置:文档之家› Linux文件系统分析

Linux文件系统分析

因为 ext2 库的接口十分抽象和通用,无需考虑物理细节,所以编写需要直接存取 ext2 文件系统的程序 很容易。例如,将 BSD 转储和备份恢复的特性转移到 Iinux 平台时,只需做少量的修改:一些依赖于文件系统 的函数需要转移到 Ext2 库。
Ext2 库提供许多种操作。第一类操作是与文件系统相关的操作。程序可以用这些操作打开关闭文件、 读写位图、在磁盘上创建新的文件系统,也可管理坏盘块列表。第二类操作用来控制目录,它们能建立和展
/ !文件卷 I 节点数! / / !文件卷逻辑块总数! / / !为超级用户保留的块数! / / !空闲块数! / / !空闲 I 节点数! /
! 收稿时间:2002 - 03 - 20
unsigned Iong s - first - data - bIock; …
/ !第一个数据块数! /

引导块 超级块 "节点位图 组描述符


I 节点表
数据区
当文件卷为可引 导 的 系 统 时,引 导 块 的 内 容 为 引 导 信 息,否 则 内 容 为 空。 文 件 系 统 都 以 引 导 块( boot
bIock)开始,引导块中包含有可执行代码。启动计算机时,硬件从引导设备将引导块读入内存,转而执行其
1 Linux 文件系统布局
Ext2 是 Linux 文件系统类型,它很好地继承了 Unix 文件系统的主要特色,如普通文件的三级索引结构, 目录文件的树型结构和把设备作为特别文件等。Linux 文件系统是一个逻辑的自包含的实体,它含有 I 节 点,目录和数据块。Linux 将整个磁盘划分成若干分区,每个分区被当做独立的设备对待;一般需要一个主分 区 Native 和一个交换分区 swap . 主分区用于存放文件系统,交换分区用于虚拟内存。主分区内的空间又分成 若干个组。每个组内都包含有一个超级块的拷贝,以及 I 节点和数据块等信息。如下图所示,ext2 文件卷的 逻辑块大小可到 1 K,2 K 和 4 K 三种,当块大小为 1 K 时,每组内包含 1024!8 = 8192 个逻辑块。文件卷逻辑 块的磁盘存储空间安排如下:
区后存放在 Struct ext2 - inode 中。 Struct ext2 - node {
ul6 i - mode; ul6 i - uid; u - 32 i - size;
/ !文件模式! / / !文件主用户标识符! / / !文件大小! /
u - 32 i - atime
/ !最佳访问文件时间! /
魔数和其它信息,以决定是否安装其它文件系统,如 windows9x 文件系统。
!位图
Linux 文件系统用位图来管理磁盘块和 I 节点,位图分为块位图和 I 节点位图。块位图占用一个磁盘块, 当某位为“l”时,表示磁盘块空闲,为“0”时表示磁盘块被占用。I 节点位图也占用一个磁盘块,当它为“0”时, 表示组内某个对应的 I 节点空闲,为“l”时表示已被占用。位图使系统能够快速地分配 I 节点和数据块,保 证同一文件的数据块能在磁盘上连续存放,从而大大地提高了系统的实时性能。
存中,存放在 Struct ext2 - super - bIock 结构中。 Struct ext2 - super - bIock {
unsigned Iong s - inodes - count; unsigned Iong s - bIocks - count; unsigned Iong s - r - bIocks - count; unsigned Iong s - free - bIocks - count; unsigned Iong s - free - inodes - count;
代码。引导块代码开始操作系统本身的加载过程。一旦系统启动之后,引导块不再使用。
超级块(Super - bIock)中含有文件系统的布局信息,其主要功能是给出文件系统不同部分的大小。如给 定块大小,I 节点总数,每组内 I 节点数,空闲块和 I 节点数等。在 Linux 启动时,根设备中的超级块被读入内
/ !对应的 I 节点! / / !目录项长度! / / !名字长度! / / !文件名! /
当要删除一个目录时,要将目录项中的 I 节点置为“0”,并把目录项从链表中删除,目录项所占用的空间
被合并到前一个目录项空间中。
5 Ext2 程序库
Ext2 程序库提供了大量的例程,能通过直接控制物理设备来操作文件系统。Ext2 程序库使用软件抽象 技术以达到最大限度的代码重用。例如,程序库提供了许多不同的可重复调用例程(iterator). 程序可以简单 将函数传递给 ext2fs - bIock - iterat(e ),它能在每个 inode 中被调用。另一种 iterator 函数为同一个目录中的每 个文件调用一个用户定义的函数。许多 Ext2 例程(mke2fs、s2fsck、tune2fs、dumpe2fs 、debugfs)使用该 Ext2 程序 库。这大大简化了这些例程的维护,因为 Ext2 升级后的新特性只需改变 ext2 库就可以反映出来。因为 Ext2 库可编译成共享库映像文件,所以这种代码重用减小了二进文件的长度。
文章编号:1009-019(3 2002)04-0135-03!
Linux 文件系统分析
刘章仪
(贵州工业大学计算机及信息技术学院,贵州 贵阳 550003)
摘 要:通过对 Linux 文件系统的剖析,揭示它的内部数据结构,分析它的工作原理。
关键词:Linux 操作系统;I 节点;位图
中图分类号:TP316 . 9;TP316 . 81
文献标识码:A
0引言
Linux 属于 Unix 家族,源于 Minux,兼容 POSIX 标准,是九十年代在 Intenet 上发展起来的著名操作系统 (自由软件)。它提供所有源代码,特别适合教学。Linux 中包含了大量 Unix System 5 和 BSD4 . 3 操作系统功
能,能运行在 32 位 PC 及其兼容机上。与 Unix 相比,它是新一代操作系统,具有先进内核,支持多种网络协 议,可作为网络服务器。具有十分广阔的应用前景。
在创建文件时,文件系统必须在块位图中查找第一个空闲 I 节点,把它分配给这个新创建的文件。在该 空闲 I 节点分配使用后,就需要修改指针,使它指向下一个空闲 I 节点。同样地,I 节点被释放后,则需要修 改指向第一个空闲 I 节点的指针。
" # 节点表
I 节点表占用若干个磁盘块,它几乎与标准 Unix 的 I 节点表相同。每个 I 节点占 l28 个字节,读入缓冲
u - 32 i - stime;
/ !文件创建时间! /
u - 32 i - mtime;
/ !文件最近修改时间! /
u - 32 i - dtime;
/ !文件删除时间! /
ul6 i - Iinks - count; ul6 i - gid; u32 i - bIocks; u32 i - fIag; u32 i - bIoc[d EXT2 - N - BLOCKS]; u32 i - fiIe - acI; u32 i - dir - acI; …
在软盘用作 Linux 文件系统之前,实用程序 ms
/ dev / fd0
l440
该命令在软驱中的软盘上创建 l400 个块的空文件系统,该命令还在超级块中写入魔数(s - magic),表明 该文件系统是一个有效的 Linux 文件系统。魔数能表明文件系统的版本。Mount 系统调用检查超级块中的
存储区。
4 目录结构
ext2 采用动态方式管理它的目录,用一个单项链表示它的目录项,每个目录项的数据结构为:
Struct ext2 - dir - entry {
- u32 inode; - ul6 inode; - ul6 inode char nam[e EXT2 - NAME - LEN]; }
开目录,增加和移走目录项,能析构文件名,找到 inode 号,也能由 inode 号确定文件名。最后一类操作是与 inode 相关的,它能扫描 inode 表,读写 inode,扫描一个 inode 中所有的盘块。分配和回收例程可以帮助用户程 序分配和释放盘块和 inode .
由于 Ext2 核心代码包括多项性能优化,而且 Ext2 也能实现分配优化。所以它们能大大改善 I / 0 速度, 提高 I / 0 组织的灵活性及编程效率。因此,Ext2 核心代码及 Ext2 程序库为开发嵌入式系统及实时应用系统 提供了广泛的基础和手段。
参考文献: [l]陈向阳,方法 . Linux 实用大全第 2 版[M]. 北京:科学出版社,l998 .
Analysis of the Linux file system
LIU Zhang-yi (CoIIege of Computer & Information TechnoIogy,GUT,Guiyang 550003,China) Abstract:This paper anaIyzes the Linux fiIe system,reveaIs its internaI data structure and expounds its working principIe . Key words:Linux operating system;I nodes;bitmap
/ !文件连接计数! / / !文件主的用户组标识符! / / !文件的总块数! / / !文件标志! / / !文件地址块索引表! / / !文件访问控制表! / / !目录访问控制表! /

I 节点表中的模式信息,给出了文件的类型:普通文件,目录文件,块设备文件,字符设备文件,管道文件
等。I 节点的链接数域记录了有多少个目录指向这个 I 节点。这样文件系统就知道什么时候该释放文件的
相关主题