linux文件系统通常由4部分构成:
引导块 超级块 索引节点表(inode table) 数据块
引导块:用来存放文件系统的引导程序,用于系统引导或启动操作系统。如果一个文件系统不安放操作系统,它的引导块将为空。
超级块:用来描述本文件系统管理的资源,它包含空闲索引节点表和空闲数据块表,具体说明文件系统的资源使用情况。
索引节点表:用来存储文件的控制信息,每个节点对应一个文件
数据块:磁盘上存放数据的磁盘块,包括目录文件和数据
超级块用于描述一个文件系统的资源状态,在文件系统的存取和管理文件上起着至关重要的作用。例如:文件系统的大小,空闲空间的位置信息。
它由以下字段构成:
- 文件系统的规模(如inode数目,数据块数目,保留块数目和块的大小等等)
- 文件系统中空闲块的数目
- 文件系统中部分可用的空闲块表
- 空闲块表中下一个空闲块号
- 索引节点表的大小
- 文件系统中
- 空闲索引节点表数目
- 文件系统中部分空闲索引节点表
- 空闲索引节点表中下一个空闲索引节点号
- 超级块的锁字段
- 空闲块表的锁字段和空闲索引结点的锁字段
- 超级块是否被修改的标志
- 其他字段
注:锁字段是为了保证互斥操作
linux在关机时要求先将缓冲区数据写回文件系统,并拆卸该文件系统,如果没有拆卸文件系统就关机,很可能导致数据丢失,所以在安装一个文件系统时会坚持超级块中的字段,如果上次没有做拆卸,就要对文件系统完整性做检查
索引节点(inode)是linux文件系统最基本的概念,一个文件的控制信息通常由inode给出,每个inode对应着一个文件。在inode中包含有文件数据在磁盘上存储的位置信息,还包含有存取权限,文件所有者及存取时间等信息。索引节点存储在磁盘上,内核把inode读进内存索引节点来操作它和它所对应的文件。为了便于理解,我们把存储在磁盘上的inode称作磁盘索引节点,而把它在内存中的映像称作内存索引节点。
磁盘索引节点由如下字段构成:
- 文件类型:文件可以是普通文件,目录文件,链接文件,设备文件,管道文件
- 文件链接数:记录了引用该文件的目录表项数,即记录了有多少个文件名指向该文件
- 文件属主标识:指出该文件的所有者id
- 文件属主的组标识:指出该文件所有者属组的id
- 文件的访问权限:系统将用户分为文件属主,同组用户和其他用户三类,每类用户可能获得对文件一种或几种访问权限。要特别指出的是,目录文件的执行权限是指修改目录的权力
- 文件的存取时间:包括文件最后一次被修改的时间,最后一次被访问的时间和最后一次修改索引节点的时间
- 文件的长度:以字节表示的文件长度
- 文件的数据块指针:对文件操作的当前位置指针
索引节点中并不包含文件名,文件名信息存放在目录文件中。在系统中定义了stat结构体(/usr/include/sys/stat.h文件中)来存放这些信息
linux系统中不同类型的文件:
- 普通文件:普通文件又分为文本文件(以字符表示)和二进制文件(不能直接查看,需要用到相关的软件)
- 目录文件:包括文件名和索引节点号
linux的文件系统对文件管理是通过索引节点来进行的,目录文件提供文件名和索引节点之间的转换手段,目录文件是由系统直接管理的,用户只能读目录文件,不能直接写目录文件
每个目录文件的前两项是两个特设的文件 ” . ” , ” . . ” ,其中 “ . ” 对应该目录本身的索引节点 ,“ . . ” 对应其父目录的索引节点。如果一个目录中只包含这两个文件,则该目录为空目录
当用户访问某个文件时,系统需要找到它所对应的索引节点,目录文件建立了文件名和索引节点号之间路径的路线。比如:“ . ./a/b ”,它要从当前目录开始,到达其父目录,再到达其父目录的子目录a,访问那个目录中的名为b的文件。为此,系统要完成如下步骤:
- 检索当前目录的索引节点
- 通过当前目录的索引节点,找到当前文件,查出父目录 “ . . ”
- 检索 ” . . “ 的索引节点
- 通过父目录 ” . . “ 的索引节点,检索父目录文件,查出文件 ” a “ 的索引节点号
- 检索 ” a “ 的索引节点
- 利用 ” a “的目录索引节点中的信息,检索 ” a “ 目录文件,查到 ”b “ 的索引节点号
- 检索文件 ” b “ 的索引号
- 访问文件 ” b “
- 链接文件:用户在某个目录下需要使用其他目录下的文件时只用在该目录下建立一个链接文件指向所要调用的文件,链接文件可分为:硬链接文件和符号链接文件
- 设备文件:linux中最特殊的文件,可以让linux轻松访问外部连接设备,通常linux的设备文件都放在/dev目录下,设备文件使用设备的主设备号和次设备号来指定某外部设备,主设备号用于说明设备类型,次设备号用于说明具体设备。eg:以IDE硬盘为第一主盘,它的第三个分区的设备文件就是/dev/hda3,其中,hd是主设备号,a3是次设备号,根据访问数据方式的不同,设备文件又可以细分为两种类型:块设备文件:以固定长度的块访问文件的
以指定字符(通常是一个字符)访问数据的 - 管道文件:用于不同进程间的信息传递,建立在高速缓存中,采用先进先出的规定处理其中的数据,可分为:有名管道和无名管道