转自:http://blog.sina.com.cn/s/blog_590be5290100ql1w.html
linux文件系统是Linux系统的心脏部分,提供了层次结构的目录和文件。文件系统将磁盘空间划分为每1024个字节一组,称为块(也有用512字节为一块的,如:SCOXENIX)。编号从0到整个磁盘的最大块数。
全部块可划分为四个部分,块0称为引导块,文件系统不用该块;块1称为专用块,专用块含有许多信息,其中有磁盘大小和全部块的其他两部分的大小。从块2开始是i节点表,i节点表中含有i节点,表的块数是可变的,后面将做讨论。i节点表之后是空闲存储块(数据存储块),可用于存放文件内容。
文件的逻辑结构和物理结构是十分不同的,逻辑结构是用户敲入cat命令后所看到的文件,用户可得到表示文件内容的字符流。物理结构是文件实际上如何存放在磁盘上的存储格式。用户认为自己的文件是边疆的字符流,但实际上文件可能并不是以边疆的方式存放在磁盘上的,长于一块的文件通常将分散地存放在盘上。然而当用户存取文件时,linux文件系统将以正确的顺序取出各块,给用户提供文件的逻辑结构。
当然,在linux系统的某处一定会有一个表,告诉文件系统如何将物理结构转换为逻辑结构。这就涉及到i节点了。i节点是一个64字节长的表,含有有关一个文件的信息,其中有文件大小、文件所有者、文件存取许可方式,以及文件为普通文件、目录文件还是特别文件等。在i节点中最重要的一项是磁盘地址表。
该表中有13个块号。前10个块号是文件前10块的存放地址。这10个块号能给出一个至多10块长的文件的逻辑结构,文件将以块号在磁盘地址表中出现的顺序依次取得相应的块。当文件长于10块时又怎样呢?磁盘地址表中的第11项给出一个块号,这个块号指出的块中含有256个块号,至此,这种方法满足了至多长于266块的文件(272384字节)。如果文件大于266块,磁盘地址表的第12项给出一个块号,这个块号指出的块中含有256个块号,这256个块号的每一个块号又指出一块,块中含256个块号,这些块号才用于取文件的内容。磁盘地址中和第13项索引寻址方式与第12项类似,只是多一级间接索引。
这样,在linux系统中,文件的最大长度是16842762块,即17246988288字节,有幸是Linux系统对文件的最大长度(一般为1到2M字节)加了更实际的限制,使用户不会无意中建立一个用完整个磁盘区所有块的文件。
inode
提到inode,我们不得不先介绍硬盘的整体结构。硬盘中包含多个硬盘盘片,硬盘盘片为圆形,每个硬盘盘片都有一个可以读写的磁头(Head),将这个磁头固定,使硬盘盘片旋转一周,所走轨迹就是磁道(Track)。硬盘内所有盘片的相同磁道号的集合成为磁柱(Cylinder)。每一磁道被划分成许多区域,每个区域叫一个扇区(Sector)。扇区是硬盘的最小存储物理量,一个扇区的存储容量大约是512字节(约0.5K)。
知道了硬盘的大体结构之后,再来谈谈怎么进行硬盘分区。进行硬盘分割的最小单位是磁柱,分割完之后自然就是格式化(format)。在Linux中进行格式化必须考虑Block与inode,Block还好理解,它是磁盘可以记录的最小单位,是由数个扇区组成,所以大小通常为n*512Bytes,例如4K。
那么inode是什么呢Block是记录文件内容的区域,inode则是记录该文件的属性及其放置在哪个Block之内的信息。所以,每个文件都会占用一个inode。当Linux系统要查找某个文件时,它会先搜索inode table找到这个文件的属性及数据存放地点,然后再查找数据存放的Block进而将数据取出。inode数量在一开始已被设定好,其设定方式通常是"硬盘大小/一个容量",这个容量比Block大一些较佳,例如刚才将Block设为4K,那么这个容量可以设为8K左右。所以,一块1GB的硬盘如果以8K 大小划分它的inode数,则会有131072个inode。一个inode的大小为128Byte,这样,我们就可以清楚地知道,一个分区被格式化为一个文件系统之后,基本上它一定会有inode table与数据区域两大块,一个用来记录文件的属性信息与该文件存放的Block块,一个用来记录文件的内容。
创建一个文件后,会同时创建一个inode和一个block,inode存放的是文件的属性信息,但是不包括文件名,并存放所对应数据所在的block块的地址的指针;block存放文件的数据,每个block最多存放一个文件,而当一个block存放不下的情况下,会占用下一个block。
linux里文件的文件名、文件属性、文件内容是分别存储的:文件名存放在目录项(即dentry)中,文件属性存放在inode中,一般情况下,每个inode占用128Bity磁盘空间,文件内容存放在数据块中。
block块可以用mkfs.ext3 -b来制定快的大小,每个block块最多可存放一个文件,所以一般block块的大小设置要根据我们服务器的应用了设置,如果这个服务器较多用来存放一些多的小文件,那就可以把block块的大小设置的小一些,不至于浪费空间,而当存放的都是大数据时就需要把block设置的大些,这样可以减少对磁盘block的读取次数,也可以减少inode的记录负担。
block越大,inode越少,适合存储大文件的文件系统;block越小,inode越多,适合存储文件多而小的文件系统。
系统运行时,inode和block会在修改后内存与磁盘做一个同步,我们用ls -li列出来的内容这是内存中的暂存,所以有时候系统非正常的关机会导致block和inode的不同步问题。
相关推荐
每个文件在Linux文件系统中都有一个唯一的标识——I节点,它包含了文件的所有元数据,如文件大小、权限、修改时间等。超级块则存储了文件系统的全局信息,如总块数、空闲块列表、I节点表等。 4. 文件操作: 文件...
Linux 文件系统通过把 i 节点和文件名进行连接, 当需要读取该文件时, 文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的 i 节点号,通过该 i 节点的磁盘地址表把分散存放的文件物理块连接成...
* Linux 文件系统通过 i 节点把文件的逻辑结构和物理结构转换的工作过程。 * i 节点是一个 64 字节长的表,表中包含了文件的相关信息,如文件大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。 * i ...
Linux VFS采用超级块(super_block)和索引节点(inode)的概念来描述文件系统。值得注意的是,这里的super_block和inode并非物理文件系统中的具体数据结构,而是VFS为适应不同文件系统的特点而抽象出来的通用结构。在...
"走进Linux世界(第五讲)——Linux文件管理.pdf" 本讲座主要介绍了Linux系统中的文件管理 koncepts,包括常用命令格式、文件类型、目录结构、文件系统及其安装。Linux提供了几种不同的用户界面,其中命令界面是...
"Linux文件系统模拟"是一个操作系统课程设计项目,旨在让学生理解并实现一个简单的文件系统——MinIFS(Mini File System)。这个项目通常会涵盖文件系统的基本概念、数据结构以及相关的操作,如文件创建、读取、...
2. 索引节点(Inode):在Linux和其他类Unix系统中,每个文件或目录都由一个称为索引节点的数据结构表示,它存储了文件的元信息,如文件所有者、权限、创建和修改时间以及文件大小,但不包含文件的实际数据。...
在 Linux 中,文件系统通过 i 节点把文件的逻辑结构和物理结构进行转换。i 节点是一个 64 字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。在 i...
* 文件系统的逻辑结构和物理结构转换:Linux 通过 i 节点表将文件的逻辑结构和物理结构进行转换。 二、进程管理 * 进程的启动方式:手工启动和调度启动两种方式。手工启动分为前台启动和后台启动两种方式。调度...
Linux文件系统是操作系统与硬件之间的重要桥梁,它负责管理存储设备上的数据,而设备驱动则是使硬件设备能够与操作系统交互的软件接口。本文将详细介绍这两个领域的核心概念、工作原理以及相关知识点。 在Linux系统...
本项目"模拟Linux文件系统含源码及报告"旨在深入理解和实现一个类似Linux的命令行文件系统,这对于学习操作系统的原理和实践编程技能具有极大的价值。 在描述中提到的“高度模仿Linux命令行”,意味着这个项目可能...
例如,系统文件、库文件、用户文件、源文件、目标文件、可执行文件、普通文件、目录文件和特殊文件(如Linux系统中的设备文件)。 3. 文件系统是一组管理文件和目录的软件,以及它们在磁盘上的组织方式。每个磁盘...
"操作系统——文件系统PPT学习教案.pptx" 本文档是关于操作系统中的文件系统的...此外,本文档还介绍了 Linux 文件系统、Ext 系列文件系统、虚拟文件系统等内容,为学习文件系统提供了详细的理论基础和实践应用指南。
- **3.1.2 组描述符和位图**:用于管理文件系统中的块和索引节点。 - **3.1.3 磁盘索引节点表**:存储文件的索引节点。 **3.2 VFS接口数据结构** Ext2与VFS的接口数据结构包括: - **3.2.1 Ext2 超级块对象**:...
### 从文件 IO 看 Linux 的虚拟文件系统 #### 引言 Linux 系统以其高度灵活性和可扩展性闻名,在文件系统方面更是如此。Linux 支持多种不同的文件系统,例如 ext2、ext3、ext4、vfat 等,并且能够在这些不同的文件...
首先,inode(索引节点)是Linux文件系统中的一种数据结构,它存储了文件的相关属性,如文件的所有者、权限、大小、创建时间等。特别地,inode不包含文件的实际内容,而是通过一系列指针指向文件的实际数据所在的...
在这个实验中,我们将模仿Linux文件系统的数据结构来构建一个简易的文件系统。 首先,我们需要理解文件系统的基本概念。文件系统是存储设备上的逻辑组织,它将磁盘空间划分为多个区域,如inode区和数据块区。在...
1. **i节点的定义**:在Linux文件系统中,每个文件都是通过一个称为i节点(Inode)的数据结构来标识的。i节点存储了文件的元数据,如文件大小、创建时间、权限等。 2. **i节点的重要性**:i节点是文件系统的核心组成...
- **i节点(Inode)**:每个文件在文件系统中都有一个对应的i节点,存储了文件的所有元数据,包括文件大小、权限、修改时间、拥有者信息以及文件内容所在的物理块位置。 - **超级块(Superblock)**:文件系统的...
- **第2 ~ IB_num + 1块**:i节点块,用于存储文件元数据。 - **第IB_num + 2 ~ B_num - 1块**:数据块,用于存放文件的实际内容。 #### 四、关键数据结构与类设计 为了实现上述文件系统,作者定义了多个关键的...