可以做任务看漫画的漫画网站,中国纪检监察报网站,软件技术招聘信息,王也天 葛优[Linux]文件系统 文件系统是操作系统的一部分#xff0c;负责组织、存储和管理存储在外部设备上的文件和目录#xff0c;也就是操作系统管理外设中的文件的策略。本文讲解的是Ext2文件系统。Linux操作系统使用的就是Ext系列的文件系统。 文章目录 [Linux]文件系统了解磁盘结构…[Linux]文件系统 文件系统是操作系统的一部分负责组织、存储和管理存储在外部设备上的文件和目录也就是操作系统管理外设中的文件的策略。本文讲解的是Ext2文件系统。Linux操作系统使用的就是Ext系列的文件系统。 文章目录 [Linux]文件系统了解磁盘结构磁盘的物理结构磁盘存储结构磁盘逻辑结构 EXT2文件系统的存储方案inode的具体应用补充细节 软硬链接创建软硬链接软硬链接的区别软硬链接的使用场景 文件的三个时间 了解磁盘结构
磁盘的物理结构
磁盘是计算机上的唯一的机械设备作为外设用于存储大量的数据磁盘内部的物理结构示意图如下 磁盘如上图的银色圆盘-- 由多个盘片组成每个盘片的每个面都能够存储数据磁头 – 每个盘片的每个面都有一个磁头磁头能够在对应的盘面中读写数据
磁盘存储数据的原理 计算机中的数据本质就是0和1的区别因此磁盘只需要利用磁性来代表数据的0和1。
磁盘存储结构 磁盘的每个盘片的盘面被划分成多个部分
磁道 磁盘表面被分为许多同心圆每个同心圆称为一个磁道每个磁道都有一个编号最外面的是0磁道。扇区 每个磁道被划分成若干个扇区每个扇区的存储容量为512字节每个扇区都有一个编号。
磁盘以扇区为单位进行数据的存储一个磁盘文件会占据一个或多个扇区的位置来存储要想加载磁盘文件到内存中需要定位到磁盘文件所在的一个或多个扇区。 定位扇区的方法
定位数据所在的是哪一个盘面 – 也就是选择哪一个对应的磁头。定位数据在所在盘面的哪一个的磁道。定位数据在所在磁道中的哪一个扇区。
磁头Heads、柱面(Cylinder)(等价于磁道)、扇区(Sector)对应的编号。即可在磁盘上定位所要访问的扇区。这种磁盘数据定位方式叫做 CHS 。
磁盘逻辑结构
磁盘需要抽象成逻辑结构的原因
OS是软件磁盘是硬件磁盘作为外设是可能被改变的为了防止由于外设的改变而导致物理结构寻址方式的失败OS采用逻辑地址将逻辑与物理的转换交给中间软件层驱动程序实现OS与外设的解耦磁盘存储的基本单位是512字节OS为了减少IO次数提高效率一次IO操作的基本单位是4KB可调整大小OS将一次IO的基本单位看作为块因此需要一套块级别地址进行访问 磁盘的逻辑结构就类似于拉开的磁带将一个盘片抽象成被拉开的磁带一圈磁带就类似于一个磁道。逻辑结构示意图如下: 扇区的大小是512字节而OS一次IO操作的基本单位是4KB因此OS将一次IO操作的数据抽象成数据块。逻辑结构示意图如下: OS将整个磁盘最终抽象成了多个连续的数据块也就是将物理结构转换成了线性逻辑结构因此OS能够将磁盘看作是有对应下标的数组结构每个下标指向的是一个数据块每一个下标也被称作逻辑块地址简称LBA。OS将磁盘看作是数组结构后每次IO操作就是找到数据块的首地址然后从该地址开始读取对应个数的扇区。
EXT2文件系统的存储方案
OS将磁盘看作是由数组结构组织起来的数据块由于数据块的数量众多OS将该数组结构划分成多个分区。逻辑结构示意图如下: 将磁盘进行分区后OS为了更方便的管理还将每个分区划分成多个分组。逻辑结构示意图如下: 磁盘众多分区中一般第一个分区存在一个Boot Block区域该区域存储着OS的开启相关信息计算机进行开机操作时会加载磁盘数据并使用该区域的数据完成开机操作。
将磁盘划分为若干个分组后OS将一个分组的管理策略运用到每个分组中实现对整个磁盘的管理。OS的具体管理策略如下: Super Block 记录该分区文件系统的重要信息使得操作系统能够正确地使用和管理文件系统。 Linux系统采用Ext系列的文件系统。Super Block在各个分组都可能存在并且统一更新是为了防止其损坏后导致整个文件系统无法使用。 Group Descriptor Table 记录改组的详细属性信息。 Block Bitmap 每个bit表示一个Data Blocks中的数据块是否空闲可用每个bit对应中的一个Data Blocks中的数据块。 inode Bitmap 每个bit表示一个inode是否空闲可用每个bit对应inode table中的一个inode。 inode Table 记录该组所有文件的索引节点。 inode内部的记录的是对应的一个文件的所有属性由于文件属性的可预见性一个inode大小为128字节。每一个inode都有自己的inode编号inode编号也数据对应文件的属性编号。inode内部记录了对应文件内容存储的数据块编号。 Data blocks 记录了文件的内容。 Data blocks区域内部被划分成了若干个大小为4KB的数据块。一个的文件的内容会根据大小使用若干个数据块。
分组中的以上每个区域都可能会使用若干个数据块。
inode的具体应用 Linux操作系统是通过文件的inode编号来区分文件的inode节点中不记录文件名。 目录作为文件也有自己的inode节点。 目录文件中记录的是该目录下的文件的inode编号和文件名的映射关系。 Linux操作系统查询文件的过程 在文件的对应目录下找到对应文件的inode编号。在对应目录所在的分区下找到对应inode编号所在的分组结合inode table,找到文件的inode节点。通过inode节点找到对应的数据块。 Linux操作系统删除文件的过程 在文件的对应目录下找到对应文件的inode编号。在对应目录所在的分区下找到对应inode编号所在的分组结合inode table,找到文件的inode节点。将inode节点中记录的数据块对应在Block Bitmap中的位图置为0。将inode节点对应在inode Bitmap中位图置为0。 Linux操作系统添加文件的过程 在要创建文件所在的目录所在的分组中查询inode bitmap,找到未被使用inode。将文件的属性写入新创建的inode。将文件名和inode编号的映射关系追加到所处目录的文件数据块中。 Linux操作系统修改文件的过程 在文件的对应目录下找到对应文件的inode编号。在对应目录所在的分区下找到对应inode编号所在的分组结合inode table,找到文件的inode节点。如果是空文件会根据写入数据的大小分配相应的数据块并将数据块对应位图置为1将数据块信息写入inode。将修改后的数据刷新写入到对应的数据块中。 Linux使用ls指令时带-i选项就可以查看到文件对应的inode编号 补充细节 文件的恢复 如果文件被误删后首先要避免文件操作以防被删除的文件数据被覆盖然后通过日志记录等技术找到被删除的文件对应的inode编号将inode编号对应位图置为1对应数据块置为1从而完成文件的恢复。 inode编号寻找对应分组的策略 在一个分区中每个分组所使用的inode编号是有范围的通过inode编号所在范围能够快速确定inode所在的分组。 分区和分组的完成 在安装操作系统时会根据用户指定的各分区大小进行分区的设置然后对会对每个分区进行格式化格式化就是操作系统向分区写入文件系统管理信息的。 inode记录对应数据块的策略 inode节点中采用数组记录对应数据块以至于inode节点的大小得以确定但是如果数组中的一个数据只能对应一个数据块那么一个inode节点能指向的数据块是有限的因此inode节点采用三级索引的策略来映射对应的数据块将该数组划分成三个部分每个部分采用不同的索引方式。
直接索引 数组记录的数据块编号对应的数据块中就是文件内容。 二级索引 数组记录的编号对应的数据块中记录的是其他数据块的编号这些被记录在数据块中的数据块编号对应的数据块中存储的是文件内容。 三级索引 数组记录的编号对应的数据块中记录的是其他数据块的编号这些被记录在数据块中的数据块编号对应的数据块中存储的也是其他数据块的编号并且这些编号指向存储文件内容的数据块。 inode映射的存在的问题 EXT2存储方案存在一个分组数据块用完、inode没用完或者inode用完、数据块没用完的问题并且如果出现这种情况是无法解决的。
软硬链接
创建软硬链接
创建软链接 在Linux系统下ln -s 被链接的文件名 软链接名字指令能够创建软连接。 创建硬链接 在Linux系统下ln 被链接的文件名 硬链接名字指令能够创建硬连接。 软硬链接的区别 软链接 软链接有自己的inode编号是一个独立的文件软链接中存储的是链接文件的路径信息 硬链接 硬链接和链接的文件共用同一个inode编号硬链接和链接文件使用同一个inode硬链接创建的本质是在目录下添加一组inode编号和文件名的映射并且在对应的inode中的引用计数进行1操作当inode中引用计数为0代表该文件没有文件名和其inode编号映射将删除该文件 软硬链接的使用场景
软链接适用于某一文件所在路径比较繁琐可以不用进入路径或打出路径就可以访问文件功能类似于Windows系统中的快捷方式。 硬链接使得Linux系统能够使用相对路径进行操作。 实际上每个目录中的.就是一个硬链接链接是当前目录.硬链接实现了以相对路径访问当前目录文件的功能。 在目录下创建一个新目录后Linux系统会为新目录创建一个..硬链接链接的就是上级目录..硬链接实现了以相对路径访问上级目录文件的功能。
可以看出一个目录的硬链接数目录中的.. 目录下的目录数量 2目录本身和目录中的. 注意 用户不能给目录创建硬链接避免出现路径环路问题系统自己维护目录硬链接。
文件的三个时间
Access 最后访问时间Modify 文件内容最后修改时间Change 属性最后修改时间
stat 文件名查看文件信息其中就有文件的这三个时间 访问文件时 Access时间就会进行更新 注意 在最新的Linux版本中为了节省IO操作造成的时间浪费如果只是单纯的查看数据不一定会立刻修改Access时间。
修改文件内容时 Modify和Change时间都会进行更新 修改文件属性时 Change时间会进行更新