文件系统基本概念 gaunthan Posted on May 28 2016 ? File System ? ## 概述 **文件系统**是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的哪个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。 文件系统是一种用于向用户提供底层数据访问的机制。它将设备中的空间划分为特定大小的块(扇区),一般每块512字节。数据存储在这些块中,大小被修正为占用整数个块。由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。 不过,文件系统并不一定只在特定存储设备上出现。它是数据的组织者和提供者,至于它的底层,可以是磁盘,也可以是其它动态生成数据的设备(比如网络设备)。 ## 底层概念 ### superblock **superblock**(超级块)是记录整个文件系统相关信息的地方,它记录的信息主要有: * block与inode的总量 * 未使用的和已使用的block、inode数量 * block和inode的大小(block为1、2、4K,inode为128B) * 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等 * 一个valid bit数值:0代表文件系统已被挂载;1代表未被挂载 ### inode #### 定义 **inode**是用来存放文件及目录基本信息,包含时间、文件名、使用者及群组等的**索引结点**,是 UNIX 类操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息。具体有: * 存取模式(read/write/excute) * 拥有者与群组(owner/group) * 容量(capacity) * 建立或状态改变时间(ctime) * 最近一次读取时间(atime) * 特定标志(flag,如SetUID) * 真正内容的指向(pointer) #### 特点 * 每个inode的大小固定,如为128字节 * 每个文件当且仅会占用一个inode * 文件系统最大文件数与inode的数量有关 * 系统读取文件时,先找到该文件的inode,分析inode所记录的权限是否与用户权限符合。当权限满足后才进行实际的读取操作 #### 结构示意图  ### block **block**是用来放置数据的地方,它的大小是在格式化存储介质时就确定的了。在文件系统中,每个block都有编号,以方便inode记录。 block具有以下特点: * block的大小与数量在格式化时就已经确定,不能改变 * 每个block最多只能放置一个文件的数据 * 如果文件的大小大于block的大小,那么一个文件将占据多个block(最后一个块往往没有使用完全) * 如果文件的大小小于block的大小,那么该block的剩余容量不能再被使用(这部分容量称为内部碎片) ### block bitmap block bitmap(块位图)记录了已使用的和未使用的块号,这样当创建文件时系统可以正确选择到空的block块。删除文件时要将占用的区块标识修改为未使用。 ### inode bitmap inode bitmap的作用与block bitmap类似,记录了已使用的和未使用的inode号。 ### Filesystem Description Filesystem Description(文件系统描述)描述了每个block group的开始与结束的block号,以及说明每个区段(superblock、block bitmap、inode bitmap)分别位于哪一个block号之间。在Linux下可通过命令`dumpe2fs`来查看。 ## References - 鸟哥. 鸟哥的 Linux 私房菜, 基础学习篇. 第 3 版 [M]. 人民邮电出版社, 2010. 赏 Wechat Pay Alipay FAT32 文件格式标准:AVI